Import Debian changes 20180207-1
[hcoop/debian/mlton.git] / regression / conversion.sml
1 val w8t16 = Word16.fromLarge o Word8.toLarge
2 val w16t32 = Word32.fromLarge o Word16.toLarge
3 val w32t64 = Word64.fromLarge o Word32.toLarge
4
5 (* All of these should become no-ops *)
6 val id8_1 = Word8.fromLarge o Word8.toLarge
7 val id8_2 = Word8.fromLarge o Word8.toLargeX
8 val id8_3 = Word8.fromLarge o Word16.toLarge o Word16.fromLarge o Word8.toLarge
9 val id8_4 = Word8.fromLarge o Word16.toLargeX o Word16.fromLarge o Word8.toLargeX
10 val id8_5 = Word8.fromLarge o Word16.toLarge o Word16.fromLarge o Word8.toLargeX
11
12 val id16_1 = Word16.fromLarge o Word16.toLarge
13 val id16_2 = Word16.fromLarge o Word16.toLargeX
14 val id16_3 = Word16.fromLarge o Word32.toLarge o Word32.fromLarge o Word16.toLarge
15 val id16_4 = Word16.fromLarge o Word32.toLarge o Word32.fromLarge o Word16.toLargeX
16 val id16_5 = Word16.fromLarge o Word32.toLargeX o Word32.fromLarge o Word16.toLarge
17 val id16_6 = Word16.fromLarge o Word32.toLargeX o Word32.fromLarge o Word16.toLargeX
18 val xx16_1 = Word16.fromLarge o Word8.toLarge o Word8.fromLarge o Word16.toLarge
19 val xx16_2 = Word16.fromLarge o Word8.toLarge o Word8.fromLarge o Word16.toLargeX
20 val xx16_3 = Word16.fromLarge o Word8.toLargeX o Word8.fromLarge o Word16.toLarge
21 val xx16_4 = Word16.fromLarge o Word8.toLargeX o Word8.fromLarge o Word16.toLargeX
22
23 val id32_1 = Word32.fromLarge o Word32.toLarge
24 val id32_2 = Word32.fromLarge o Word32.toLargeX
25 val id32_3 = Word32.fromLarge o Word64.toLarge o Word64.fromLarge o Word32.toLarge
26 val id32_4 = Word32.fromLarge o Word64.toLarge o Word64.fromLarge o Word32.toLargeX
27 val id32_5 = Word32.fromLarge o Word64.toLargeX o Word64.fromLarge o Word32.toLarge
28 val id32_6 = Word32.fromLarge o Word64.toLargeX o Word64.fromLarge o Word32.toLargeX
29 val xx32_1 = Word32.fromLarge o Word8.toLarge o Word8.fromLarge o Word32.toLarge
30 val xx32_2 = Word32.fromLarge o Word8.toLarge o Word8.fromLarge o Word32.toLargeX
31 val xx32_3 = Word32.fromLarge o Word16.toLargeX o Word16.fromLarge o Word32.toLarge
32 val xx32_4 = Word32.fromLarge o Word16.toLargeX o Word16.fromLarge o Word32.toLargeX
33
34 val id64_1 = Word64.fromLarge o Word64.toLarge
35 val id64_2 = Word64.fromLarge o Word64.toLargeX
36 val id64_3 = Word64.fromLarge o Word64.toLarge o Word64.fromLarge o Word64.toLarge
37 val id64_4 = Word64.fromLarge o Word64.toLarge o Word64.fromLarge o Word64.toLargeX
38 val id64_5 = Word64.fromLarge o Word64.toLargeX o Word64.fromLarge o Word64.toLarge
39 val id64_6 = Word64.fromLarge o Word64.toLargeX o Word64.fromLarge o Word64.toLargeX
40 val xx64_1 = Word64.fromLarge o Word32.toLarge o Word32.fromLarge o Word64.toLarge
41 val xx64_2 = Word64.fromLarge o Word32.toLarge o Word32.fromLarge o Word64.toLargeX
42 val xx64_3 = Word64.fromLarge o Word16.toLargeX o Word16.fromLarge o Word64.toLarge
43 val xx64_4 = Word64.fromLarge o Word16.toLargeX o Word16.fromLarge o Word64.toLargeX
44
45 val c8t16_1 = Word16.fromLarge o Word8.toLarge
46 val c8t16_2 = Word16.fromLarge o Word8.toLargeX
47 val c8t16_3 = Word16.fromLarge o Word8.toLarge o id8_3
48 val c8t16_4 = Word16.fromLarge o Word8.toLarge o id8_4
49 val c8t16_5 = Word16.fromLarge o Word8.toLarge o id8_5
50
51 val c8t32_1 = Word32.fromLarge o Word16.toLarge o Word16.fromLarge o Word8.toLarge
52 val c8t32_2 = Word32.fromLarge o Word16.toLarge o Word16.fromLarge o Word8.toLargeX
53 val c8t32_3 = Word32.fromLarge o Word16.toLargeX o Word16.fromLarge o Word8.toLarge
54 val c8t32_4 = Word32.fromLarge o Word16.toLargeX o Word16.fromLarge o Word8.toLargeX
55
56 val c8t64_1 = Word64.fromLarge o Word16.toLarge o Word16.fromLarge o Word8.toLarge
57 val c8t64_2 = Word64.fromLarge o Word16.toLarge o Word16.fromLarge o Word8.toLargeX
58 val c8t64_3 = Word64.fromLarge o Word16.toLargeX o Word16.fromLarge o Word8.toLarge
59 val c8t64_4 = Word64.fromLarge o Word16.toLargeX o Word16.fromLarge o Word8.toLargeX
60 val c8t64_5 = Word64.fromLarge o Word8.toLarge o Word8.fromLarge o Word16.toLarge o Word16.fromLarge o Word8.toLarge
61 val c8t64_6 = Word64.fromLarge o Word8.toLargeX o Word8.fromLarge o Word16.toLarge o Word16.fromLarge o Word8.toLargeX
62
63 val c16t8_1 = Word8.fromLarge o Word16.toLarge
64 val c16t8_2 = Word8.fromLarge o Word16.toLargeX
65 val c16t8_3 = Word8.fromLarge o Word32.toLarge o Word32.fromLarge o Word16.toLargeX
66 val c16t8_4 = id8_3 o Word8.fromLarge o Word16.toLargeX
67 val c16t8_5 = id8_4 o Word8.fromLarge o Word16.toLarge
68 val c16t8_6 = id8_5 o Word8.fromLarge o Word16.toLargeX
69
70 (* These tests rely on Int = Int32 to be useful *)
71 val w16t8z = Word8.fromInt o Word16.toInt
72 val w16t8s = Word8.fromInt o Word16.toIntX
73
74 val c16t32_1 = Word32.fromLarge o Word8.toLargeX o Word8.fromLarge o Word16.toLarge
75 val c16t32_2 = Word32.fromLarge o Word8.toLarge o Word8.fromLarge o Word16.toLargeX
76 val c16t32_3 = Word32.fromLarge o Word16.toLarge
77 val c16t32_4 = Word32.fromLarge o Word16.toLargeX
78
79 val c16t64_1 = Word64.fromLarge o Word32.toLarge o Word32.fromLarge o Word16.toLarge
80 val c16t64_2 = Word64.fromLarge o Word32.toLarge o Word32.fromLarge o Word16.toLargeX
81 val c16t64_3 = Word64.fromLarge o Word32.toLargeX o Word32.fromLarge o Word16.toLarge
82 val c16t64_4 = Word64.fromLarge o Word32.toLargeX o Word32.fromLarge o Word16.toLargeX
83 val c16t64_5 = Word64.fromLarge o Word8.toLarge o Word8.fromLarge o Word16.toLarge
84 val c16t64_6 = Word64.fromLarge o Word8.toLarge o Word8.fromLarge o Word16.toLargeX
85 val c16t64_7 = Word64.fromLarge o Word8.toLargeX o Word8.fromLarge o Word16.toLarge
86 val c16t64_8 = Word64.fromLarge o Word8.toLargeX o Word8.fromLarge o Word16.toLargeX
87
88 val c32t8_1 = id8_4 o Word8.fromLarge o Word32.toLarge o id32_1
89 val c32t8_2 = id8_3 o Word8.fromLarge o Word32.toLargeX o id32_2
90 val c32t8_3 = id8_2 o Word8.fromLarge o Word32.toLarge o id32_3
91 val c32t8_4 = id8_1 o Word8.fromLarge o Word32.toLargeX o id32_4
92
93 val c32t16_1 = Word16.fromLarge o Word8.toLarge o Word8.fromLarge o Word32.toLarge
94 val c32t16_2 = Word16.fromLarge o Word8.toLarge o Word8.fromLarge o Word32.toLargeX
95 val c32t16_3 = Word16.fromLarge o Word8.toLargeX o Word8.fromLarge o Word32.toLarge
96 val c32t16_4 = Word16.fromLarge o Word8.toLargeX o Word8.fromLarge o Word32.toLargeX
97 val c32t16_5 = Word16.fromLarge o Word64.toLarge o Word64.fromLarge o Word32.toLarge
98 val c32t16_6 = Word16.fromLarge o Word64.toLargeX o Word64.fromLarge o Word32.toLarge
99 val c32t16_7 = Word16.fromLarge o Word64.toLarge o Word64.fromLarge o Word32.toLargeX
100 val c32t16_8 = Word16.fromLarge o Word64.toLargeX o Word64.fromLarge o Word32.toLargeX
101
102 val c64t8_1 = id8_4 o Word8.fromLarge o Word64.toLarge o id64_1
103 val c64t8_2 = id8_3 o Word8.fromLarge o Word64.toLargeX o id64_2
104 val c64t8_3 = id8_2 o Word8.fromLarge o Word64.toLarge o id64_3
105 val c64t8_4 = id8_1 o Word8.fromLarge o Word64.toLargeX o id64_4
106
107 val c64t16_1 = Word16.fromLarge o Word8.toLarge o Word8.fromLarge o Word64.toLarge
108 val c64t16_2 = Word16.fromLarge o Word8.toLarge o Word8.fromLarge o Word64.toLargeX
109 val c64t16_3 = Word16.fromLarge o Word8.toLargeX o Word8.fromLarge o Word64.toLarge
110 val c64t16_4 = Word16.fromLarge o Word8.toLargeX o Word8.fromLarge o Word64.toLargeX
111 val c64t16_5 = Word16.fromLarge o Word32.toLarge o Word32.fromLarge o Word64.toLarge
112 val c64t16_6 = Word16.fromLarge o Word32.toLargeX o Word32.fromLarge o Word64.toLarge
113 val c64t16_7 = Word16.fromLarge o Word32.toLarge o Word32.fromLarge o Word64.toLargeX
114 val c64t16_8 = Word16.fromLarge o Word32.toLargeX o Word32.fromLarge o Word64.toLargeX
115
116 val f8t8 = [ id8_1, id8_2, id8_3, id8_4, id8_5 ]
117 val f8t16 = [ c8t16_1, c8t16_2, c8t16_3, c8t16_4, c8t16_5 ]
118 val f8t32 = [ c8t32_1, c8t32_2, c8t32_3, c8t32_4 ]
119 val f8t64 = [ c8t64_1, c8t64_2, c8t64_3, c8t64_4, c8t64_5, c8t64_6 ]
120
121 val f16t8 = [ c16t8_1, c16t8_2, c16t8_3, c16t8_5, c16t8_6, w16t8z, w16t8s ]
122 val f16t16 = [ id16_1, id16_2, id16_3, id16_4, id16_5, id16_6, xx16_1, xx16_2, xx16_3, xx16_4 ]
123 val f16t32 = [ c16t32_1, c16t32_2, c16t32_3, c16t32_4 ]
124 val f16t64 = [ c16t64_1, c16t64_2, c16t64_3, c16t64_4, c16t64_6, c16t64_7, c16t64_8 ]
125
126 val f32t8 = [ c32t8_1, c32t8_2, c32t8_3, c32t8_4 ]
127 val f32t16 = [ c32t16_1, c32t16_2, c32t16_3, c32t16_4, c32t16_5, c32t16_6, c32t16_7, c32t16_8 ]
128 val f32t32 = [ id32_1, id32_2, id32_3, id32_4, id32_5, id32_6, xx32_1, xx32_2, xx32_3, xx32_4 ]
129 val f32t64 = [ ]
130
131 val f64t8 = [ c64t8_1, c64t8_2, c64t8_3, c64t8_4 ]
132 val f64t16 = [ c64t16_1, c64t16_2, c64t16_3, c64t16_4, c64t16_5, c64t16_6, c64t16_7, c64t16_8 ]
133 val f64t32 = [ ]
134 val f64t64 = [ id64_1, id64_2, id64_3, id64_4, id64_5, id64_6, xx64_1, xx64_2, xx64_3, xx64_4 ]
135
136 val x8 = [ 0w0, 0w1, 0w2, 0w3, 0wx7f, 0wx7e, 0wxfe, 0wxff ]
137 val x16 = [ 0wx7fff, 0wxfffe, 0wxffff ] @ List.map w8t16 x8
138 val x32 = [ 0wx7fffffff, 0wxfffffffe, 0wxffffffff ] @ List.map w16t32 x16
139 val x64 = [ 0wx7fffffffffffffff, 0wxfffffffffffffffe, 0wxffffffffffffffff ] @ List.map w32t64 x32
140
141 fun doit (out, xl) f =
142 let
143 val () = List.app (print o out o f) xl
144 in
145 print "\n"
146 end
147
148 val () = List.app (doit (Word8.toString, x8)) f8t8
149 val () = List.app (doit (Word8.toString, x16)) f16t8
150 val () = List.app (doit (Word8.toString, x32)) f32t8
151 val () = List.app (doit (Word8.toString, x64)) f64t8
152
153 val () = List.app (doit (Word16.toString, x8)) f8t16
154 val () = List.app (doit (Word16.toString, x16)) f16t16
155 val () = List.app (doit (Word16.toString, x32)) f32t16
156 val () = List.app (doit (Word16.toString, x64)) f64t16
157
158 val () = List.app (doit (Word32.toString, x8)) f8t32
159 val () = List.app (doit (Word32.toString, x16)) f16t32
160 val () = List.app (doit (Word32.toString, x32)) f32t32
161 val () = List.app (doit (Word32.toString, x64)) f64t32
162
163 val () = List.app (doit (Word64.toString, x8)) f8t64
164 val () = List.app (doit (Word64.toString, x16)) f16t64
165 val () = List.app (doit (Word64.toString, x32)) f32t64
166 val () = List.app (doit (Word64.toString, x64)) f64t64