Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(429)

Side by Side Diff: runtime/tests/vm/dart/simd128float32_test.dart

Issue 12303013: Simd128Float32, Simd128Mask, and Simd128Float32List additions for dart:scalarlist (Closed) Base URL: https://dart.googlecode.com/svn/branches/bleeding_edge/dart
Patch Set: Created 7 years, 10 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
OLDNEW
(Empty)
1 import 'dart:scalarlist';
2
3 testAdd() {
4 var m = new Simd128Float32(-1.0, -2.0, -3.0, -4.0);
5 var n = new Simd128Float32(1.0, 2.0, 3.0, 4.0);
6 var o = m + n;
7 Expect.equals(0.0, o.x);
8 Expect.equals(0.0, o.y);
9 Expect.equals(0.0, o.z);
10 Expect.equals(0.0, o.w);
11 }
12
13 testNegate() {
14 var m = new Simd128Float32(1.0, 2.0, -3.0, -4.0);
15 m = -m;
16 Expect.equals(-1.0, m.x);
17 Expect.equals(-2.0, m.y);
18 Expect.equals(3.0, m.z);
19 Expect.equals(4.0, m.w);
20 }
21
22 testSub() {
23 var m = new Simd128Float32(-1.0, -2.0, -3.0, -4.0);
24 var n = new Simd128Float32(1.0, 2.0, 3.0, 4.0);
25 var o = m - n;
26 Expect.equals(-2.0, o.x);
27 Expect.equals(-4.0, o.y);
28 Expect.equals(-6.0, o.z);
29 Expect.equals(-8.0, o.w);
30 }
31
32 testMul() {
33 var m = new Simd128Float32(-1.0, -2.0, -3.0, -4.0);
34 var n = new Simd128Float32(1.0, 2.0, 3.0, 4.0);
35 var o = m * n;
36 Expect.equals(-1.0, o.x);
37 Expect.equals(-4.0, o.y);
38 Expect.equals(-9.0, o.z);
39 Expect.equals(-16.0, o.w);
40 }
41
42 testDiv() {
43 var m = new Simd128Float32(-1.0, -2.0, -3.0, -4.0);
44 var n = new Simd128Float32(1.0, 2.0, 3.0, 4.0);
45 var o = m / n;
46 Expect.equals(-1.0, o.x);
47 Expect.equals(-1.0, o.y);
48 Expect.equals(-1.0, o.z);
49 Expect.equals(-1.0, o.w);
50 }
51
52 testComparison() {
53 var m = new Simd128Float32(1.0, 2.0, 0.1, 0.001);
54 var n = new Simd128Float32(2.0, 2.0, 0.001, 0.1);
55 var cmp;
56 cmp = m < n;
57 Expect.equals(0xFFFFFFFF, cmp.x);
58 Expect.equals(0x0, cmp.y);
59 Expect.equals(0x0, cmp.z);
60 Expect.equals(0xFFFFFFFF, cmp.w);
61
62 cmp = m <= n;
63 Expect.equals(0xFFFFFFFF, cmp.x);
64 Expect.equals(0xFFFFFFFF, cmp.y);
65 Expect.equals(0x0, cmp.z);
66 Expect.equals(0xFFFFFFFF, cmp.w);
67
68 cmp = m == n;
69 Expect.equals(0x0, cmp.x);
70 Expect.equals(0xFFFFFFFF, cmp.y);
71 Expect.equals(0x0, cmp.z);
72 Expect.equals(0x0, cmp.w);
73
74 cmp = m >= n;
75 Expect.equals(0x0, cmp.x);
76 Expect.equals(0xFFFFFFFF, cmp.y);
77 Expect.equals(0xFFFFFFFF, cmp.z);
78 Expect.equals(0x0, cmp.w);
79
80 cmp = m > n;
81 Expect.equals(0x0, cmp.x);
82 Expect.equals(0x0, cmp.y);
83 Expect.equals(0xFFFFFFFF, cmp.z);
84 Expect.equals(0x0, cmp.w);
85 }
86
87 testAbs() {
88 var m = new Simd128Float32(1.0, -2.0, 3.0, -4.0);
89 m = m.abs();
90 Expect.equals(1.0, m.x);
91 Expect.equals(2.0, m.y);
92 Expect.equals(3.0, m.z);
93 Expect.equals(4.0, m.w);
94 }
95
96 testScale() {
97 var m = new Simd128Float32(1.0, -2.0, 3.0, -4.0);
98 m = m.scale(20.0);
99 Expect.equals(20.0, m.x);
100 Expect.equals(-40.0, m.y);
101 Expect.equals(60.0, m.z);
102 Expect.equals(-80.0, m.w);
103 }
104
105 testClamp() {
106 var m = new Simd128Float32(1.0, -2.0, 3.0, -4.0);
107 var lo = new Simd128Float32(0.0, 0.0, 0.0, 0.0);
108 var hi = new Simd128Float32(2.0, 2.0, 2.0, 2.0);
109 m = m.clamp(lo, hi);
110 Expect.equals(1.0, m.x);
111 Expect.equals(0.0, m.y);
112 Expect.equals(2.0, m.z);
113 Expect.equals(0.0, m.w);
114 }
115
116 testShuffle() {
117 var m = new Simd128Float32(1.0, 2.0, 3.0, 4.0);
118 var xxxx = m.xxxx;
119 Expect.equals(1.0, xxxx.x);
120 Expect.equals(1.0, xxxx.y);
121 Expect.equals(1.0, xxxx.z);
122 Expect.equals(1.0, xxxx.w);
123 var yyyy = m.yyyy;
124 Expect.equals(2.0, yyyy.x);
125 Expect.equals(2.0, yyyy.y);
126 Expect.equals(2.0, yyyy.z);
127 Expect.equals(2.0, yyyy.w);
128 var zzzz = m.zzzz;
129 Expect.equals(3.0, zzzz.x);
130 Expect.equals(3.0, zzzz.y);
131 Expect.equals(3.0, zzzz.z);
132 Expect.equals(3.0, zzzz.w);
133 var wwww = m.wwww;
134 Expect.equals(4.0, wwww.x);
135 Expect.equals(4.0, wwww.y);
136 Expect.equals(4.0, wwww.z);
137 Expect.equals(4.0, wwww.w);
138 }
139
140 testMin() {
141 var m = new Simd128Float32(1.0, 2.0, 3.0, 4.0);
142 var n = new Simd128Float32(1.0, 0.0, 2.5, 5.0);
143 m = m.min(n);
144 Expect.equals(1.0, m.x);
145 Expect.equals(0.0, m.y);
146 Expect.equals(2.5, m.z);
147 Expect.equals(4.0, m.w);
148 }
149
150 testMax() {
151 var m = new Simd128Float32(1.0, 2.0, 3.0, 4.0);
152 var n = new Simd128Float32(1.0, 0.0, 2.5, 5.0);
153 m = m.max(n);
154 Expect.equals(1.0, m.x);
155 Expect.equals(2.0, m.y);
156 Expect.equals(3.0, m.z);
157 Expect.equals(5.0, m.w);
158 }
159
160 testSqrt() {
161 var m = new Simd128Float32(1.0, 4.0, 9.0, 16.0);
162 m = m.sqrt();
163 Expect.equals(1.0, m.x);
164 Expect.equals(2.0, m.y);
165 Expect.equals(3.0, m.z);
166 Expect.equals(4.0, m.w);
167 }
168
169 testReciprocal() {
170 var m = new Simd128Float32(1.0, 4.0, 9.0, 16.0);
171 m = m.reciprocal();
172 Expect.approxEquals(1.0, m.x);
173 Expect.approxEquals(0.25, m.y);
174 Expect.approxEquals(0.1111111, m.z);
175 Expect.approxEquals(0.0625, m.w);
176 }
177
178 testReciprocalSqrt() {
179 var m = new Simd128Float32(1.0, 0.25, 0.111111, 0.0625);
180 m = m.reciprocalSqrt();
181 Expect.approxEquals(1.0, m.x);
182 Expect.approxEquals(2.0, m.y);
183 Expect.approxEquals(3.0, m.z);
184 Expect.approxEquals(4.0, m.w);
185 }
186
187 testSelect() {
188 var m = new Simd128Mask.bool(true, true, false, false);
189 var t = new Simd128Float32(1.0, 2.0, 3.0, 4.0);
190 var f = new Simd128Float32(5.0, 6.0, 7.0, 8.0);
191 var s = m.select(t, f);
192 Expect.equals(1.0, s.x);
193 Expect.equals(2.0, s.y);
194 Expect.equals(7.0, s.z);
195 Expect.equals(8.0, s.w);
196 }
197
198 testConversions() {
199 var m = new Simd128Mask(0x3F800000, 0x40000000, 0x40400000, 0x40800000);
200 var n = m.toSimd128Float32();
201 Expect.equals(1.0, n.x);
202 Expect.equals(2.0, n.y);
203 Expect.equals(3.0, n.z);
204 Expect.equals(4.0, n.w);
205 n = new Simd128Float32(5.0, 6.0, 7.0, 8.0);
206 m = n.toSimd128Mask();
207 Expect.equals(0x40A00000, m.x);
208 Expect.equals(0x40C00000, m.y);
209 Expect.equals(0x40E00000, m.z);
210 Expect.equals(0x41000000, m.w);
211 // Flip sign using bit-wise operators.
212 n = new Simd128Float32(9.0, 10.0, 11.0, 12.0);
213 m = new Simd128Mask(0x80000000, 0x80000000, 0x80000000, 0x80000000);
214 var nMask = n.toSimd128Mask();
215 nMask = nMask ^ m; // flip sign.
216 n = nMask.toSimd128Float32();
217 Expect.equals(-9.0, n.x);
218 Expect.equals(-10.0, n.y);
219 Expect.equals(-11.0, n.z);
220 Expect.equals(-12.0, n.w);
221 nMask = n.toSimd128Mask();
222 nMask = nMask ^ m; // flip sign.
223 n = nMask.toSimd128Float32();
224 Expect.equals(9.0, n.x);
225 Expect.equals(10.0, n.y);
226 Expect.equals(11.0, n.z);
227 Expect.equals(12.0, n.w);
228 }
229
230
231 testBitOperators() {
232 var m = new Simd128Mask(0xAAAAAAAA, 0xAAAAAAAA, 0xAAAAAAAA, 0xAAAAAAAA);
233 var n = new Simd128Mask(0x55555555, 0x55555555, 0x55555555, 0x55555555);
234 Expect.equals(0xAAAAAAAA, m.x);
235 Expect.equals(0xAAAAAAAA, m.y);
236 Expect.equals(0xAAAAAAAA, m.z);
237 Expect.equals(0xAAAAAAAA, m.w);
238 Expect.equals(0x55555555, n.x);
239 Expect.equals(0x55555555, n.y);
240 Expect.equals(0x55555555, n.z);
241 Expect.equals(0x55555555, n.w);
242 Expect.equals(true, n.flagX);
243 Expect.equals(true, n.flagY);
244 Expect.equals(true, n.flagZ);
245 Expect.equals(true, n.flagW);
246 var o = m|n; // or
247 Expect.equals(0xFFFFFFFF, o.x);
248 Expect.equals(0xFFFFFFFF, o.y);
249 Expect.equals(0xFFFFFFFF, o.z);
250 Expect.equals(0xFFFFFFFF, o.w);
251 Expect.equals(true, o.flagX);
252 Expect.equals(true, o.flagY);
253 Expect.equals(true, o.flagZ);
254 Expect.equals(true, o.flagW);
255 o = m&n; // and
256 Expect.equals(0x0, o.x);
257 Expect.equals(0x0, o.y);
258 Expect.equals(0x0, o.z);
259 Expect.equals(0x0, o.w);
260 n = n.setX(0xAAAAAAAA);
261 n = n.setY(0xAAAAAAAA);
262 n = n.setZ(0xAAAAAAAA);
263 n = n.setW(0xAAAAAAAA);
264 Expect.equals(0xAAAAAAAA, n.x);
265 Expect.equals(0xAAAAAAAA, n.y);
266 Expect.equals(0xAAAAAAAA, n.z);
267 Expect.equals(0xAAAAAAAA, n.w);
268 o = m^n; // xor
269 Expect.equals(0x0, o.x);
270 Expect.equals(0x0, o.y);
271 Expect.equals(0x0, o.z);
272 Expect.equals(0x0, o.w);
273 Expect.equals(false, o.flagX);
274 Expect.equals(false, o.flagY);
275 Expect.equals(false, o.flagZ);
276 Expect.equals(false, o.flagW);
277 }
278
279 testSetters() {
280 var f = new Simd128Float32.zero();
281 Expect.equals(0.0, f.x);
282 Expect.equals(0.0, f.y);
283 Expect.equals(0.0, f.z);
284 Expect.equals(0.0, f.w);
285 f = f.setX(4.0);
286 Expect.equals(4.0, f.x);
287 f = f.setY(3.0);
288 Expect.equals(3.0, f.y);
289 f = f.setZ(2.0);
290 Expect.equals(2.0, f.z);
291 f = f.setW(1.0);
292 Expect.equals(1.0, f.w);
293 f = new Simd128Float32.zero();
294 f = f.setX(4.0).setZ(2.0).setW(1.0).setY(3.0);
295 Expect.equals(4.0, f.x);
296 Expect.equals(3.0, f.y);
297 Expect.equals(2.0, f.z);
298 Expect.equals(1.0, f.w);
299 var m = new Simd128Mask.bool(false, false, false, false);
300 Expect.equals(false, m.flagX);
301 Expect.equals(false, m.flagY);
302 Expect.equals(false, m.flagZ);
303 Expect.equals(false, m.flagW);
304 m = m.setFlagX(true);
305 Expect.equals(true, m.flagX);
306 Expect.equals(false, m.flagY);
307 Expect.equals(false, m.flagZ);
308 Expect.equals(false, m.flagW);
309 m = m.setFlagY(true);
310 Expect.equals(true, m.flagX);
311 Expect.equals(true, m.flagY);
312 Expect.equals(false, m.flagZ);
313 Expect.equals(false, m.flagW);
314 m = m.setFlagZ(true);
315 Expect.equals(true, m.flagX);
316 Expect.equals(true, m.flagY);
317 Expect.equals(true, m.flagZ);
318 Expect.equals(false, m.flagW);
319 m = m.setFlagW(true);
320 Expect.equals(true, m.flagX);
321 Expect.equals(true, m.flagY);
322 Expect.equals(true, m.flagZ);
323 Expect.equals(true, m.flagW);
324 }
325
326 testGetters() {
327 var f = new Simd128Float32(1.0, 2.0, 3.0, 4.0);
328 Expect.equals(1.0, f.x);
329 Expect.equals(2.0, f.y);
330 Expect.equals(3.0, f.z);
331 Expect.equals(4.0, f.w);
332 var m = new Simd128Mask.bool(false, true, true, false);
333 Expect.equals(false, m.flagX);
334 Expect.equals(true, m.flagY);
335 Expect.equals(true, m.flagZ);
336 Expect.equals(false, m.flagW);
337 }
338
339 main() {
340 for (int i = 0; i < 3000; i++) {
341 testGetters();
342 testSetters();
343 testBitOperators();
344 testConversions();
345 testSelect();
346 testShuffle();
347 testAdd();
348 testSub();
349 testNegate();
350 testMul();
351 testDiv();
352 testComparison();
353 testScale();
354 testClamp();
355 testAbs();
356 testMin();
357 testMax();
358 testSqrt();
359 testReciprocal();
360 testReciprocalSqrt();
361 }
362 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698