]> gitweb.factorcode.org Git - factor.git/blob - extra/ryu/ryu-tests.factor
inverse: Fix docs
[factor.git] / extra / ryu / ryu-tests.factor
1 ! Copyright (C) 2018 Alexander Ilin.
2 ! See http://factorcode.org/license.txt for BSD license.
3 USING: kernel ryu math math.bitwise tools.test ;
4 IN: ryu.tests
5
6 ! Basic
7 { "0e0" } [ 0.0 d2s ] unit-test
8 { "-0e0" } [ -0.0 d2s ] unit-test
9 { "1e0" } [ 1.0 d2s ] unit-test
10 { "-1e0" } [ -1.0 d2s ] unit-test
11 { "NaN" } [ 0/0. d2s ] unit-test
12 { "Inf" } [ 1/0. d2s ] unit-test
13 { "-Inf" } [ -1/0. d2s ] unit-test
14
15 ! SwitchToSubnormal
16 { "2.2250738585072014e-308" } [ 2.2250738585072014e-308 d2s ] unit-test
17
18 ! MinAndMax
19 { "1.7976931348623157e308" } [ 0x7fefffffffffffff bits>double d2s ] unit-test
20 { "5e-324" } [ 1 bits>double d2s ] unit-test
21
22 ! LotsOfTrailingZeros
23 { "2.9802322387695312e-8" } [ 2.98023223876953125e-8 d2s ] unit-test
24
25 ! Regression
26 { "-2.109808898695963e16" } [ -2.109808898695963e16 d2s ] unit-test
27 { "4.940656e-318" } [ 4.940656e-318 d2s ] unit-test
28 { "1.18575755e-316" } [ 1.18575755e-316 d2s ] unit-test
29 { "2.989102097996e-312" } [ 2.989102097996e-312 d2s ] unit-test
30 { "9.0608011534336e15" } [ 9.0608011534336e15 d2s ] unit-test
31 { "4.708356024711512e18" } [ 4.708356024711512e18 d2s ] unit-test
32 { "9.409340012568248e18" } [ 9.409340012568248e18 d2s ] unit-test
33 { "1.2345678e0" } [ 1.2345678 d2s ] unit-test
34
35
36 ! LooksLikePow5
37 ! These numbers have a mantissa that is a multiple of the largest power of
38 ! 5 that fits, and an exponent that causes the computation for q to result
39 ! in 22, which is a corner case for Ryu.
40 { "5.764607523034235e39" } [ 0x4830F0CF064DD592 bits>double d2s ] unit-test
41 { "1.152921504606847e40" } [ 0x4840F0CF064DD592 bits>double d2s ] unit-test
42 { "2.305843009213694e40" } [ 0x4850F0CF064DD592 bits>double d2s ] unit-test
43
44 ! OutputLength
45 { "1e0" } [ 1 d2s ] unit-test ! already tested in Basic
46 { "1.2e0" } [ 1.2 d2s ] unit-test
47 { "1.23e0" } [ 1.23 d2s ] unit-test
48 { "1.234e0" } [ 1.234 d2s ] unit-test
49 { "1.2345e0" } [ 1.2345 d2s ] unit-test
50 { "1.23456e0" } [ 1.23456 d2s ] unit-test
51 { "1.234567e0" } [ 1.234567 d2s ] unit-test
52 { "1.2345678e0" } [ 1.2345678 d2s ] unit-test ! already tested in Regression
53 { "1.23456789e0" } [ 1.23456789 d2s ] unit-test
54 { "1.234567895e0" } [ 1.234567895 d2s ] unit-test ! 1.234567890 would be trimmed
55 { "1.2345678901e0" } [ 1.2345678901 d2s ] unit-test
56 { "1.23456789012e0" } [ 1.23456789012 d2s ] unit-test
57 { "1.234567890123e0" } [ 1.234567890123 d2s ] unit-test
58 { "1.2345678901234e0" } [ 1.2345678901234 d2s ] unit-test
59 { "1.23456789012345e0" } [ 1.23456789012345 d2s ] unit-test
60 { "1.234567890123456e0" } [ 1.234567890123456 d2s ] unit-test
61 { "1.2345678901234567e0" } [ 1.2345678901234567 d2s ] unit-test
62
63 ! Test 32-bit chunking
64 { "4.294967294e0" } [ 4.294967294 d2s ] unit-test ! 2^32 - 2
65 { "4.294967295e0" } [ 4.294967295 d2s ] unit-test ! 2^32 - 1
66 { "4.294967296e0" } [ 4.294967296 d2s ] unit-test ! 2^32
67 { "4.294967297e0" } [ 4.294967297 d2s ] unit-test ! 2^32 + 1
68 { "4.294967298e0" } [ 4.294967298 d2s ] unit-test ! 2^32 + 2
69
70 ! Test min, max shift values in shiftright128
71 ! MinMaxShift
72
73 : make-double ( mantissa exponent neg? -- float )
74     [ 11 set-bit ] when 52 shift bitor bits>double ;
75
76 CONSTANT: maxMantissa 9007199254740991 ! (1 << 53) - 1;
77
78 { "1.7800590868057611e-307" } [ 0 4 f make-double d2s ] unit-test
79 { "2.8480945388892175e-306" } [ maxMantissa 6 f make-double d2s ] unit-test
80 { "2.446494580089078e-296" } [ 0 41 f make-double d2s ] unit-test
81 { "4.8929891601781557e-296" } [ maxMantissa 40 f make-double d2s ] unit-test
82 { "1.8014398509481984e16" } [ 0 1077 f make-double d2s ] unit-test
83 { "3.6028797018963964e16" } [ maxMantissa 1076 f make-double d2s ] unit-test
84 { "2.900835519859558e-216" } [ 0 307 f make-double d2s ] unit-test
85 { "5.801671039719115e-216" } [ maxMantissa 306 f make-double d2s ] unit-test
86 { "3.196104012172126e-27" } [ 0x000FA7161A4D6e0C 934 f make-double d2s ] unit-test