[squeak-dev] The Trunk: KernelTests-nice.219.mcz

commits at source.squeak.org commits at source.squeak.org
Wed May 16 19:25:25 UTC 2012


Nicolas Cellier uploaded a new version of KernelTests to project The Trunk:
http://source.squeak.org/trunk/KernelTests-nice.219.mcz

==================== Summary ====================

Name: KernelTests-nice.219
Author: nice
Time: 16 May 2012, 9:24:45.781 pm
UUID: 45b90705-6f5f-4f0c-add8-6783781f3822
Ancestors: KernelTests-nice.218

Add a test to demonstrate that despite being internally represented in base 2, a Float cannot compute floorLog: 2 exactly if it only rely on inexact log: implementation.

Indeed, an error on math functions values up to 3 ulp is compliant with IEEE 754 floating point standard.

=============== Diff against KernelTests-nice.218 ===============

Item was changed:
+ ----- Method: FloatTest>>testArCosh (in category 'tests - mathematical functions') -----
- ----- Method: FloatTest>>testArCosh (in category 'test - mathematical functions') -----
  testArCosh
  	self assert: 1.0 arCosh = 0.0.
  	self deny: Float infinity arCosh isFinite.
  	self assert: (2.5 arCosh cosh closeTo: 2.5).!

Item was changed:
+ ----- Method: FloatTest>>testArSinh (in category 'tests - mathematical functions') -----
- ----- Method: FloatTest>>testArSinh (in category 'test - mathematical functions') -----
  testArSinh
  	self assert: 0.0 arSinh = 0.0.
  	self assert: Float negativeZero arSinh = 0.0.
  	self assert: Float negativeZero arSinh sign = -1.
  	self deny: Float infinity arSinh isFinite.
  	self assert: (0.5 arSinh negated closeTo: 0.5 negated arSinh).
  	self assert: (0.5 arSinh sinh closeTo: 0.5).
  	self assert: (-2.5 arSinh sinh closeTo: -2.5).!

Item was changed:
+ ----- Method: FloatTest>>testArTanh (in category 'tests - mathematical functions') -----
- ----- Method: FloatTest>>testArTanh (in category 'test - mathematical functions') -----
  testArTanh
  	self assert: 0.0 arTanh = 0.0.
  	self assert: Float negativeZero arTanh = 0.0.
  	self assert: Float negativeZero arTanh sign = -1.
  	self deny: 1 arTanh isFinite.
  	self assert: (0.5 arTanh negated closeTo: 0.5 negated arTanh).
  	self assert: (0.5 arTanh tanh closeTo: 0.5).
  	self assert: (-0.5 arTanh tanh closeTo: -0.5).!

Item was changed:
+ ----- Method: FloatTest>>testCosh (in category 'tests - mathematical functions') -----
- ----- Method: FloatTest>>testCosh (in category 'test - mathematical functions') -----
  testCosh
  	self assert: (0.0 cosh closeTo: 1).
  	self deny: Float infinity cosh isFinite.
  	self assert: (2.0 cosh squared - 2.0 sinh squared closeTo: 1).
  	self assert: (2.0 cosh closeTo: 2.0 negated cosh).!

Item was changed:
+ ----- Method: FloatTest>>testDegreeCos (in category 'tests - mathematical functions') -----
- ----- Method: FloatTest>>testDegreeCos (in category 'test - mathematical functions') -----
  testDegreeCos	
  	self shouldnt: [ 45.0 degreeCos] raise: Error.
  	"Following tests use approximate equality, because cosine are generally evaluated using inexact Floating point arithmetic"
  	self assert: (45.0 degreeCos squared - 0.5) abs <= Float epsilon.
  	self assert: (60.0 degreeCos - 0.5) abs <= Float epsilon.
  	self assert: (120.0 degreeCos + 0.5) abs <= Float epsilon.
  	-360.0 to: 360.0 do: [:i |
  		self assert: (i degreeCos closeTo: i degreesToRadians cos)].
  	
  	"Following tests use strict equality which is a requested property of degreeCos"
  	-10.0 to: 10.0 do: [:k |
  		self assert: (k*360 + 90) degreeCos = 0.
  		self assert: (k*360 - 90) degreeCos = 0.
  		self assert: (k*360 + 180) degreeCos + 1 = 0.
  		self assert: (k*360) degreeCos - 1 = 0.].!

