Import Debian changes 20180207-1
[hcoop/debian/mlton.git] / regression / word8array.sml
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/word8array.sml -- some test cases for Word8Array
23 PS 1994-12-21, 1995-05-11 *)
24
25 (*KILL 05/11/1997 11:05. tho.:
26 use "auxil.sml";
27 *)
28
29 val _ = print "Testing Word8Array...\n";
30
31 local
32 open Word8Array
33 infix 9 sub;
34 val array0 = fromList [];
35 val copy = fn {src, si, len, dst, di} =>
36 Word8ArraySlice.copy {src = Word8ArraySlice.slice (src, si, len),
37 dst = dst, di = di}
38 val extract = fn (a, i, sz) =>
39 Word8ArraySlice.vector (Word8ArraySlice.slice (a, i, sz))
40 in
41
42 val i2w = Word8.fromInt;
43
44 val w127 = i2w 127;
45
46 val a = fromList (map i2w [0,1,2,3,4,5,6]);
47 val b = fromList (map i2w [44,55,66]);
48 val c = fromList (map i2w [0,1,2,3,4,5,6]);
49
50 val test1:unit = tst' "test1" (fn () => a<>c);
51 val test2:unit = tst' "test2"
52 (fn () =>
53 array(0, w127) <> array0
54 andalso array(0, w127) <> tabulate(0, fn _ => w127)
55 andalso tabulate(0, fn _ => w127) <> fromList []
56 andalso array(0, w127) <> array(0, w127)
57 andalso tabulate(0, fn _ => w127) <> tabulate(0, fn _ => w127)
58 andalso fromList [] <> fromList [])
59
60 val d = tabulate(100, fn i => i2w (i mod 7))
61
62 val test3:unit = tst' "test3" (fn () => d sub 27 = i2w 6)
63
64 val test4a:unit = tst0 "test4a" ((tabulate(maxLen+1, i2w) seq "WRONG")
65 handle Overflow => "OK" | Size => "OK" | _ => "WRONG")
66
67 val test4b:unit = tst0 "test4b" ((tabulate(~1, i2w) seq "WRONG")
68 handle Size => "OK" | _ => "WRONG")
69
70 val test4c:unit =
71 tst' "test4c" (fn () => length (tabulate(0, fn i => i2w (i div 0))) = 0);
72
73 val test5a:unit = tst' "test5a" (fn () => length (fromList []) = 0 andalso length a = 7);
74 val test5b:unit = tst' "test5b" (fn () => length array0 = 0);
75
76 val test6a:unit = tst0 "test6a" ((c sub ~1 seq "WRONG") handle Subscript => "OK" | _ => "WRONG")
77 val test6b:unit = tst0 "test6b" ((c sub 7 seq "WRONG") handle Subscript => "OK" | _ => "WRONG")
78 val test6c:unit = tst' "test6c" (fn () => c sub 0 = i2w 0);
79
80 val e = array(203, i2w 0);
81 val _ = (copy{src=d, si=0, dst=e, di=0, len=NONE};
82 copy{src=b, si=0, dst=e, di=length d, len=NONE};
83 copy{src=d, si=0, dst=e, di=length d + length b, len=NONE});
84
85 fun a2v a = extract(a, 0, NONE);
86 val ev = Word8Vector.concat [a2v d, a2v b, a2v d];
87
88 val test7:unit = tst' "test7" (fn () => length e = 203);
89
90 val test8a:unit = tst0 "test8a" ((update(e, ~1, w127); "WRONG")
91 handle Subscript => "OK" | _ => "WRONG")
92 val test8b:unit = tst0 "test8b" ((update(e, length e, w127); "WRONG")
93 handle Subscript => "OK" | _ => "WRONG")
94
95 val f = extract (e, 100, SOME 3);
96
97 fun equal (v, v') =
98 let
99 val n = Word8Vector.length v
100 val n' = Word8Vector.length v'
101 fun loop i =
102 i = n
103 orelse (Word8Vector.sub (v, i) = Word8Vector.sub (v', i)
104 andalso loop (i + 1))
105 in
106 n = n' andalso loop 0
107 end
108
109 val test9:unit = tst' "test9" (fn () => equal (f, a2v b));
110
111 val test9a:unit = tst' "test9a" (fn () => equal (ev, extract(e, 0, NONE))
112 andalso equal (ev, extract(e, 0, SOME (length e))));
113 val test9b:unit =
114 tst' "test9b" (fn () => equal (Word8Vector.fromList [],
115 extract(e, 100, SOME 0)));
116 val test9c:unit = tst0 "test9c" ((extract(e, ~1, SOME (length e)) seq "WRONG")
117 handle Subscript => "OK" | _ => "WRONG")
118 val test9d:unit = tst0 "test9d" ((extract(e, length e+1, SOME 0) seq "WRONG")
119 handle Subscript => "OK" | _ => "WRONG")
120 val test9e:unit = tst0 "test9e" ((extract(e, 0, SOME (length e+1)) seq "WRONG")
121 handle Subscript => "OK" | _ => "WRONG")
122 val test9f:unit = tst0 "test9f" ((extract(e, 20, SOME ~1) seq "WRONG")
123 handle Subscript => "OK" | _ => "WRONG")
124 val test9g:unit = tst0 "test9g" ((extract(e, ~1, NONE) seq "WRONG")
125 handle Subscript => "OK" | _ => "WRONG")
126 val test9h:unit = tst0 "test9h" ((extract(e, length e+1, NONE) seq "WRONG")
127 handle Subscript => "OK" | _ => "WRONG")
128 val test9i:unit =
129 tst' "test9i" (fn () => equal (a2v (fromList []),
130 extract(e, length e, SOME 0))
131 andalso equal (a2v (fromList []),
132 extract(e, length e, NONE)));
133
134 val _ = copy{src=e, si=0, dst=e, di=0, len=NONE};
135 val g = array(203, w127);
136 val _ = copy{src=e, si=0, dst=g, di=0, len=NONE};
137
138 val test10a:unit = tst' "test10a" (fn () => equal (ev, extract(e, 0, NONE))
139 andalso equal (ev, extract(e, 0, SOME (length e))));
140 val test10b:unit = tst' "test10b" (fn () => equal (ev, extract(g, 0, NONE))
141 andalso equal (ev, extract(g, 0, SOME (length g))));
142
143 val _ = copy{src=g, si=203, dst=g, di=0, len=SOME 0};
144 val test10c:unit = tst' "test10c" (fn () => equal (ev, extract(g, 0, NONE)));
145
146 val _ = copy{src=g, si=0, dst=g, di=203, len=SOME 0};
147 val test10d:unit = tst' "test10d" (fn () => equal (ev, extract(g, 0, NONE)));
148
149 val _ = copy{src=g, si=0, dst=g, di=1, len=SOME (length g-1)};
150 val test10e:unit = tst' "test10e" (fn () => equal (a2v b, extract(g, 101, SOME 3)));
151
152 val _ = copy{src=g, si=1, dst=g, di=0, len=SOME(length g-1)};
153 val test10f:unit = tst' "test10f" (fn () => equal (a2v b, extract(g, 100, SOME 3)));
154
155 val _ = copy{src=g, si=202, dst=g, di=202, len=SOME 1};
156 val test10g:unit = tst' "test10g" (fn () => g sub 202 = i2w ((202-1-103) mod 7));
157 val test10h:unit = tst' "test10h" (fn () =>
158 (copy{src=array0, si=0, dst=array0, di=0, len=NONE};
159 array0 <> array(0, w127)));
160 val test10i:unit = tst' "test10i" (fn () =>
161 (copy{src=array0, si=0, dst=array0, di=0, len=SOME 0};
162 array0 <> array(0, w127)));
163
164 val test11a:unit = tst0 "test11a" ((copy{src=g, si= ~1, dst=g, di=0, len=NONE}; "WRONG")
165 handle Subscript => "OK" | _ => "WRONG")
166 val test11b:unit = tst0 "test11b" ((copy{src=g, si=0, dst=g, di= ~1, len=NONE}; "WRONG")
167 handle Subscript => "OK" | _ => "WRONG")
168 val test11c:unit = tst0 "test11c" ((copy{src=g, si=1, dst=g, di=0, len=NONE}; "OK")
169 handle _ => "WRONG")
170 val test11d:unit = tst0 "test11d" ((copy{src=g, si=0, dst=g, di=1, len=NONE}; "WRONG")
171 handle Subscript => "OK" | _ => "WRONG")
172 val test11e:unit = tst0 "test11e" ((copy{src=g, si=203, dst=g, di=0, len=NONE}; "OK")
173 handle _ => "WRONG")
174
175 val test11f:unit = tst0 "test11f" ((copy{src=g, si= ~1, dst=g, di=0, len=SOME (length g)}; "WRONG")
176 handle Subscript => "OK" | _ => "WRONG")
177 val test11g:unit = tst0 "test11g" ((copy{src=g, si=0, dst=g, di= ~1, len=SOME (length g)}; "WRONG")
178 handle Subscript => "OK" | _ => "WRONG")
179 val test11h:unit = tst0 "test11h" ((copy{src=g, si=1, dst=g, di=0, len=SOME (length g)}; "WRONG")
180 handle Subscript => "OK" | _ => "WRONG")
181 val test11i:unit = tst0 "test11i" ((copy{src=g, si=0, dst=g, di=1, len=SOME (length g)}; "WRONG")
182 handle Subscript => "OK" | _ => "WRONG")
183 val test11j:unit = tst0 "test11j" ((copy{src=g, si=0, dst=g, di=0, len=SOME (length g+1)}; "WRONG")
184 handle Subscript => "OK" | _ => "WRONG")
185 val test11k:unit = tst0 "test11k" ((copy{src=g, si=203, dst=g, di=0, len=SOME 1}; "WRONG")
186 handle Subscript => "OK" | _ => "WRONG")
187
188 end;