// 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 operator |(Int32x4 other)
/// The bit-wise or operator.
/// @description Checks that every lane of the new [Int32x4] equals the result
/// of applying bit-wise or operator to corresponding lanes of operands.
/// @note undocumented
/// @author msyabro


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

check(x1, y1, z1, w1, x2, y2, z2, w2) {
  var obj1 = new Int32x4(x1, y1, z1, w1);
  var obj2 = new Int32x4(x2, y2, z2, w2);
  var res = obj1 | obj2;

//  Expect.equals(x1|x2, res.x);
  Expect.equals(toInt32(x1) | toInt32(x2), res.x);
  Expect.equals(toInt32(y1) | toInt32(y2), res.y);
  Expect.equals(toInt32(z1) | toInt32(z2), res.z);
  Expect.equals(toInt32(w1) | toInt32(w2), res.w);
}

main() {
  check(0, 0, 0, 0, 0, 0, 0, 0);
  check(-1, 0, 0, 0, 0, 0, 0, 0);
  check(1, 1, 1, 1, 1, 1, 1, 1);
  check(0, 1, 0, 1, 1, 0, 1, 0);

  check(0xff7812a1, 0x1903c8e4, 0x35c7de18, 0x3619c6ff,
      0x829c02ac, 0xf367c6e1, 0x367c8d9f, 0xc637ba81);
  check(0x80000000, 0x00ff00ff, 0xC0000000, 0xffffffff,
      0x00000001, 0x00ff0000, 0x40000000, 0x01010101);
}
