Index: test/codegen/lib/html/typed_arrays_simd_test.dart |
diff --git a/test/codegen/lib/html/typed_arrays_simd_test.dart b/test/codegen/lib/html/typed_arrays_simd_test.dart |
new file mode 100644 |
index 0000000000000000000000000000000000000000..0e3d780f3fb5522a0ca919734b341e3dc41a869a |
--- /dev/null |
+++ b/test/codegen/lib/html/typed_arrays_simd_test.dart |
@@ -0,0 +1,85 @@ |
+// Copyright (c) 2012, 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. |
+ |
+library TypedArraysSimdTest; |
+import 'package:unittest/unittest.dart'; |
+import 'package:unittest/html_config.dart'; |
+import 'dart:html'; |
+import 'dart:typed_data'; |
+ |
+const _FLOATING_POINT_ERROR = 0.0000000001; |
+floatEquals(value) => closeTo(value, _FLOATING_POINT_ERROR); |
+ |
+class MyFloat32x4 { |
+ num x = 0.0; |
+ num y = 0.0; |
+ num z = 0.0; |
+ num w = 0.0; |
+} |
+ |
+main() { |
+ useHtmlConfiguration(); |
+ |
+ // Only perform tests if ArrayBuffer is supported. |
+ if (!Platform.supportsTypedData) { |
+ return; |
+ } |
+ |
+ test('test Float32x4', () { |
+ if (Platform.supportsSimd) { |
+ final val = new Float32x4(1.0, 2.0, 3.0, 4.0); |
+ expect(val.x, floatEquals(1.0)); |
+ expect(val.y, floatEquals(2.0)); |
+ expect(val.z, floatEquals(3.0)); |
+ expect(val.w, floatEquals(4.0)); |
+ final val2 = val + val; |
+ expect(val2.x, floatEquals(2.0)); |
+ expect(val2.y, floatEquals(4.0)); |
+ expect(val2.z, floatEquals(6.0)); |
+ expect(val2.w, floatEquals(8.0)); |
+ } |
+ }); |
+ |
+ test('test Float32x4List', () { |
+ var counter; |
+ final list = new Float32List(12); |
+ for (int i = 0; i < list.length; ++i) { |
+ list[i] = i * 1.0; |
+ } |
+ if (Platform.supportsSimd) { |
+ counter = new Float32x4.zero(); |
+ final simdlist = new Float32x4List.view(list.buffer); |
+ for (int i = 0; i < simdlist.length; ++i) { |
+ counter += simdlist[i]; |
+ } |
+ } else { |
+ counter = new MyFloat32x4(); |
+ for (int i = 0; i < list.length; i += 4) { |
+ counter.x += list[i]; |
+ counter.y += list[i+1]; |
+ counter.z += list[i+2]; |
+ counter.w += list[i+3]; |
+ } |
+ } |
+ expect(counter.x, floatEquals(12.0)); |
+ expect(counter.y, floatEquals(15.0)); |
+ expect(counter.z, floatEquals(18.0)); |
+ expect(counter.w, floatEquals(21.0)); |
+ }); |
+ |
+ test('test Int32x4', () { |
+ if (Platform.supportsSimd) { |
+ final val = new Int32x4(1, 2, 3, 4); |
+ expect(val.x, equals(1)); |
+ expect(val.y, equals(2)); |
+ expect(val.z, equals(3)); |
+ expect(val.w, equals(4)); |
+ final val2 = val ^ val; |
+ expect(val2.x, equals(0)); |
+ expect(val2.y, equals(0)); |
+ expect(val2.z, equals(0)); |
+ expect(val2.w, equals(0)); |
+ } |
+ }); |
+} |