[squeakdev] The Trunk: KernelTestsnice.363.mcz
commits at source.squeak.org
commits at source.squeak.org
Sun May 12 20:47:19 UTC 2019
Nicolas Cellier uploaded a new version of KernelTests to project The Trunk:
http://source.squeak.org/trunk/KernelTestsnice.363.mcz
==================== Summary ====================
Name: KernelTestsnice.363
Author: nice
Time: 12 May 2019, 10:47:16.307052 pm
UUID: 6b78d1d757ac4173ad99442804a134cf
Ancestors: KernelTestsnice.362
Test the fallback code for Float sqrt (used when primitives 55 or 555 are absent)
=============== Diff against KernelTestsnice.362 ===============
Item was changed:
 Method: FloatTest>>testIsZero (in category 'tests  zero behavior') 
testIsZero
self assert: 0.0 isZero.
+ self assert: Float negativeZero isZero.
self deny: 0.1 isZero.!
Item was added:
+  Method: FloatTest>>testSqrtFallback (in category 'tests  mathematical functions') 
+ testSqrtFallback
+  fallBackMethod 
+ fallBackMethod := Float>>#sqrt.
+ {Float fmin. Float fmin * 2.0. Float fmin * 63.0. Float fmax. Float fmax predecessor predecessor.
+ 1.0. 2.0. 3.0. 4.0. 5.0}
+ do: [:f 
+  s sm sp 
+ "check against the primitives  if they are absent, it does not test anything..."
+ s := fallBackMethod valueWithReceiver: f arguments: Array new.
+ self assert: s equals: f sqrt.
+
+ "in case we don't have the primitive, use exact arithmetic and a bit of logic"
+ sm := s asTrueFraction  (s ulp asTrueFraction / 2).
+ sp := s asTrueFraction + (s ulp asTrueFraction / 2).
+
+ self assert: s asTrueFraction squared < f ==> [sp squared > f]
+ description: '(s)^2 < (s+ulp/2)^2 <= f => s is more than ulp/2 away from the true square root of f'.
+ self assert: s asTrueFraction squared > f ==> [sm squared < f]
+ description: 'f <= (sulp/2)^2 < (s)^2 ==> s is more than ulp/2 away from the true square root of f'].
+ self assertIsNegativeZero: (fallBackMethod valueWithReceiver: Float negativeZero arguments: Array new).
+ self assertIsPositiveZero: (fallBackMethod valueWithReceiver: 0.0 arguments: Array new).
+ self assert: (fallBackMethod valueWithReceiver: Float nan arguments: Array new) isNaN.
+ self assert: (fallBackMethod valueWithReceiver: Float infinity arguments: Array new) equals: Float infinity.
+ self should: [fallBackMethod valueWithReceiver: 2.0 arguments: Array new] raise: DomainError!
More information about the Squeakdev
mailing list
