// 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

// 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));
  }
}
