| // 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 --no-background-compilation |
| |
| // @dart = 2.9 |
| |
| // Library tag to be able to run in html test framework. |
| library float32x4_cross_test; |
| |
| import 'dart:typed_data'; |
| import 'package:expect/expect.dart'; |
| |
| Float32x4 cross(Float32x4 a, Float32x4 b) { |
| var t0 = a.shuffle(Float32x4.yzxw); |
| var t1 = b.shuffle(Float32x4.zxyw); |
| var l = t0 * t1; |
| t0 = a.shuffle(Float32x4.zxyw); |
| t1 = b.shuffle(Float32x4.yzxw); |
| var r = t0 * t1; |
| return l - r; |
| } |
| |
| void testCross(Float32x4 a, Float32x4 b, Float32x4 r) { |
| var x = cross(a, b); |
| Expect.equals(r.x, x.x); |
| Expect.equals(r.y, x.y); |
| Expect.equals(r.z, x.z); |
| Expect.equals(r.w, x.w); |
| } |
| |
| main() { |
| var x = new Float32x4(1.0, 0.0, 0.0, 0.0); |
| var y = new Float32x4(0.0, 1.0, 0.0, 0.0); |
| var z = new Float32x4(0.0, 0.0, 1.0, 0.0); |
| var zero = new Float32x4.zero(); |
| |
| for (int i = 0; i < 20; i++) { |
| testCross(x, y, z); |
| testCross(z, x, y); |
| testCross(y, z, x); |
| testCross(z, y, -x); |
| testCross(x, z, -y); |
| testCross(y, x, -z); |
| testCross(x, x, zero); |
| testCross(y, y, zero); |
| testCross(z, z, zero); |
| testCross(x, y, cross(-y, x)); |
| testCross(x, y + z, cross(x, y) + cross(x, z)); |
| } |
| } |