Item was changed:
+ ----- Method: FloatTest>>testDegreeCosForExceptionalValues (in category 'tests - mathematical functions') -----
- ----- Method: FloatTest>>testDegreeCosForExceptionalValues (in category 'test - mathematical functions') -----
  testDegreeCosForExceptionalValues
  	self assert: Float nan degreeCos isNaN.
  	self assert: Float infinity degreeCos isNaN.
  	self assert: Float infinity negated degreeCos isNaN.!

Item was changed:
+ ----- Method: FloatTest>>testDegreeSin (in category 'tests - mathematical functions') -----
- ----- Method: FloatTest>>testDegreeSin (in category 'test - mathematical functions') -----
  testDegreeSin	
  	self shouldnt: [ 45.0 degreeSin] raise: Error.
  	"Following tests use approximate equality, because sine are generally evaluated using inexact Floating point arithmetic"
  	self assert: (45.0 degreeSin squared - 0.5) abs <= Float epsilon.
  	self assert: (30.0 degreeSin - 0.5) abs <= Float epsilon.
  	self assert: (-30.0 degreeSin + 0.5) abs <= Float epsilon.
  	-360.0 to: 360.0 do: [:i |
  		self assert: (i degreeSin closeTo: i degreesToRadians sin)].
  	
  	"Following tests use strict equality which is a requested property of degreeSin"
  	-10.0 to: 10.0 do: [:k |
  		self assert: (k*360 + 90) degreeSin - 1 = 0.
  		self assert: (k*360 - 90) degreeSin + 1= 0.
  		self assert: (k*360 + 180) degreeSin = 0.
  		self assert: (k*360) degreeSin = 0.].!

Item was changed:
+ ----- Method: FloatTest>>testDegreeSinForExceptionalValues (in category 'tests - mathematical functions') -----
- ----- Method: FloatTest>>testDegreeSinForExceptionalValues (in category 'test - mathematical functions') -----
  testDegreeSinForExceptionalValues
  	self assert: Float nan degreeSin isNaN.
  	self assert: Float infinity degreeSin isNaN.
  	self assert: Float infinity negated degreeSin isNaN.!

Item was added:
+ ----- Method: FloatTest>>testFloorLog2 (in category 'tests - mathematical functions') -----
+ testFloorLog2
+ 	"Float internal representation of Float being in base 2, we expect (aFloat floorLog: 2) to be exact."
+ 	
+ 	| aBitLess aBitMore |
+ 	aBitMore := 1 + Float epsilon.
+ 	aBitLess := 1 - Float epsilon.
+ 	Float emin + 1 to: Float emax - 1 do: [:exp |
+ 		| exactPowerOfTwo |
+ 		exactPowerOfTwo := 1.0 timesTwoPower: exp.
+ 		self assert: (exactPowerOfTwo floorLog: 2) equals: exp.
+ 		self assert: (exactPowerOfTwo * aBitMore floorLog: 2) equals: exp.
+ 		self assert: (exactPowerOfTwo * aBitLess floorLog: 2) equals: exp - 1].!

Item was changed:
+ ----- Method: FloatTest>>testSinh (in category 'tests - mathematical functions') -----
- ----- Method: FloatTest>>testSinh (in category 'test - mathematical functions') -----
  testSinh
  	self assert: 0.0 sinh = 0.0.
  	self assert: Float negativeZero sinh = 0.0.
  	self assert: Float negativeZero sinh sign = -1.
  	self deny: Float infinity sinh isFinite.
  	self assert: (2.0 cosh squared - 2.0 sinh squared closeTo: 1).
  	self assert: (2.0 sinh negated closeTo: 2.0 negated sinh).!

Item was changed:
+ ----- Method: FloatTest>>testTanh (in category 'tests - mathematical functions') -----
- ----- Method: FloatTest>>testTanh (in category 'test - mathematical functions') -----
  testTanh
  	self assert: 0.0 tanh = 0.0.
  	self assert: Float negativeZero tanh = 0.0.
  	self assert: Float negativeZero tanh sign = -1.
  	self assert: (Float infinity tanh closeTo: 1).
  	self assert: (2.0 cosh squared - 2.0 sinh squared closeTo: 1).
  	self assert: (2.0 tanh negated closeTo: 2.0 negated tanh).!



More information about the Squeak-dev mailing list