Patrick Rein uploaded a new version of KernelTests to project The Trunk:
http://source.squeak.org/trunk/KernelTests-pre.349.mcz ==================== Summary ==================== Name: KernelTests-pre.349 Author: pre Time: 13 October 2018, 3:57:17.109133 pm UUID: 98156591-d8ac-7f49-84f1-0a58728d10f1 Ancestors: KernelTests-cmm.348 Temporarily disables an underflow test which fails depending on the word size of the VM. =============== Diff against KernelTests-cmm.348 =============== Item was changed: + ----- Method: FloatTest>>expectedFailures (in category 'failures') ----- - ----- Method: FloatTest>>expectedFailures (in category 'characterization') ----- expectedFailures + ^#(testTimesTwoPowerGradualUnderflow)! - ^ Smalltalk platformName = 'Win32' - ifTrue: [#(testTimesTwoPowerGradualUnderflow)] - ifFalse: [#()]! Item was changed: ----- Method: FloatTest>>testTimesTwoPowerGradualUnderflow (in category 'testing - arithmetic') ----- testTimesTwoPowerGradualUnderflow "Here is a vicious case where timesTwoPower is inexact because it underflows. And two consecutive inexact operations lead to a different result than a single one. Typically expressed as multiple of Float fmin in base 2, 2r1011*Float fmin shifted by -3 with round to nearest, tie to even mode: -> round(1.011) -> 1.0 = fmin But if first shifted by -2 then by -1: -> round(10.11) -> 11.0 = 3*fmin -> round(1.1) -> 10.0 = 2*fmin Or first shifted by -1 then by -2: -> round(101.1) -> 110.0 = 6*fmin -> round(1.1) -> 10.0 = 2*fmin A naive implementation that split the shift uncarefully might fail to handle such case correctly." | f | f := 2r1011 asFloat. "scan the whole range of possible exponents for this significand" Float fmin exponent + f exponent to: Float fmax exponent - f exponent do: [:exp | | g | g := f timesTwoPower: exp. + self assert: (g timesTwoPower: Float fmin exponent - g exponent) = Float fmin]. + + "Forces a failure for 5.2 release. The test result seems to depend on the word size of the VM --pre" + self assert: false. ! - self assert: (g timesTwoPower: Float fmin exponent - g exponent) = Float fmin]! |
On Sat, 13 Oct 2018, [hidden email] wrote:
> Patrick Rein uploaded a new version of KernelTests to project The Trunk: > http://source.squeak.org/trunk/KernelTests-pre.349.mcz > > ==================== Summary ==================== > > Name: KernelTests-pre.349 > Author: pre > Time: 13 October 2018, 3:57:17.109133 pm > UUID: 98156591-d8ac-7f49-84f1-0a58728d10f1 > Ancestors: KernelTests-cmm.348 > > Temporarily disables an underflow test which fails depending on the word size of the VM. This doesn't seem right. The issue is Win32 only, and the test passes on 64-bit VMs even on windows. So that makes it a Win32-32bit-VM-only issue (I haven't checked if it passes there or not, but your comment suggests it does not). I see no reason to bring that failure to all the other platforms. Why not just mark it as expected failure on Win32 + 32bit VM instead? Levente > > =============== Diff against KernelTests-cmm.348 =============== > > Item was changed: > + ----- Method: FloatTest>>expectedFailures (in category 'failures') ----- > - ----- Method: FloatTest>>expectedFailures (in category 'characterization') ----- > expectedFailures > > + ^#(testTimesTwoPowerGradualUnderflow)! > - ^ Smalltalk platformName = 'Win32' > - ifTrue: [#(testTimesTwoPowerGradualUnderflow)] > - ifFalse: [#()]! > > Item was changed: > ----- Method: FloatTest>>testTimesTwoPowerGradualUnderflow (in category 'testing - arithmetic') ----- > testTimesTwoPowerGradualUnderflow > "Here is a vicious case where timesTwoPower is inexact because it underflows. > And two consecutive inexact operations lead to a different result than a single one. > Typically expressed as multiple of Float fmin in base 2, > 2r1011*Float fmin shifted by -3 with round to nearest, tie to even mode: > -> round(1.011) -> 1.0 = fmin > But if first shifted by -2 then by -1: > -> round(10.11) -> 11.0 = 3*fmin > -> round(1.1) -> 10.0 = 2*fmin > Or first shifted by -1 then by -2: > -> round(101.1) -> 110.0 = 6*fmin > -> round(1.1) -> 10.0 = 2*fmin > A naive implementation that split the shift uncarefully might fail to handle such case correctly." > | f | > f := 2r1011 asFloat. > "scan the whole range of possible exponents for this significand" > Float fmin exponent + f exponent to: Float fmax exponent - f exponent > do: > [:exp | > | g | > g := f timesTwoPower: exp. > + self assert: (g timesTwoPower: Float fmin exponent - g exponent) = Float fmin]. > + > + "Forces a failure for 5.2 release. The test result seems to depend on the word size of the VM --pre" > + self assert: false. ! > - self assert: (g timesTwoPower: Float fmin exponent - g exponent) = Float fmin]! |
We considered this for a while and decided to not document the factors leading to the test failure in expectedFailures. We have seen the test fail on Windows and Mac OS with different VM versions on 32bit and 64bit. On more recent VMs the word size *seems* to be the dominant factor.
As the issue is not limited to one configuration we decided to mark it as failing for 5.2 in general. I will revert the failure for trunk for sure! Bests Patrick ________________________________________ From: Squeak-dev <[hidden email]> on behalf of Levente Uzonyi <[hidden email]> Sent: Saturday, October 13, 2018 16:47 To: [hidden email] Cc: [hidden email] Subject: Re: [squeak-dev] The Trunk: KernelTests-pre.349.mcz On Sat, 13 Oct 2018, [hidden email] wrote: > Patrick Rein uploaded a new version of KernelTests to project The Trunk: > http://source.squeak.org/trunk/KernelTests-pre.349.mcz > > ==================== Summary ==================== > > Name: KernelTests-pre.349 > Author: pre > Time: 13 October 2018, 3:57:17.109133 pm > UUID: 98156591-d8ac-7f49-84f1-0a58728d10f1 > Ancestors: KernelTests-cmm.348 > > Temporarily disables an underflow test which fails depending on the word size of the VM. This doesn't seem right. The issue is Win32 only, and the test passes on 64-bit VMs even on windows. So that makes it a Win32-32bit-VM-only issue (I haven't checked if it passes there or not, but your comment suggests it does not). I see no reason to bring that failure to all the other platforms. Why not just mark it as expected failure on Win32 + 32bit VM instead? Levente > > =============== Diff against KernelTests-cmm.348 =============== > > Item was changed: > + ----- Method: FloatTest>>expectedFailures (in category 'failures') ----- > - ----- Method: FloatTest>>expectedFailures (in category 'characterization') ----- > expectedFailures > > + ^#(testTimesTwoPowerGradualUnderflow)! > - ^ Smalltalk platformName = 'Win32' > - ifTrue: [#(testTimesTwoPowerGradualUnderflow)] > - ifFalse: [#()]! > > Item was changed: > ----- Method: FloatTest>>testTimesTwoPowerGradualUnderflow (in category 'testing - arithmetic') ----- > testTimesTwoPowerGradualUnderflow > "Here is a vicious case where timesTwoPower is inexact because it underflows. > And two consecutive inexact operations lead to a different result than a single one. > Typically expressed as multiple of Float fmin in base 2, > 2r1011*Float fmin shifted by -3 with round to nearest, tie to even mode: > -> round(1.011) -> 1.0 = fmin > But if first shifted by -2 then by -1: > -> round(10.11) -> 11.0 = 3*fmin > -> round(1.1) -> 10.0 = 2*fmin > Or first shifted by -1 then by -2: > -> round(101.1) -> 110.0 = 6*fmin > -> round(1.1) -> 10.0 = 2*fmin > A naive implementation that split the shift uncarefully might fail to handle such case correctly." > | f | > f := 2r1011 asFloat. > "scan the whole range of possible exponents for this significand" > Float fmin exponent + f exponent to: Float fmax exponent - f exponent > do: > [:exp | > | g | > g := f timesTwoPower: exp. > + self assert: (g timesTwoPower: Float fmin exponent - g exponent) = Float fmin]. > + > + "Forces a failure for 5.2 release. The test result seems to depend on the word size of the VM --pre" > + self assert: false. ! > - self assert: (g timesTwoPower: Float fmin exponent - g exponent) = Float fmin]! |
Free forum by Nabble | Edit this page |