unit tests for math.floats.env

db4
Joe Groff 2009-09-06 07:50:56 -05:00
parent 36ec53a968
commit 96db254311
1 changed files with 123 additions and 0 deletions

123
basis/math/floats/env/env-tests.factor vendored Normal file
View File

@ -0,0 +1,123 @@
USING: kernel math math.floats.env math.functions math.libm
sets tools.test ;
IN: math.floats.env.tests
[ t ] [
[ 1.0 0.0 / drop ] collect-fp-exceptions
{ +fp-zero-divide+ } set=
] unit-test
[ t ] [
[ 1.0 3.0 / drop ] collect-fp-exceptions
{ +fp-inexact+ } set=
] unit-test
[ t ] [
[ 2.0 100000.0 ^ drop ] collect-fp-exceptions
{ +fp-inexact+ +fp-overflow+ } set=
] unit-test
[ t ] [
[ 2.0 -100000.0 ^ drop ] collect-fp-exceptions
{ +fp-inexact+ +fp-underflow+ } set=
] unit-test
[ t ] [
[ -1.0 fsqrt drop ] collect-fp-exceptions
{ +fp-invalid-operation+ } set=
] unit-test
[
HEX: 3fd5,5555,5555,5555
HEX: 3fc9,9999,9999,999a
HEX: bfc9,9999,9999,999a
HEX: bfd5,5555,5555,5555
] [
+round-nearest+ [
1.0 3.0 /f double>bits
1.0 5.0 /f double>bits
-1.0 5.0 /f double>bits
-1.0 3.0 /f double>bits
] with-rounding-mode
] unit-test
[
HEX: 3fd5,5555,5555,5555
HEX: 3fc9,9999,9999,9999
HEX: bfc9,9999,9999,999a
HEX: bfd5,5555,5555,5556
] [
+round-down+ [
1.0 3.0 /f double>bits
1.0 5.0 /f double>bits
-1.0 5.0 /f double>bits
-1.0 3.0 /f double>bits
] with-rounding-mode
] unit-test
[
HEX: 3fd5,5555,5555,5556
HEX: 3fc9,9999,9999,999a
HEX: bfc9,9999,9999,9999
HEX: bfd5,5555,5555,5555
] [
+round-up+ [
1.0 3.0 /f double>bits
1.0 5.0 /f double>bits
-1.0 5.0 /f double>bits
-1.0 3.0 /f double>bits
] with-rounding-mode
] unit-test
[
HEX: 3fd5,5555,5555,5555
HEX: 3fc9,9999,9999,9999
HEX: bfc9,9999,9999,9999
HEX: bfd5,5555,5555,5555
] [
+round-zero+ [
1.0 3.0 /f double>bits
1.0 5.0 /f double>bits
-1.0 5.0 /f double>bits
-1.0 3.0 /f double>bits
] with-rounding-mode
] unit-test
! ensure rounding mode is restored to +round-nearest+
[
HEX: 3fd5,5555,5555,5555
HEX: 3fc9,9999,9999,999a
HEX: bfc9,9999,9999,999a
HEX: bfd5,5555,5555,5555
] [
1.0 3.0 /f double>bits
1.0 5.0 /f double>bits
-1.0 5.0 /f double>bits
-1.0 3.0 /f double>bits
] unit-test
[
HEX: 0000,0000,0000,07e8
] [
+denormal-keep+ [
10.0 -320.0 ^ double>bits
] with-denormal-mode
] unit-test
[
HEX: 0000,0000,0000,0000
] [
+denormal-flush+ [
10.0 -320.0 ^ double>bits
] with-denormal-mode
] unit-test
! ensure denormal mode is restored to +denormal-keep+
[
HEX: 0000,0000,0000,07e8
] [
+denormal-keep+ [
10.0 -320.0 ^ double>bits
] with-denormal-mode
] unit-test