Import Debian changes 20180207-1
[hcoop/debian/mlton.git] / regression / time.sml
CommitLineData
7f918cf1
CE
1(* Auxiliary functions for test cases *)
2
3infix 1 seq
4fun e1 seq e2 = e2;
5fun check b = if b then "OK" else "WRONG";
6fun check' f = (if f () then "OK" else "WRONG") handle _ => "EXN";
7
8fun 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
14fun checkrange bounds = check o range bounds;
15
16fun tst0 s s' = print (s ^ " \t" ^ s' ^ "\n");
17fun tst s b = tst0 s (check b);
18fun tst' s f = tst0 s (check' f);
19
20fun tstrange s bounds = (tst s) o range bounds
21
22(* test/time.sml
23 PS 1995-03-23
24*)
25
26val _ = print "\nFile time.sml: Testing structure Time...\n"
27
28local
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
37val test2a =
38 tst' "test2a" (fn _ => toSeconds zeroTime = 0
39 andalso zeroTime = fromSeconds 0
40 andalso zeroTime = fromMilliseconds 0
41 andalso zeroTime = fromMicroseconds 0);
42val test2b =
43 tst' "test2b" (fn _ => toSeconds bigt = 987654321
44 andalso toSeconds litt = 454
45 andalso toMilliseconds litt = 454501
46 andalso toMicroseconds litt = 454501701);
47val test2c = tst0 "test2c" ((fromSeconds ~1 seq "OK")
48 handle _ => "WRONG")
49val test2d = tst0 "test2d" ((fromMilliseconds ~1 seq "OK")
50 handle _ => "WRONG")
51val test2e = tst0 "test2e" ((fromMicroseconds ~1 seq "OK")
52 handle _ => "WRONG")
53
54val test3a =
55 tst' "test3a" (fn _ => fromReal 0.0 = zeroTime
56 andalso fromReal 10.25 = fromSeconds 10 + fromMilliseconds 250);
57val test3b = tst0 "test3b" ((fromReal ~1.0 seq "OK")
58 handle _ => "WRONG")
59val test3c = tst0 "test3c" ((fromReal 1E300 seq "OK")
60 handle Time => "OK" | _ => "WRONG")
61
62val test4a =
63 tst' "test4a" (fn _ => Real.==(toReal (fromReal 100.25), 100.25));
64
65val test6a =
66 tst' "test6a" (fn _ => bigt + litt = litt + bigt
67 andalso (bigt + litt) - litt = bigt
68 andalso (bigt - litt) + litt = bigt);
69
70val 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
79val test8a =
80 tst' "test8a" (fn _ => now() <= now()
81 andalso (now () before fib 27 seq ()) <= now());
82
83val test9a =
84 tst' "test9a" (fn _ => fmt 0 litt = "455")
85
86val 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
94fun chk (s, r) =
95 tst' "test10a" (fn _ =>
96 case fromString s of
97 SOME res => res = fromMicroseconds r
98 | NONE => false)
99
100val 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
113val test10b =
114 List.app (fn s => tst0 "test10b" (case fromString s of NONE => "OK" | _ => "WRONG"))
115 ["", "now", "Monday"];
116in
117end