Commit | Line | Data |
---|---|---|
7f918cf1 CE |
1 | (* Auxiliary functions for test cases *) |
2 | ||
3 | infix 1 seq | |
4 | fun e1 seq e2 = e2; | |
5 | fun check b = if b then "OK" else "WRONG"; | |
6 | fun check' f = (if f () then "OK" else "WRONG") handle _ => "EXN"; | |
7 | ||
8 | fun range (from, to) p = | |
9 | let open Int | |
10 | in | |
11 | (from > to) orelse (p from) andalso (range (from+1, to) p) | |
12 | end; | |
13 | ||
14 | fun checkrange bounds = check o range bounds; | |
15 | ||
16 | fun tst0 s s' = print (s ^ " \t" ^ s' ^ "\n"); | |
17 | fun tst s b = tst0 s (check b); | |
18 | fun tst' s f = tst0 s (check' f); | |
19 | ||
20 | fun tstrange s bounds = (tst s) o range bounds | |
21 | ||
22 | (* test/time.sml | |
23 | PS 1995-03-23 | |
24 | *) | |
25 | ||
26 | val _ = print "\nFile time.sml: Testing structure Time...\n" | |
27 | ||
28 | local | |
29 | fun fib n = if n<2 then 1 else fib(n-1) + fib(n-2); | |
30 | open Time | |
31 | val bigt = fromSeconds 987654321 + fromMicroseconds 500012; | |
32 | val litt = fromSeconds 454 + fromMicroseconds 501701 | |
33 | ||
34 | val test1 = | |
35 | tst' "test1" (fn _ => zeroTime + bigt = bigt andalso bigt - zeroTime = bigt); | |
36 | ||
37 | val test2a = | |
38 | tst' "test2a" (fn _ => toSeconds zeroTime = 0 | |
39 | andalso zeroTime = fromSeconds 0 | |
40 | andalso zeroTime = fromMilliseconds 0 | |
41 | andalso zeroTime = fromMicroseconds 0); | |
42 | val test2b = | |
43 | tst' "test2b" (fn _ => toSeconds bigt = 987654321 | |
44 | andalso toSeconds litt = 454 | |
45 | andalso toMilliseconds litt = 454501 | |
46 | andalso toMicroseconds litt = 454501701); | |
47 | val test2c = tst0 "test2c" ((fromSeconds ~1 seq "OK") | |
48 | handle _ => "WRONG") | |
49 | val test2d = tst0 "test2d" ((fromMilliseconds ~1 seq "OK") | |
50 | handle _ => "WRONG") | |
51 | val test2e = tst0 "test2e" ((fromMicroseconds ~1 seq "OK") | |
52 | handle _ => "WRONG") | |
53 | ||
54 | val test3a = | |
55 | tst' "test3a" (fn _ => fromReal 0.0 = zeroTime | |
56 | andalso fromReal 10.25 = fromSeconds 10 + fromMilliseconds 250); | |
57 | val test3b = tst0 "test3b" ((fromReal ~1.0 seq "OK") | |
58 | handle _ => "WRONG") | |
59 | val test3c = tst0 "test3c" ((fromReal 1E300 seq "OK") | |
60 | handle Time => "OK" | _ => "WRONG") | |
61 | ||
62 | val test4a = | |
63 | tst' "test4a" (fn _ => Real.==(toReal (fromReal 100.25), 100.25)); | |
64 | ||
65 | val test6a = | |
66 | tst' "test6a" (fn _ => bigt + litt = litt + bigt | |
67 | andalso (bigt + litt) - litt = bigt | |
68 | andalso (bigt - litt) + litt = bigt); | |
69 | ||
70 | val test7a = | |
71 | tst' "test7a" (fn _ => litt <= litt andalso litt >= litt | |
72 | andalso zeroTime < litt andalso litt > zeroTime | |
73 | andalso litt < bigt andalso bigt > litt | |
74 | andalso not (litt > bigt) | |
75 | andalso not (bigt < litt) | |
76 | andalso not(litt < litt) | |
77 | andalso not(litt > litt)); | |
78 | ||
79 | val test8a = | |
80 | tst' "test8a" (fn _ => now() <= now() | |
81 | andalso (now () before fib 27 seq ()) <= now()); | |
82 | ||
83 | val test9a = | |
84 | tst' "test9a" (fn _ => fmt 0 litt = "455") | |
85 | ||
86 | val test9b = | |
87 | tst' "test9b" (fn _ => fmt 1 litt = "454.5" | |
88 | andalso fmt 2 litt = "454.50" | |
89 | andalso fmt 3 litt = "454.502" | |
90 | andalso fmt 4 litt = "454.5017" | |
91 | andalso fmt 5 litt = "454.50170" | |
92 | andalso fmt 6 litt = "454.501701"); | |
93 | ||
94 | fun chk (s, r) = | |
95 | tst' "test10a" (fn _ => | |
96 | case fromString s of | |
97 | SOME res => res = fromMicroseconds r | |
98 | | NONE => false) | |
99 | ||
100 | val test10a = | |
101 | List.map chk | |
102 | [("189", 189000000), | |
103 | ("189.1", 189100000), | |
104 | ("189.125125", 189125125), | |
105 | (".1", 100000), | |
106 | (".125125", 125125), | |
107 | (" \n\t189crap", 189000000), | |
108 | (" \n\t189.1crap", 189100000), | |
109 | (" \n\t189.125125crap", 189125125), | |
110 | (" \n\t.1crap", 100000), | |
111 | (" \n\t.125125crap", 125125)]; | |
112 | ||
113 | val test10b = | |
114 | List.app (fn s => tst0 "test10b" (case fromString s of NONE => "OK" | _ => "WRONG")) | |
115 | ["", "now", "Monday"]; | |
116 | in | |
117 | end |