Index: test/codegen/lib/typed_data/float32x4_transpose_test.dart |
diff --git a/test/codegen/lib/typed_data/float32x4_transpose_test.dart b/test/codegen/lib/typed_data/float32x4_transpose_test.dart |
new file mode 100644 |
index 0000000000000000000000000000000000000000..ecb39fbc72b82f2fb82e2475b234f33092ed06da |
--- /dev/null |
+++ b/test/codegen/lib/typed_data/float32x4_transpose_test.dart |
@@ -0,0 +1,64 @@ |
+// Copyright (c) 2013, the Dart project authors. Please see the AUTHORS file |
+// for details. All rights reserved. Use of this source code is governed by a |
+// BSD-style license that can be found in the LICENSE file. |
+// VMOptions=--optimization-counter-threshold=10 |
+ |
+// Library tag to be able to run in html test framework. |
+library float32x4_transpose_test; |
+ |
+import 'dart:typed_data'; |
+import 'package:expect/expect.dart'; |
+ |
+void transpose(Float32x4List m) { |
+ Expect.equals(4, m.length); |
+ var m0 = m[0]; |
+ var m1 = m[1]; |
+ var m2 = m[2]; |
+ var m3 = m[3]; |
+ |
+ var t0 = m0.shuffleMix(m1, Float32x4.XYXY); |
+ var t1 = m2.shuffleMix(m3, Float32x4.XYXY); |
+ m[0] = t0.shuffleMix(t1, Float32x4.XZXZ); |
+ m[1] = t0.shuffleMix(t1, Float32x4.YWYW); |
+ |
+ var t2 = m0.shuffleMix(m1, Float32x4.ZWZW); |
+ var t3 = m2.shuffleMix(m3, Float32x4.ZWZW); |
+ m[2] = t2.shuffleMix(t3, Float32x4.XZXZ); |
+ m[3] = t2.shuffleMix(t3, Float32x4.YWYW); |
+} |
+ |
+void testTranspose(Float32x4List m, Float32x4List r) { |
+ transpose(m); // In place transpose. |
+ for (int i = 0; i < 4; i++) { |
+ var a = m[i]; |
+ var b = r[i]; |
+ Expect.equals(b.x, a.x); |
+ Expect.equals(b.y, a.y); |
+ Expect.equals(b.z, a.z); |
+ Expect.equals(b.w, a.w); |
+ } |
+} |
+ |
+main() { |
+ var A = new Float32x4List(4); |
+ A[0] = new Float32x4(1.0, 2.0, 3.0, 4.0); |
+ A[1] = new Float32x4(5.0, 6.0, 7.0, 8.0); |
+ A[2] = new Float32x4(9.0, 10.0, 11.0, 12.0); |
+ A[3] = new Float32x4(13.0, 14.0, 15.0, 16.0); |
+ var B = new Float32x4List(4); |
+ B[0] = new Float32x4(1.0, 5.0, 9.0, 13.0); |
+ B[1] = new Float32x4(2.0, 6.0, 10.0, 14.0); |
+ B[2] = new Float32x4(3.0, 7.0, 11.0, 15.0); |
+ B[3] = new Float32x4(4.0, 8.0, 12.0, 16.0); |
+ var I = new Float32x4List(4); |
+ I[0] = new Float32x4(1.0, 0.0, 0.0, 0.0); |
+ I[1] = new Float32x4(0.0, 1.0, 0.0, 0.0); |
+ I[2] = new Float32x4(0.0, 0.0, 1.0, 0.0); |
+ I[3] = new Float32x4(0.0, 0.0, 0.0, 1.0); |
+ for (int i = 0; i < 20; i++) { |
+ var m = new Float32x4List.fromList(I); |
+ testTranspose(m, I); |
+ m = new Float32x4List.fromList(A); |
+ testTranspose(m, B); |
+ } |
+} |