/*
 * 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.
 */
/**
 * @assertion Int32x4 lessThan(Float32x4 other)
 * Relational less than.
 * @description Checks that the returned [Int32x4] contains correct values.
 * @author msyabro
 */

import "dart:typed_data";
import "../../../Utils/expect.dart";

check(op1, op2, expected) {
  var res = op1.lessThan(op2);
  Expect.equals(expected.x, res.x);
  Expect.equals(expected.y, res.y);
  Expect.equals(expected.z, res.z);
  Expect.equals(expected.w, res.w);
}

main() {
  check(new Float32x4(.0, .0, .0, .0), new Float32x4(.0, .0, .0, .0),
      new Int32x4.bool(false, false, false, false));
  check(new Float32x4(-1.0, -1.0, -.02, -1.32), new Float32x4(.0, .0, .0, .0),
      new Int32x4.bool(true, true, true, true));
  check( new Float32x4(1.0, 2.0, 1e-3, .04e-2),
      new Float32x4(1.0, 10.0, 1e-2, 0.23e40),
      new Int32x4.bool(false, true, true, true));
}
