The Trunk: KernelTests-pre.349.mcz

Previous Topic Next Topic
 
classic Classic list List threaded Threaded
3 messages Options
Reply | Threaded
Open this post in threaded view
|

The Trunk: KernelTests-pre.349.mcz

commits-2
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]!


Reply | Threaded
Open this post in threaded view
|

Re: The Trunk: KernelTests-pre.349.mcz

Levente Uzonyi
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]!

Reply | Threaded
Open this post in threaded view
|

Re: The Trunk: KernelTests-pre.349.mcz

Patrick R.
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]!