|
1 load(libdir + 'array-compare.js'); |
|
2 |
|
3 function compareIAndSet(v) { |
|
4 var res = 0; |
|
5 var c; |
|
6 var i = 0; |
|
7 c = (v > 1); |
|
8 res |= (c << i); |
|
9 i++; |
|
10 c = (v >= 2); |
|
11 res |= (c << i); |
|
12 i++; |
|
13 c = (v < 3); |
|
14 res |= (c << i); |
|
15 i++; |
|
16 c = (v <= 4); |
|
17 res |= (c << i); |
|
18 i++; |
|
19 c = (v == 5); |
|
20 res |= (c << i); |
|
21 i++; |
|
22 c = (v != 6); |
|
23 res |= (c << i); |
|
24 i++; |
|
25 c = (v === 7); |
|
26 res |= (c << i); |
|
27 i++; |
|
28 c = (v !== 8); |
|
29 res |= (c << i); |
|
30 i++; |
|
31 return res; |
|
32 } |
|
33 |
|
34 function compareIAndBranch(v) { |
|
35 var res = 0; |
|
36 var c = 1; |
|
37 var i = 0; |
|
38 if (v > 1) |
|
39 res |= (c << i); |
|
40 i++; |
|
41 if (v >= 2) |
|
42 res |= (c << i); |
|
43 i++; |
|
44 if (v < 3) |
|
45 res |= (c << i); |
|
46 i++; |
|
47 if (v <= 4) |
|
48 res |= (c << i); |
|
49 i++; |
|
50 if (v == 5) |
|
51 res |= (c << i); |
|
52 i++; |
|
53 if (v != 6) |
|
54 res |= (c << i); |
|
55 i++; |
|
56 if (v === 7) |
|
57 res |= (c << i); |
|
58 i++; |
|
59 if (v !== 8) |
|
60 res |= (c << i); |
|
61 i++; |
|
62 if (v) |
|
63 res |= (c << i); |
|
64 i++; |
|
65 return res; |
|
66 } |
|
67 |
|
68 function compareDAndSet(v) { |
|
69 var res = 0; |
|
70 var c; |
|
71 var i = 0; |
|
72 c = (v > 1.5); |
|
73 res |= (c << i); |
|
74 i++; |
|
75 c = (v >= 2.5); |
|
76 res |= (c << i); |
|
77 i++; |
|
78 c = (v < 3.5); |
|
79 res |= (c << i); |
|
80 i++; |
|
81 c = (v <= 4.5); |
|
82 res |= (c << i); |
|
83 i++; |
|
84 c = (v == 5.5); |
|
85 res |= (c << i); |
|
86 i++; |
|
87 c = (v != 6.5); |
|
88 res |= (c << i); |
|
89 i++; |
|
90 c = (v === 7.5); |
|
91 res |= (c << i); |
|
92 i++; |
|
93 c = (v !== 8.5); |
|
94 res |= (c << i); |
|
95 i++; |
|
96 c = (v !== 0.0); |
|
97 res |= (c << i); |
|
98 i++; |
|
99 return res; |
|
100 } |
|
101 |
|
102 function compareDAndBranch(v) { |
|
103 var res = 0; |
|
104 var c = 1; |
|
105 var i = 0; |
|
106 if (v > 1.5) |
|
107 res |= (c << i); |
|
108 i++; |
|
109 if (v >= 2.5) |
|
110 res |= (c << i); |
|
111 i++; |
|
112 if (v < 3.5) |
|
113 res |= (c << i); |
|
114 i++; |
|
115 if (v <= 4.5) |
|
116 res |= (c << i); |
|
117 i++; |
|
118 if (v == 5.5) |
|
119 res |= (c << i); |
|
120 i++; |
|
121 if (v != 6.5) |
|
122 res |= (c << i); |
|
123 i++; |
|
124 if (v === 7.5) |
|
125 res |= (c << i); |
|
126 i++; |
|
127 if (v !== 8.5) |
|
128 res |= (c << i); |
|
129 i++; |
|
130 if (v) |
|
131 res |= (c << i); |
|
132 i++; |
|
133 return res; |
|
134 } |
|
135 |
|
136 function compareSAndSet(v) { |
|
137 var res = 0; |
|
138 var c; |
|
139 var i = 0; |
|
140 c = (v > "a"); |
|
141 res |= (c << i); |
|
142 i++; |
|
143 c = (v >= "b"); |
|
144 res |= (c << i); |
|
145 i++; |
|
146 c = (v < "c"); |
|
147 res |= (c << i); |
|
148 i++; |
|
149 c = (v <= "d"); |
|
150 res |= (c << i); |
|
151 i++; |
|
152 c = (v == "e"); |
|
153 res |= (c << i); |
|
154 i++; |
|
155 c = (v != "f"); |
|
156 res |= (c << i); |
|
157 i++; |
|
158 c = (v === "g"); |
|
159 res |= (c << i); |
|
160 i++; |
|
161 c = (v !== "h"); |
|
162 res |= (c << i); |
|
163 i++; |
|
164 return res; |
|
165 } |
|
166 |
|
167 function compareSAndBranch(v) { |
|
168 var res = 0; |
|
169 var c = 1; |
|
170 var i = 0; |
|
171 if (v > "a") |
|
172 res |= (c << i); |
|
173 i++; |
|
174 if (v >= "b") |
|
175 res |= (c << i); |
|
176 i++; |
|
177 if (v < "c") |
|
178 res |= (c << i); |
|
179 i++; |
|
180 if (v <= "d") |
|
181 res |= (c << i); |
|
182 i++; |
|
183 if (v == "e") |
|
184 res |= (c << i); |
|
185 i++; |
|
186 if (v != "f") |
|
187 res |= (c << i); |
|
188 i++; |
|
189 if (v === "g") |
|
190 res |= (c << i); |
|
191 i++; |
|
192 if (v !== "h") |
|
193 res |= (c << i); |
|
194 i++; |
|
195 if (v) |
|
196 res |= (c << i); |
|
197 i++; |
|
198 return res; |
|
199 } |
|
200 |
|
201 var expected = [ |
|
202 // compareIAndSet |
|
203 172, 175, 171, 171, 179, 131, 227, 35, |
|
204 // compareIAndBranch |
|
205 428, 431, 427, 427, 435, 387, 483, 291, |
|
206 // compareDAndSet |
|
207 428, 428, 431, 427, 427, 435, 387, 483, 291, 416, |
|
208 // compareDAndBranch |
|
209 428, 428, 431, 427, 427, 435, 387, 483, 291, 160, 172, |
|
210 // compareSAndSet |
|
211 172, 175, 171, 171, 179, 131, 227, 35, 172, |
|
212 // compareSAndBranch |
|
213 428, 431, 427, 427, 435, 387, 483, 291, 172 |
|
214 ]; |
|
215 |
|
216 var result = [ |
|
217 compareIAndSet(1), |
|
218 compareIAndSet(2), |
|
219 compareIAndSet(3), |
|
220 compareIAndSet(4), |
|
221 compareIAndSet(5), |
|
222 compareIAndSet(6), |
|
223 compareIAndSet(7), |
|
224 compareIAndSet(8), |
|
225 |
|
226 compareIAndBranch(1), |
|
227 compareIAndBranch(2), |
|
228 compareIAndBranch(3), |
|
229 compareIAndBranch(4), |
|
230 compareIAndBranch(5), |
|
231 compareIAndBranch(6), |
|
232 compareIAndBranch(7), |
|
233 compareIAndBranch(8), |
|
234 |
|
235 compareDAndSet(0.5), |
|
236 compareDAndSet(1.5), |
|
237 compareDAndSet(2.5), |
|
238 compareDAndSet(3.5), |
|
239 compareDAndSet(4.5), |
|
240 compareDAndSet(5.5), |
|
241 compareDAndSet(6.5), |
|
242 compareDAndSet(7.5), |
|
243 compareDAndSet(8.5), |
|
244 compareDAndSet(NaN), |
|
245 |
|
246 compareDAndBranch(0.5), |
|
247 compareDAndBranch(1.5), |
|
248 compareDAndBranch(2.5), |
|
249 compareDAndBranch(3.5), |
|
250 compareDAndBranch(4.5), |
|
251 compareDAndBranch(5.5), |
|
252 compareDAndBranch(6.5), |
|
253 compareDAndBranch(7.5), |
|
254 compareDAndBranch(8.5), |
|
255 compareDAndBranch(NaN), |
|
256 compareDAndBranch(0.0), |
|
257 |
|
258 compareSAndSet("a"), |
|
259 compareSAndSet("b"), |
|
260 compareSAndSet("c"), |
|
261 compareSAndSet("d"), |
|
262 compareSAndSet("e"), |
|
263 compareSAndSet("f"), |
|
264 compareSAndSet("g"), |
|
265 compareSAndSet("h"), |
|
266 compareSAndSet(""), |
|
267 |
|
268 compareSAndBranch("a"), |
|
269 compareSAndBranch("b"), |
|
270 compareSAndBranch("c"), |
|
271 compareSAndBranch("d"), |
|
272 compareSAndBranch("e"), |
|
273 compareSAndBranch("f"), |
|
274 compareSAndBranch("g"), |
|
275 compareSAndBranch("h"), |
|
276 compareSAndBranch("") |
|
277 ]; |
|
278 |
|
279 assertEq(arraysEqual(result, expected), true); |