1 (* Auxiliary functions for test cases
*)
5 fun check b
= if b
then "OK" else "WRONG";
6 fun check
' f
= (if f () then "OK" else "WRONG") handle _
=> "EXN";
8 fun range (from
, to
) p
=
11 (from
> to
) orelse (p from
) andalso (range (from
+1, to
) p
)
14 fun checkrange bounds
= check
o range bounds
;
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
);
20 fun tstrange s bounds
= (tst s
) o range bounds
23 PS
1995-03-20, 1995-05-12, 1996-07-05, 1998-04-07
26 (* MosML test file ported to the ML Kit
; ME
1998-07-17 *)
28 val _
= print
"\nFile date.sml: Testing structure Date...\n"
33 toString(fromTimeLocal(now() + fromReal (3600.0 * real h
))) ^
"\n";
34 fun nowdate () = Date
.fromTimeLocal(now());
35 fun mkdate(y
,mo
,d
,h
,mi
,s
) =
36 date
{year
=y
, month
=mo
, day
=d
, hour
=h
, minute
=mi
, second
=s
,
38 fun cmp(dt1
, dt2
) = compare(mkdate dt1
, mkdate dt2
)
41 toString (valOf (fromString (toString dt
))) = toString dt
44 toString (valOf (fromString s
)) = s
47 date
{year
=2000, month
=Jan
, day
=1, hour
=0, minute
=0, second
=0,
48 offset
= SOME Time
.zeroTime
}
51 date
{year
=2000, month
=Jan
, day
=1, hour
=0, minute
=0, second
=0,
52 offset
= SOME (Time
.fromSeconds
82800) }
55 date
{year
=2000, month
=Jan
, day
=1, hour
=0, minute
=0, second
=0,
56 offset
= SOME (Time
.fromSeconds
3600) }
59 ((*print
"This is (local time) now: "; print (later
0);
60 print
"This is UTC now: ";
61 print (toString (fromTimeUniv(now()))); print
"\n";
62 print
"This is an hour from now: "; print (later
1);
63 print
"This is a day from now: "; print (later
24);
64 print
"This is a week from now: "; print (later
168);
65 print
"This is 120 days from now: "; print (later (24 * 120));
66 print
"This is 160 days from now: "; print (later (24 * 160));
67 print
"This is 200 days from now: "; print (later (24 * 200));
68 print
"This is 240 days from now: "; print (later (24 * 240));
70 print
"This is the epoch (UTC): ";
71 print (toString(fromTimeUniv zeroTime
) ^
"\n");
72 print
"The UTC millenium (UTC time): ";
73 print (toString y2k ^
"\n");
74 print
"The UTC millenium minus 5 sec: ";
75 print (toString (date
{year
=2000, month
=Jan
, day
=1, hour
=0,
76 minute
=0, second
= ~
5, offset
= SOME Time
.zeroTime
})
78 (* print
"The UTC millenium (local time): ";
79 print (toString (fromTimeLocal (toTime y2k
)) ^
"\n");
80 print
"The local millenium (UTC time): ";
81 print (toString (fromTimeUniv (toTime (mkdate(2000, Jan
, 1, 0, 0, 0))))
83 print
"The UTC+01 millenium (UTC): ";
84 print (toString (fromTimeUniv (toTime y2kE1
)) ^
"\n");
85 print
"The UTC-01 millenium (UTC): ";
86 print (toString (fromTimeUniv (toTime y2kW1
)) ^
"\n");
87 print
"This is today's number: ";
88 print (fmt
"%j" (nowdate()) ^
" (internally: ");
89 print (Int.toString (yearDay (nowdate())) ^
")\n");
90 print
"This is today's weekday: ";
91 print (fmt
"%A" (nowdate()) ^
"\n");
92 print
"This is the name of this month: ";
93 print (fmt
"%B" (nowdate()) ^
"\n");
94 print
"Today's ISO date: ";
95 print (fmt
"%Y-%m-%d" (nowdate ()) ^
"\n")*))
100 cmp((1993,Jul
,25,16,12,18), (1994,Jun
,25,16,12,18)) = LESS
101 andalso cmp((1995,May
,25,16,12,18), (1994,Jun
,25,16,12,18)) = GREATER
102 andalso cmp((1994,May
,26,16,12,18), (1994,Jun
,25,16,12,18)) = LESS
103 andalso cmp((1994,Jul
,24,16,12,18), (1994,Jun
,25,16,12,18)) = GREATER
104 andalso cmp((1994,Jun
,24,17,12,18), (1994,Jun
,25,16,12,18)) = LESS
105 andalso cmp((1994,Jun
,26,15,12,18), (1994,Jun
,25,16,12,18)) = GREATER
106 andalso cmp((1994,Jun
,25,15,13,18), (1994,Jun
,25,16,12,18)) = LESS
107 andalso cmp((1994,Jun
,25,17,11,18), (1994,Jun
,25,16,12,18)) = GREATER
108 andalso cmp((1994,Jun
,25,16,11,19), (1994,Jun
,25,16,12,18)) = LESS
109 andalso cmp((1994,Jun
,25,16,13,17), (1994,Jun
,25,16,12,18)) = GREATER
110 andalso cmp((1994,Jun
,25,16,12,17), (1994,Jun
,25,16,12,18)) = LESS
111 andalso cmp((1994,Jun
,25,16,12,19), (1994,Jun
,25,16,12,18)) = GREATER
112 andalso cmp((1994,Jun
,25,16,12,18), (1994,Jun
,25,16,12,18)) = EQUAL
);
115 tst
' "test2" (fn _
=>
116 fmt
"%A" (mkdate(1995,May
,22,4,0,1)) = "Monday");
119 tst
' "test3" (fn _
=>
121 [mkdate(1995,Aug
,22,4,0,1),
122 mkdate(1996,Apr
, 5, 0, 7, 21),
123 mkdate(1996,Mar
, 5, 6, 13, 58)]);
126 tst
' "test4" (fn _
=>
128 ["Fri Jul 05 14:25:16 1996",
129 "Mon Feb 05 04:25:16 1996",
130 "Sat Jan 06 04:25:16 1996"])
133 tst
' "test5" (fn _
=>
134 weekDay(mkdate(1962, Jun
, 25, 1, 2, 3)) = Mon
135 andalso weekDay(mkdate(1998, Mar
, 6, 1, 2, 3)) = Fri
136 andalso weekDay(mkdate(1998, Apr
, 6, 1, 2, 3)) = Mon
137 andalso weekDay(mkdate(1900, Feb
, 28, 1, 2, 3)) = Wed
138 andalso weekDay(mkdate(1900, Mar
, 1, 1, 2, 3)) = Thu
139 andalso weekDay(mkdate(1850, Feb
, 28, 1, 2, 3)) = Thu
140 andalso weekDay(mkdate(1850, Mar
, 1, 1, 2, 3)) = Fri
141 andalso weekDay(mkdate(1860, Feb
, 28, 1, 2, 3)) = Tue
142 andalso weekDay(mkdate(1860, Feb
, 29, 1, 2, 3)) = Wed
143 andalso weekDay(mkdate(1860, Mar
, 1, 1, 2, 3)) = Thu
144 andalso weekDay(mkdate(2000, Feb
, 28, 1, 2, 3)) = Mon
145 andalso weekDay(mkdate(2000, Feb
, 29, 1, 2, 3)) = Tue
146 andalso weekDay(mkdate(2000, Mar
, 1, 1, 2, 3)) = Wed
)
149 tst
' "test6" (fn _
=>
150 yearDay(mkdate(1962, Jan
, 1, 1, 2, 3)) = 0
151 andalso yearDay(mkdate(1998, Mar
, 6, 1, 2, 3)) = 64
152 andalso yearDay(mkdate(1900, Feb
, 28, 1, 2, 3)) = 58
153 andalso yearDay(mkdate(1900, Mar
, 1, 1, 2, 3)) = 59
154 andalso yearDay(mkdate(1900, Dec
, 31, 1, 2, 3)) = 364
155 andalso yearDay(mkdate(1850, Feb
, 28, 1, 2, 3)) = 58
156 andalso yearDay(mkdate(1850, Mar
, 1, 1, 2, 3)) = 59
157 andalso yearDay(mkdate(1850, Dec
, 31, 1, 2, 3)) = 364
158 andalso yearDay(mkdate(1860, Feb
, 28, 1, 2, 3)) = 58
159 andalso yearDay(mkdate(1860, Feb
, 29, 1, 2, 3)) = 59
160 andalso yearDay(mkdate(1860, Mar
, 1, 1, 2, 3)) = 60
161 andalso yearDay(mkdate(1860, Dec
, 31, 1, 2, 3)) = 365
162 andalso yearDay(mkdate(2000, Feb
, 28, 1, 2, 3)) = 58
163 andalso yearDay(mkdate(2000, Feb
, 29, 1, 2, 3)) = 59
164 andalso yearDay(mkdate(2000, Mar
, 1, 1, 2, 3)) = 60
165 andalso yearDay(mkdate(2000, Dec
, 31, 1, 2, 3)) = 365
166 andalso yearDay(mkdate(1959, Feb
, 28, 1, 2, 3)) = 58
167 andalso yearDay(mkdate(1959, Mar
, 1, 1, 2, 3)) = 59
168 andalso yearDay(mkdate(1959, Dec
, 31, 1, 2, 3)) = 364
169 andalso yearDay(mkdate(1960, Feb
, 28, 1, 2, 3)) = 58
170 andalso yearDay(mkdate(1960, Feb
, 29, 1, 2, 3)) = 59
171 andalso yearDay(mkdate(1960, Mar
, 1, 1, 2, 3)) = 60
172 andalso yearDay(mkdate(1960, Dec
, 31, 1, 2, 3)) = 365)
175 let val dt
= mkdate(1998, Apr
, 6, h
, 0, 0)
176 in (month dt
, day dt
, hour dt
) end
179 tst
' "test7" (fn _
=>
181 andalso addh
23 = (Apr
, 6, 23)
182 andalso addh
24 = (Apr
, 7, 0)
183 andalso addh
36 = (Apr
, 7, 12)
184 andalso addh
600 = (May
, 1, 0)
185 andalso addh
610 = (May
, 1, 10)
186 andalso addh
625 = (May
, 2, 1))
189 tst
' "test8" (fn _
=>
190 hour (mkdate(1998, Mar
, 28, 12, 0, 0)) = 12
191 andalso hour (mkdate(1998, Mar
, 28, 36, 0, 0)) = 12)