Commit | Line | Data |
---|---|---|
7f918cf1 CE |
1 | functor Test (R: REAL) = |
2 | struct | |
3 | ||
4 | open R | |
5 | ||
6 | val posZero = minPos - minPos | |
7 | val negZero = ~posZero | |
8 | ||
9 | val rs = | |
10 | [(negZero, negZero, negZero), | |
11 | (negZero, posZero, posZero), | |
12 | (posZero, negZero, negZero), | |
13 | (posZero, posZero, posZero), | |
14 | (negZero, posInf, minPos), | |
15 | (negZero, negInf, ~minPos), | |
16 | (posZero, posInf, minPos), | |
17 | (posZero, negInf, ~minPos), | |
18 | (minPos, posZero, posZero), | |
19 | (minPos, negZero, posZero), | |
20 | (minPos, negInf, posZero), | |
21 | (~minPos, posZero, negZero), | |
22 | (~minPos, negZero, negZero), | |
23 | (~minPos, posInf, negZero), | |
24 | (minPos, minPos, minPos), | |
25 | (~minPos, ~minPos, ~minPos), | |
26 | (minPos, posInf, fromInt 2 * minPos), | |
27 | (~minPos, negInf, ~(fromInt 2 * minPos)), | |
28 | (maxFinite, posInf, posInf), | |
29 | (~maxFinite, negInf, negInf), | |
30 | (nextAfter (minNormalPos, negInf), posInf, minNormalPos)] | |
31 | ||
32 | val () = | |
33 | List.app | |
34 | (fn (x, y, z) => | |
35 | let | |
36 | val r2s = fmt StringCvt.EXACT | |
37 | val z' = nextAfter (x, y) | |
38 | in | |
39 | print (concat ["nextAfter (", r2s x, ", ", r2s y, ") = ", r2s z', " ", | |
40 | if == (z, z') then "OK" else concat ["<> ", r2s z], | |
41 | "\n"]) | |
42 | end) | |
43 | rs | |
44 | ||
45 | end | |
46 | ||
47 | structure Z = Test (Real32) | |
48 | structure Z = Test (Real64) | |
49 |