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

import 'package:fixnum/fixnum.dart';
import 'package:unittest/unittest.dart';

void main() {
  group("fromBytes", () {
    test("fromBytes", () {
      checkBytes(List<int> bytes, int h, int l) {
        expect(new Int64.fromBytes(bytes), new Int64.fromInts(h, l));
      }
      checkBytes([ 0, 0, 0, 0, 0, 0, 0, 0 ], 0, 0);
      checkBytes([ 1, 0, 0, 0, 0, 0, 0, 0 ], 0, 1);
      checkBytes([ 1, 2, 3, 4, 5, 6, 7, 8 ], 0x08070605, 0x04030201);
      checkBytes([ 0xfe, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff ],
          0xffffffff, 0xfffffffe);
      checkBytes([ 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff ],
          0xffffffff, 0xffffffff);
    });
    test("fromBytesBigEndian", () {
      checkBytes(List<int> bytes, int h, int l) {
        expect(new Int64.fromBytesBigEndian(bytes), new Int64.fromInts(h, l));
      }
      checkBytes([ 0, 0, 0, 0, 0, 0, 0, 0 ], 0, 0);
      checkBytes([ 0, 0, 0, 0, 0, 0, 0, 1 ], 0, 1);
      checkBytes([ 8, 7, 6, 5, 4, 3, 2, 1 ], 0x08070605, 0x04030201);
      checkBytes([ 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfe ],
          0xffffffff, 0xfffffffe);
      checkBytes([ 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff ],
          0xffffffff, 0xffffffff);
    });
  });

  argumentErrorTest(name, op, [receiver = Int64.ONE]) {
    throwsArgumentErrorMentioning(substring) =>
        throwsA((e) => e is ArgumentError && '$e'.contains(substring));

    expect(() => op(receiver, null), throwsArgumentErrorMentioning('null'));
    expect(() => op(receiver, 'foo'), throwsArgumentErrorMentioning(r'"foo"'));
  }

  group("is-tests", () {
    test("isEven", () {
      expect((-Int64.ONE).isEven, false);
      expect(Int64.ZERO.isEven, true);
      expect(Int64.ONE.isEven, false);
      expect(Int64.TWO.isEven, true);
    });
    test("isMaxValue", () {
      expect(Int64.MIN_VALUE.isMaxValue, false);
      expect(Int64.ZERO.isMaxValue, false);
      expect(Int64.MAX_VALUE.isMaxValue, true);
    });
    test("isMinValue", () {
      expect(Int64.MIN_VALUE.isMinValue, true);
      expect(Int64.ZERO.isMinValue, false);
      expect(Int64.MAX_VALUE.isMinValue, false);
    });
    test("isNegative", () {
      expect(Int64.MIN_VALUE.isNegative, true);
      expect(Int64.ZERO.isNegative, false);
      expect(Int64.ONE.isNegative, false);
    });
    test("isOdd", () {
      expect((-Int64.ONE).isOdd, true);
      expect(Int64.ZERO.isOdd, false);
      expect(Int64.ONE.isOdd, true);
      expect(Int64.TWO.isOdd, false);
    });
    test("isZero", () {
      expect(Int64.MIN_VALUE.isZero, false);
      expect(Int64.ZERO.isZero, true);
      expect(Int64.MAX_VALUE.isZero, false);
    });
    test("bitLength", () {
      expect(new Int64(-2).bitLength, 1);
      expect((-Int64.ONE).bitLength, 0);
      expect(Int64.ZERO.bitLength, 0);
      expect((Int64.ONE << 21).bitLength, 22);
      expect((Int64.ONE << 22).bitLength, 23);
      expect((Int64.ONE << 43).bitLength, 44);
      expect((Int64.ONE << 44).bitLength, 45);
      expect(new Int64(2).bitLength, 2);
      expect(Int64.MAX_VALUE.bitLength, 63);
      expect(Int64.MIN_VALUE.bitLength, 63);
    });
  });

  group("arithmetic operators", () {
    Int64 n1 = new Int64(1234);
    Int64 n2 = new Int64(9876);
    Int64 n3 = new Int64(-1234);
    Int64 n4 = new Int64(-9876);
    Int64 n5 = new Int64.fromInts(0x12345678, 0xabcdabcd);
    Int64 n6 = new Int64.fromInts(0x77773333, 0x22224444);

    test("+", () {
      expect(n1 + n2, new Int64(11110));
      expect(n3 + n2, new Int64(8642));
      expect(n3 + n4, new Int64(-11110));
      expect(n5 + n6, new Int64.fromInts(0x89ab89ab, 0xcdeff011));
      expect(Int64.MAX_VALUE + 1, Int64.MIN_VALUE);
      argumentErrorTest("+", (a, b) => a + b);
    });

    test("-", () {
      expect(n1 - n2, new Int64(-8642));
      expect(n3 - n2, new Int64(-11110));
      expect(n3 - n4, new Int64(8642));
      expect(n5 - n6, new Int64.fromInts(0x9abd2345, 0x89ab6789));
      expect(Int64.MIN_VALUE - 1, Int64.MAX_VALUE);
      argumentErrorTest("-", (a, b) => a - b);
    });

    test("unary -", () {
      expect(-n1, new Int64(-1234));
      expect(-Int64.ZERO, Int64.ZERO);
    });

    test("*", () {
      expect(new Int64(1111) * new Int64(3), new Int64(3333));
      expect(new Int64(1111) * new Int64(-3), new Int64(-3333));
      expect(new Int64(-1111) * new Int64(3), new Int64(-3333));
      expect(new Int64(-1111) * new Int64(-3), new Int64(3333));
      expect(new Int64(100) * Int64.ZERO, Int64.ZERO);

      expect(new Int64.fromInts(0x12345678, 0x12345678) *
              new Int64.fromInts(0x1234, 0x12345678),
          new Int64.fromInts(0x7ff63f7c, 0x1df4d840));
      expect(new Int64.fromInts(0xf2345678, 0x12345678) *
              new Int64.fromInts(0x1234, 0x12345678),
          new Int64.fromInts(0x7ff63f7c, 0x1df4d840));
      expect(new Int64.fromInts(0xf2345678, 0x12345678) *
              new Int64.fromInts(0xffff1234, 0x12345678),
          new Int64.fromInts(0x297e3f7c, 0x1df4d840));

      // RHS Int32
      expect((new Int64(123456789) * new Int32(987654321)),
          new Int64.fromInts(0x1b13114, 0xfbff5385));
      expect((new Int64(123456789) * new Int32(987654321)),
          new Int64.fromInts(0x1b13114, 0xfbff5385));

      // Wraparound
      expect((new Int64(123456789) * new Int64(987654321)),
          new Int64.fromInts(0x1b13114, 0xfbff5385));

      expect(Int64.MIN_VALUE * new Int64(2), Int64.ZERO);
      expect(Int64.MIN_VALUE * new Int64(1), Int64.MIN_VALUE);
      expect(Int64.MIN_VALUE * new Int64(-1), Int64.MIN_VALUE);
      argumentErrorTest("*", (a, b) => a * b);
    });

    test("~/", () {
      Int64 deadBeef = new Int64.fromInts(0xDEADBEEF, 0xDEADBEEF);
      Int64 ten = new Int64(10);

      expect(deadBeef ~/ ten, new Int64.fromInts(0xfcaaf97e, 0x63115fe5));
      expect(Int64.ONE ~/ Int64.TWO, Int64.ZERO);
      expect(Int64.MAX_VALUE ~/ Int64.TWO,
          new Int64.fromInts(0x3fffffff, 0xffffffff));
      expect(Int64.ZERO ~/ new Int64(1000), Int64.ZERO);
      expect(Int64.MIN_VALUE ~/ Int64.MIN_VALUE, Int64.ONE);
      expect(new Int64(1000) ~/ Int64.MIN_VALUE, Int64.ZERO);
      expect(Int64.MIN_VALUE ~/ new Int64(8192), new Int64(-1125899906842624));
      expect(Int64.MIN_VALUE ~/ new Int64(8193), new Int64(-1125762484664320));
      expect(new Int64(-1000) ~/ new Int64(8192), Int64.ZERO);
      expect(new Int64(-1000) ~/ new Int64(8193), Int64.ZERO);
      expect(new Int64(-1000000000) ~/ new Int64(8192), new Int64(-122070));
      expect(new Int64(-1000000000) ~/ new Int64(8193), new Int64(-122055));
      expect(new Int64(1000000000) ~/ new Int64(8192), new Int64(122070));
      expect(new Int64(1000000000) ~/ new Int64(8193), new Int64(122055));
      expect(Int64.MAX_VALUE ~/ new Int64.fromInts(0x00000000, 0x00000400),
          new Int64.fromInts(0x1fffff, 0xffffffff));
      expect(Int64.MAX_VALUE ~/ new Int64.fromInts(0x00000000, 0x00040000),
          new Int64.fromInts(0x1fff, 0xffffffff));
      expect(Int64.MAX_VALUE ~/ new Int64.fromInts(0x00000000, 0x04000000),
          new Int64.fromInts(0x1f, 0xffffffff));
      expect(Int64.MAX_VALUE ~/ new Int64.fromInts(0x00000004, 0x00000000),
          new Int64(536870911));
      expect(Int64.MAX_VALUE ~/ new Int64.fromInts(0x00000400, 0x00000000),
          new Int64(2097151));
      expect(Int64.MAX_VALUE ~/ new Int64.fromInts(0x00040000, 0x00000000),
          new Int64(8191));
      expect(Int64.MAX_VALUE ~/ new Int64.fromInts(0x04000000, 0x00000000),
          new Int64(31));
      expect(Int64.MAX_VALUE ~/ new Int64.fromInts(0x00000000, 0x00000300),
          new Int64.fromInts(0x2AAAAA, 0xAAAAAAAA));
      expect(Int64.MAX_VALUE ~/ new Int64.fromInts(0x00000000, 0x30000000),
          new Int64.fromInts(0x2, 0xAAAAAAAA));
      expect(Int64.MAX_VALUE ~/ new Int64.fromInts(0x00300000, 0x00000000),
          new Int64(0x2AA));
      expect(Int64.MAX_VALUE ~/ new Int64(0x123456),
          new Int64.fromInts(0x708, 0x002E9501));
      expect(Int64.MAX_VALUE % new Int64(0x123456), new Int64(0x3BDA9));
      expect(new Int64(5) ~/ new Int64(5), Int64.ONE);
      expect(new Int64(1000) ~/ new Int64(3), new Int64(333));
      expect(new Int64(1000) ~/ new Int64(-3), new Int64(-333));
      expect(new Int64(-1000) ~/ new Int64(3), new Int64(-333));
      expect(new Int64(-1000) ~/ new Int64(-3), new Int64(333));
      expect(new Int64(3) ~/ new Int64(1000), Int64.ZERO);
      expect(new Int64.fromInts(0x12345678, 0x12345678) ~/
              new Int64.fromInts(0x0, 0x123),
          new Int64.fromInts(0x1003d0, 0xe84f5ae8));
      expect(new Int64.fromInts(0x12345678, 0x12345678) ~/
              new Int64.fromInts(0x1234, 0x12345678),
          new Int64.fromInts(0x0, 0x10003));
      expect(new Int64.fromInts(0xf2345678, 0x12345678) ~/
              new Int64.fromInts(0x1234, 0x12345678),
          new Int64.fromInts(0xffffffff, 0xffff3dfe));
      expect(new Int64.fromInts(0xf2345678, 0x12345678) ~/
              new Int64.fromInts(0xffff1234, 0x12345678),
          new Int64.fromInts(0x0, 0xeda));
      expect(new Int64(829893893) ~/ new Int32(1919), new Int32(432461));
      expect(new Int64(829893893) ~/ new Int64(1919), new Int32(432461));
      expect(new Int64(829893893) ~/ 1919, new Int32(432461));
      expect(() => new Int64(1) ~/ Int64.ZERO,
          throwsA(new isInstanceOf<IntegerDivisionByZeroException>()));
      expect(Int64.MIN_VALUE ~/ new Int64(2),
          new Int64.fromInts(0xc0000000, 0x00000000));
      expect(Int64.MIN_VALUE ~/ new Int64(1), Int64.MIN_VALUE);
      expect(Int64.MIN_VALUE ~/ new Int64(-1), Int64.MIN_VALUE);
      expect(() => new Int64(17) ~/ Int64.ZERO, throws);
      argumentErrorTest("~/", (a, b) => a ~/ b);
    });

    test("%", () {
      // Define % as Euclidean mod, with positive result for all arguments
      expect(Int64.ZERO % new Int64(1000), Int64.ZERO);
      expect(Int64.MIN_VALUE % Int64.MIN_VALUE, Int64.ZERO);
      expect(new Int64(1000) % Int64.MIN_VALUE, new Int64(1000));
      expect(Int64.MIN_VALUE % new Int64(8192), Int64.ZERO);
      expect(Int64.MIN_VALUE % new Int64(8193), new Int64(6145));
      expect(new Int64(-1000) % new Int64(8192), new Int64(7192));
      expect(new Int64(-1000) % new Int64(8193), new Int64(7193));
      expect(new Int64(-1000000000) % new Int64(8192), new Int64(5632));
      expect(new Int64(-1000000000) % new Int64(8193), new Int64(4808));
      expect(new Int64(1000000000) % new Int64(8192), new Int64(2560));
      expect(new Int64(1000000000) % new Int64(8193), new Int64(3385));
      expect(Int64.MAX_VALUE % new Int64.fromInts(0x00000000, 0x00000400),
          new Int64.fromInts(0x0, 0x3ff));
      expect(Int64.MAX_VALUE % new Int64.fromInts(0x00000000, 0x00040000),
          new Int64.fromInts(0x0, 0x3ffff));
      expect(Int64.MAX_VALUE % new Int64.fromInts(0x00000000, 0x04000000),
          new Int64.fromInts(0x0, 0x3ffffff));
      expect(Int64.MAX_VALUE % new Int64.fromInts(0x00000004, 0x00000000),
          new Int64.fromInts(0x3, 0xffffffff));
      expect(Int64.MAX_VALUE % new Int64.fromInts(0x00000400, 0x00000000),
          new Int64.fromInts(0x3ff, 0xffffffff));
      expect(Int64.MAX_VALUE % new Int64.fromInts(0x00040000, 0x00000000),
          new Int64.fromInts(0x3ffff, 0xffffffff));
      expect(Int64.MAX_VALUE % new Int64.fromInts(0x04000000, 0x00000000),
          new Int64.fromInts(0x3ffffff, 0xffffffff));
      expect(new Int64(0x12345678).remainder(new Int64(0x22)),
          new Int64(0x12345678.remainder(0x22)));
      expect(new Int64(0x12345678).remainder(new Int64(-0x22)),
          new Int64(0x12345678.remainder(-0x22)));
      expect(new Int64(-0x12345678).remainder(new Int64(-0x22)),
          new Int64(-0x12345678.remainder(-0x22)));
      expect(new Int64(-0x12345678).remainder(new Int64(0x22)),
          new Int64(-0x12345678.remainder(0x22)));
      expect(new Int32(0x12345678).remainder(new Int64(0x22)),
          new Int64(0x12345678.remainder(0x22)));
      argumentErrorTest("%", (a, b) => a % b);
    });

    test("clamp", () {
      Int64 val = new Int64(17);
      expect(val.clamp(20, 30), new Int64(20));
      expect(val.clamp(10, 20), new Int64(17));
      expect(val.clamp(10, 15), new Int64(15));

      expect(val.clamp(new Int32(20), new Int32(30)), new Int64(20));
      expect(val.clamp(new Int32(10), new Int32(20)), new Int64(17));
      expect(val.clamp(new Int32(10), new Int32(15)), new Int64(15));

      expect(val.clamp(new Int64(20), new Int64(30)), new Int64(20));
      expect(val.clamp(new Int64(10), new Int64(20)), new Int64(17));
      expect(val.clamp(new Int64(10), new Int64(15)), new Int64(15));
      expect(val.clamp(Int64.MIN_VALUE, new Int64(30)), new Int64(17));
      expect(val.clamp(new Int64(10), Int64.MAX_VALUE), new Int64(17));

      expect(() => val.clamp(1, 'b'), throwsA(isArgumentError));
      expect(() => val.clamp('a', 1), throwsA(isArgumentError));
    });
  });

  group("leading/trailing zeros", () {
    test("numberOfLeadingZeros", () {
      checkZeros(Int64 value, int zeros) {
        expect(value.numberOfLeadingZeros(), zeros);
      }
      checkZeros(new Int64(0), 64);
      checkZeros(new Int64(1), 63);
      checkZeros(new Int64.fromInts(0x00000000, 0x003fffff), 42);
      checkZeros(new Int64.fromInts(0x00000000, 0x00400000), 41);
      checkZeros(new Int64.fromInts(0x00000fff, 0xffffffff), 20);
      checkZeros(new Int64.fromInts(0x00001000, 0x00000000), 19);
      checkZeros(new Int64.fromInts(0x7fffffff, 0xffffffff), 1);
      checkZeros(new Int64(-1), 0);
    });

    test("numberOfTrailingZeros", () {
      checkZeros(Int64 value, int zeros) {
        expect(value.numberOfTrailingZeros(), zeros);
      }
      checkZeros(new Int64(-1), 0);
      checkZeros(new Int64(1), 0);
      checkZeros(new Int64(2), 1);
      checkZeros(new Int64.fromInts(0x00000000, 0x00200000), 21);
      checkZeros(new Int64.fromInts(0x00000000, 0x00400000), 22);
      checkZeros(new Int64.fromInts(0x00000800, 0x00000000), 43);
      checkZeros(new Int64.fromInts(0x00001000, 0x00000000), 44);
      checkZeros(new Int64.fromInts(0x80000000, 0x00000000), 63);
      checkZeros(new Int64(0), 64);
    });
  });

  group("comparison operators", () {
    Int64 largeNeg = new Int64.fromInts(0x82341234, 0x0);
    Int64 largePos = new Int64.fromInts(0x12341234, 0x0);
    Int64 largePosPlusOne = largePos + new Int64(1);

    test("<", () {
      expect(new Int64(10) < new Int64(11), true);
      expect(new Int64(10) < new Int64(10), false);
      expect(new Int64(10) < new Int64(9), false);
      expect(new Int64(10) < new Int32(11), true);
      expect(new Int64(10) < new Int32(10), false);
      expect(new Int64(10) < new Int32(9), false);
      expect(new Int64(-10) < new Int64(-11), false);
      expect(Int64.MIN_VALUE < Int64.ZERO, true);
      expect(largeNeg < largePos, true);
      expect(largePos < largePosPlusOne, true);
      expect(largePos < largePos, false);
      expect(largePosPlusOne < largePos, false);
      expect(Int64.MIN_VALUE < Int64.MAX_VALUE, true);
      expect(Int64.MAX_VALUE < Int64.MIN_VALUE, false);
      argumentErrorTest("<", (a, b) => a < b);
    });

    test("<=", () {
      expect(new Int64(10) <= new Int64(11), true);
      expect(new Int64(10) <= new Int64(10), true);
      expect(new Int64(10) <= new Int64(9), false);
      expect(new Int64(10) <= new Int32(11), true);
      expect(new Int64(10) <= new Int32(10), true);
      expect(new Int64(10) <= new Int64(9), false);
      expect(new Int64(-10) <= new Int64(-11), false);
      expect(new Int64(-10) <= new Int64(-10), true);
      expect(largeNeg <= largePos, true);
      expect(largePos <= largeNeg, false);
      expect(largePos <= largePosPlusOne, true);
      expect(largePos <= largePos, true);
      expect(largePosPlusOne <= largePos, false);
      expect(Int64.MIN_VALUE <= Int64.MAX_VALUE, true);
      expect(Int64.MAX_VALUE <= Int64.MIN_VALUE, false);
      argumentErrorTest("<=", (a, b) => a <= b);
    });

    test("==", () {
      expect(new Int64(0) == new Int64(0), true);
      expect(new Int64(0) == new Int64(1), false);
      expect(new Int64(0) == new Int32(0), true);
      expect(new Int64(0) == new Int32(1), false);
      expect(new Int64(0) == 0, true);
      expect(new Int64(0) == 1, false);
      expect(new Int64(10) == new Int64(11), false);
      expect(new Int64(10) == new Int64(10), true);
      expect(new Int64(10) == new Int64(9), false);
      expect(new Int64(10) == new Int32(11), false);
      expect(new Int64(10) == new Int32(10), true);
      expect(new Int64(10) == new Int32(9), false);
      expect(new Int64(10) == 11, false);
      expect(new Int64(10) == 10, true);
      expect(new Int64(10) == 9, false);
      expect(new Int64(-10) == new Int64(-10), true);
      expect(new Int64(-10) != new Int64(-10), false);
      expect(new Int64(-10) == -10, true);
      expect(new Int64(-10) == -9, false);
      expect(largePos == largePos, true);
      expect(largePos == largePosPlusOne, false);
      expect(largePosPlusOne == largePos, false);
      expect(Int64.MIN_VALUE == Int64.MAX_VALUE, false);
      expect(new Int64(17) == new Object(), false);
      expect(new Int64(17) == null, false);
    });

    test(">=", () {
      expect(new Int64(10) >= new Int64(11), false);
      expect(new Int64(10) >= new Int64(10), true);
      expect(new Int64(10) >= new Int64(9), true);
      expect(new Int64(10) >= new Int32(11), false);
      expect(new Int64(10) >= new Int32(10), true);
      expect(new Int64(10) >= new Int32(9), true);
      expect(new Int64(-10) >= new Int64(-11), true);
      expect(new Int64(-10) >= new Int64(-10), true);
      expect(largePos >= largeNeg, true);
      expect(largeNeg >= largePos, false);
      expect(largePos >= largePosPlusOne, false);
      expect(largePos >= largePos, true);
      expect(largePosPlusOne >= largePos, true);
      expect(Int64.MIN_VALUE >= Int64.MAX_VALUE, false);
      expect(Int64.MAX_VALUE >= Int64.MIN_VALUE, true);
      argumentErrorTest(">=", (a, b) => a >= b);
    });

    test(">", () {
      expect(new Int64(10) > new Int64(11), false);
      expect(new Int64(10) > new Int64(10), false);
      expect(new Int64(10) > new Int64(9), true);
      expect(new Int64(10) > new Int32(11), false);
      expect(new Int64(10) > new Int32(10), false);
      expect(new Int64(10) > new Int32(9), true);
      expect(new Int64(-10) > new Int64(-11), true);
      expect(new Int64(10) > new Int64(-11), true);
      expect(new Int64(-10) > new Int64(11), false);
      expect(largePos > largeNeg, true);
      expect(largeNeg > largePos, false);
      expect(largePos > largePosPlusOne, false);
      expect(largePos > largePos, false);
      expect(largePosPlusOne > largePos, true);
      expect(Int64.ZERO > Int64.MIN_VALUE, true);
      expect(Int64.MIN_VALUE > Int64.MAX_VALUE, false);
      expect(Int64.MAX_VALUE > Int64.MIN_VALUE, true);
      argumentErrorTest(">", (a, b) => a > b);
    });
  });

  group("bitwise operators", () {
    Int64 n1 = new Int64(1234);
    Int64 n2 = new Int64(9876);
    Int64 n3 = new Int64(-1234);
    Int64 n4 = new Int64(0x1234) << 32;
    Int64 n5 = new Int64(0x9876) << 32;

    test("&", () {
      expect(n1 & n2, new Int64(1168));
      expect(n3 & n2, new Int64(8708));
      expect(n4 & n5, new Int64(0x1034) << 32);
      expect(() => n1 & null, throwsArgumentError);
      argumentErrorTest("&", (a, b) => a & b);
    });

    test("|", () {
      expect(n1 | n2, new Int64(9942));
      expect(n3 | n2, new Int64(-66));
      expect(n4 | n5, new Int64(0x9a76) << 32);
      expect(() => n1 | null, throwsArgumentError);
      argumentErrorTest("|", (a, b) => a | b);
    });

    test("^", () {
      expect(n1 ^ n2, new Int64(8774));
      expect(n3 ^ n2, new Int64(-8774));
      expect(n4 ^ n5, new Int64(0x8a42) << 32);
      expect(() => n1 ^ null, throwsArgumentError);
      argumentErrorTest("^", (a, b) => a ^ b);
    });

    test("~", () {
      expect(-new Int64(1), new Int64(-1));
      expect(-new Int64(-1), new Int64(1));
      expect(-Int64.MIN_VALUE, Int64.MIN_VALUE);

      expect(~n1, new Int64(-1235));
      expect(~n2, new Int64(-9877));
      expect(~n3, new Int64(1233));
      expect(~n4, new Int64.fromInts(0xffffedcb, 0xffffffff));
      expect(~n5, new Int64.fromInts(0xffff6789, 0xffffffff));
    });
  });

  group("bitshift operators", () {
    test("<<", () {
      expect(new Int64.fromInts(0x12341234, 0x45674567) << 10,
          new Int64.fromInts(0xd048d115, 0x9d159c00));
      expect(new Int64.fromInts(0x92341234, 0x45674567) << 10,
          new Int64.fromInts(0xd048d115, 0x9d159c00));
      expect(new Int64(-1) << 5, new Int64(-32));
      expect(new Int64(-1) << 0, new Int64(-1));
      expect(() => new Int64(17) << -1, throwsArgumentError);
      expect(() => new Int64(17) << null, throws);
    });

    test(">>", () {
      expect((Int64.MIN_VALUE >> 13).toString(), "-1125899906842624");
      expect(new Int64.fromInts(0x12341234, 0x45674567) >> 10,
          new Int64.fromInts(0x48d04, 0x8d1159d1));
      expect(new Int64.fromInts(0x92341234, 0x45674567) >> 10,
          new Int64.fromInts(0xffe48d04, 0x8d1159d1));
      expect(
          new Int64.fromInts(0xFFFFFFF, 0xFFFFFFFF) >> 34, new Int64(67108863));
      for (int n = 0; n <= 66; n++) {
        expect(new Int64(-1) >> n, new Int64(-1));
      }
      expect(new Int64.fromInts(0x72345678, 0x9abcdef0) >> 8,
          new Int64.fromInts(0x00723456, 0x789abcde));
      expect(new Int64.fromInts(0x72345678, 0x9abcdef0) >> 16,
          new Int64.fromInts(0x00007234, 0x56789abc));
      expect(new Int64.fromInts(0x72345678, 0x9abcdef0) >> 24,
          new Int64.fromInts(0x00000072, 0x3456789a));
      expect(new Int64.fromInts(0x72345678, 0x9abcdef0) >> 28,
          new Int64.fromInts(0x00000007, 0x23456789));
      expect(new Int64.fromInts(0x72345678, 0x9abcdef0) >> 32,
          new Int64.fromInts(0x00000000, 0x72345678));
      expect(new Int64.fromInts(0x72345678, 0x9abcdef0) >> 36,
          new Int64.fromInts(0x00000000, 0x07234567));
      expect(new Int64.fromInts(0x72345678, 0x9abcdef0) >> 40,
          new Int64.fromInts(0x00000000, 0x00723456));
      expect(new Int64.fromInts(0x72345678, 0x9abcde00) >> 44,
          new Int64.fromInts(0x00000000, 0x00072345));
      expect(new Int64.fromInts(0x72345678, 0x9abcdef0) >> 48,
          new Int64.fromInts(0x00000000, 0x00007234));
      expect(new Int64.fromInts(0x92345678, 0x9abcdef0) >> 8,
          new Int64.fromInts(0xff923456, 0x789abcde));
      expect(new Int64.fromInts(0x92345678, 0x9abcdef0) >> 16,
          new Int64.fromInts(0xffff9234, 0x56789abc));
      expect(new Int64.fromInts(0x92345678, 0x9abcdef0) >> 24,
          new Int64.fromInts(0xffffff92, 0x3456789a));
      expect(new Int64.fromInts(0x92345678, 0x9abcdef0) >> 28,
          new Int64.fromInts(0xfffffff9, 0x23456789));
      expect(new Int64.fromInts(0x92345678, 0x9abcdef0) >> 32,
          new Int64.fromInts(0xffffffff, 0x92345678));
      expect(new Int64.fromInts(0x92345678, 0x9abcdef0) >> 36,
          new Int64.fromInts(0xffffffff, 0xf9234567));
      expect(new Int64.fromInts(0x92345678, 0x9abcdef0) >> 40,
          new Int64.fromInts(0xffffffff, 0xff923456));
      expect(new Int64.fromInts(0x92345678, 0x9abcdef0) >> 44,
          new Int64.fromInts(0xffffffff, 0xfff92345));
      expect(new Int64.fromInts(0x92345678, 0x9abcdef0) >> 48,
          new Int64.fromInts(0xffffffff, 0xffff9234));
      expect(() => new Int64(17) >> -1, throwsArgumentError);
      expect(() => new Int64(17) >> null, throws);
    });

    test("shiftRightUnsigned", () {
      expect(new Int64.fromInts(0x12341234, 0x45674567).shiftRightUnsigned(10),
          new Int64.fromInts(0x48d04, 0x8d1159d1));
      expect(new Int64.fromInts(0x92341234, 0x45674567).shiftRightUnsigned(10),
          new Int64.fromInts(0x248d04, 0x8d1159d1));
      expect(new Int64.fromInts(0x72345678, 0x9abcdef0).shiftRightUnsigned(8),
          new Int64.fromInts(0x00723456, 0x789abcde));
      expect(new Int64.fromInts(0x72345678, 0x9abcdef0).shiftRightUnsigned(16),
          new Int64.fromInts(0x00007234, 0x56789abc));
      expect(new Int64.fromInts(0x72345678, 0x9abcdef0).shiftRightUnsigned(24),
          new Int64.fromInts(0x00000072, 0x3456789a));
      expect(new Int64.fromInts(0x72345678, 0x9abcdef0).shiftRightUnsigned(28),
          new Int64.fromInts(0x00000007, 0x23456789));
      expect(new Int64.fromInts(0x72345678, 0x9abcdef0).shiftRightUnsigned(32),
          new Int64.fromInts(0x00000000, 0x72345678));
      expect(new Int64.fromInts(0x72345678, 0x9abcdef0).shiftRightUnsigned(36),
          new Int64.fromInts(0x00000000, 0x07234567));
      expect(new Int64.fromInts(0x72345678, 0x9abcdef0).shiftRightUnsigned(40),
          new Int64.fromInts(0x00000000, 0x00723456));
      expect(new Int64.fromInts(0x72345678, 0x9abcde00).shiftRightUnsigned(44),
          new Int64.fromInts(0x00000000, 0x00072345));
      expect(new Int64.fromInts(0x72345678, 0x9abcdef0).shiftRightUnsigned(48),
          new Int64.fromInts(0x00000000, 0x00007234));
      expect(new Int64.fromInts(0x92345678, 0x9abcdef0).shiftRightUnsigned(8),
          new Int64.fromInts(0x00923456, 0x789abcde));
      expect(new Int64.fromInts(0x92345678, 0x9abcdef0).shiftRightUnsigned(16),
          new Int64.fromInts(0x00009234, 0x56789abc));
      expect(new Int64.fromInts(0x92345678, 0x9abcdef0).shiftRightUnsigned(24),
          new Int64.fromInts(0x00000092, 0x3456789a));
      expect(new Int64.fromInts(0x92345678, 0x9abcdef0).shiftRightUnsigned(28),
          new Int64.fromInts(0x00000009, 0x23456789));
      expect(new Int64.fromInts(0x92345678, 0x9abcdef0).shiftRightUnsigned(32),
          new Int64.fromInts(0x00000000, 0x92345678));
      expect(new Int64.fromInts(0x92345678, 0x9abcdef0).shiftRightUnsigned(36),
          new Int64.fromInts(0x00000000, 0x09234567));
      expect(new Int64.fromInts(0x92345678, 0x9abcdef0).shiftRightUnsigned(40),
          new Int64.fromInts(0x00000000, 0x00923456));
      expect(new Int64.fromInts(0x92345678, 0x9abcdef0).shiftRightUnsigned(44),
          new Int64.fromInts(0x00000000, 0x00092345));
      expect(new Int64.fromInts(0x00000000, 0x00009234),
          new Int64.fromInts(0x92345678, 0x9abcdef0).shiftRightUnsigned(48));
      expect(() => new Int64(17).shiftRightUnsigned(-1), throwsArgumentError);
      expect(() => new Int64(17).shiftRightUnsigned(null), throws);
    });

    test("overflow", () {
      expect((new Int64(1) << 63) >> 1,
          -new Int64.fromInts(0x40000000, 0x00000000));
      expect((new Int64(-1) << 32) << 32, new Int64(0));
      expect(Int64.MIN_VALUE << 0, Int64.MIN_VALUE);
      expect(Int64.MIN_VALUE << 1, new Int64(0));
      expect((-new Int64.fromInts(8, 0)) >> 1,
          new Int64.fromInts(0xfffffffc, 0x00000000));
      expect((-new Int64.fromInts(8, 0)).shiftRightUnsigned(1),
          new Int64.fromInts(0x7ffffffc, 0x0));
    });
  });

  group("conversions", () {
    test("toSigned", () {
      expect((Int64.ONE << 44).toSigned(46), Int64.ONE << 44);
      expect((Int64.ONE << 44).toSigned(45), -(Int64.ONE << 44));
      expect((Int64.ONE << 22).toSigned(24), Int64.ONE << 22);
      expect((Int64.ONE << 22).toSigned(23), -(Int64.ONE << 22));
      expect(Int64.ONE.toSigned(2), Int64.ONE);
      expect(Int64.ONE.toSigned(1), -Int64.ONE);
      expect(Int64.MAX_VALUE.toSigned(64), Int64.MAX_VALUE);
      expect(Int64.MIN_VALUE.toSigned(64), Int64.MIN_VALUE);
      expect(Int64.MAX_VALUE.toSigned(63), -Int64.ONE);
      expect(Int64.MIN_VALUE.toSigned(63), Int64.ZERO);
      expect(() => Int64.ONE.toSigned(0), throwsRangeError);
      expect(() => Int64.ONE.toSigned(65), throwsRangeError);
    });
    test("toUnsigned", () {
      expect((Int64.ONE << 44).toUnsigned(45), Int64.ONE << 44);
      expect((Int64.ONE << 44).toUnsigned(44), Int64.ZERO);
      expect((Int64.ONE << 22).toUnsigned(23), Int64.ONE << 22);
      expect((Int64.ONE << 22).toUnsigned(22), Int64.ZERO);
      expect(Int64.ONE.toUnsigned(1), Int64.ONE);
      expect(Int64.ONE.toUnsigned(0), Int64.ZERO);
      expect(Int64.MAX_VALUE.toUnsigned(64), Int64.MAX_VALUE);
      expect(Int64.MIN_VALUE.toUnsigned(64), Int64.MIN_VALUE);
      expect(Int64.MAX_VALUE.toUnsigned(63), Int64.MAX_VALUE);
      expect(Int64.MIN_VALUE.toUnsigned(63), Int64.ZERO);
      expect(() => Int64.ONE.toUnsigned(-1), throwsRangeError);
      expect(() => Int64.ONE.toUnsigned(65), throwsRangeError);
    });
    test("toDouble", () {
      expect(new Int64(0).toDouble(), same(0.0));
      expect(new Int64(100).toDouble(), same(100.0));
      expect(new Int64(-100).toDouble(), same(-100.0));
      expect(new Int64(2147483647).toDouble(), same(2147483647.0));
      expect(new Int64(2147483648).toDouble(), same(2147483648.0));
      expect(new Int64(-2147483647).toDouble(), same(-2147483647.0));
      expect(new Int64(-2147483648).toDouble(), same(-2147483648.0));
      expect(new Int64(4503599627370495).toDouble(), same(4503599627370495.0));
      expect(new Int64(4503599627370496).toDouble(), same(4503599627370496.0));
      expect(new Int64(-4503599627370495).toDouble(),
          same(-4503599627370495.0));
      expect(new Int64(-4503599627370496).toDouble(),
          same(-4503599627370496.0));
      expect(Int64.parseInt("-10000000000000000").toDouble().toStringAsFixed(1),
          "-10000000000000000.0");
      expect(Int64.parseInt("-10000000000000001").toDouble().toStringAsFixed(1),
          "-10000000000000000.0");
      expect(Int64.parseInt("-10000000000000002").toDouble().toStringAsFixed(1),
          "-10000000000000002.0");
      expect(Int64.parseInt("-10000000000000003").toDouble().toStringAsFixed(1),
          "-10000000000000004.0");
      expect(Int64.parseInt("-10000000000000004").toDouble().toStringAsFixed(1),
          "-10000000000000004.0");
      expect(Int64.parseInt("-10000000000000005").toDouble().toStringAsFixed(1),
          "-10000000000000004.0");
      expect(Int64.parseInt("-10000000000000006").toDouble().toStringAsFixed(1),
          "-10000000000000006.0");
      expect(Int64.parseInt("-10000000000000007").toDouble().toStringAsFixed(1),
          "-10000000000000008.0");
      expect(Int64.parseInt("-10000000000000008").toDouble().toStringAsFixed(1),
          "-10000000000000008.0");
    });

    test("toInt", () {
      expect(new Int64(0).toInt(), 0);
      expect(new Int64(100).toInt(), 100);
      expect(new Int64(-100).toInt(), -100);
      expect(new Int64(2147483647).toInt(), 2147483647);
      expect(new Int64(2147483648).toInt(), 2147483648);
      expect(new Int64(-2147483647).toInt(), -2147483647);
      expect(new Int64(-2147483648).toInt(), -2147483648);
      expect(new Int64(4503599627370495).toInt(), 4503599627370495);
      expect(new Int64(4503599627370496).toInt(), 4503599627370496);
      expect(new Int64(-4503599627370495).toInt(), -4503599627370495);
      expect(new Int64(-4503599627370496).toInt(), -4503599627370496);
      expect(Int64.parseInt("-10000000000000000").toInt(),
          same(-10000000000000000));
      expect(Int64.parseInt("-10000000000000001").toInt(),
          same(-10000000000000001));
      expect(Int64.parseInt("-10000000000000002").toInt(),
          same(-10000000000000002));
      expect(Int64.parseInt("-10000000000000003").toInt(),
          same(-10000000000000003));
      expect(Int64.parseInt("-10000000000000004").toInt(),
          same(-10000000000000004));
      expect(Int64.parseInt("-10000000000000005").toInt(),
          same(-10000000000000005));
      expect(Int64.parseInt("-10000000000000006").toInt(),
          same(-10000000000000006));
      expect(Int64.parseInt("-10000000000000007").toInt(),
          same(-10000000000000007));
      expect(Int64.parseInt("-10000000000000008").toInt(),
          same(-10000000000000008));
    });

    test("toInt32", () {
      expect(new Int64(0).toInt32(), new Int32(0));
      expect(new Int64(1).toInt32(), new Int32(1));
      expect(new Int64(-1).toInt32(), new Int32(-1));
      expect(new Int64(2147483647).toInt32(), new Int32(2147483647));
      expect(new Int64(2147483648).toInt32(), new Int32(-2147483648));
      expect(new Int64(2147483649).toInt32(), new Int32(-2147483647));
      expect(new Int64(2147483650).toInt32(), new Int32(-2147483646));
      expect(new Int64(-2147483648).toInt32(), new Int32(-2147483648));
      expect(new Int64(-2147483649).toInt32(), new Int32(2147483647));
      expect(new Int64(-2147483650).toInt32(), new Int32(2147483646));
      expect(new Int64(-2147483651).toInt32(), new Int32(2147483645));
    });

    test("toBytes", () {
      expect(new Int64(0).toBytes(), [ 0, 0, 0, 0, 0, 0, 0, 0 ]);
      expect(new Int64.fromInts(0x08070605, 0x04030201).toBytes(),
          [ 1, 2, 3, 4, 5, 6, 7, 8 ]);
      expect(new Int64.fromInts(0x01020304, 0x05060708).toBytes(),
          [ 8, 7, 6, 5, 4, 3, 2, 1 ]);
      expect(new Int64(-1).toBytes(),
          [ 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff ]);
    });
  });

  test("JavaScript 53-bit integer boundary", () {
    Int64 _factorial(Int64 n) {
      if (n.isZero) {
        return new Int64(1);
      } else {
        return n * _factorial(n - new Int64(1));
      }
    }
    Int64 fact18 = _factorial(new Int64(18));
    Int64 fact17 = _factorial(new Int64(17));
    expect(fact18 ~/ fact17, new Int64(18));
  });

  test("min, max values", () {
    expect(new Int64(1) << 63, Int64.MIN_VALUE);
    expect(-(Int64.MIN_VALUE + new Int64(1)), Int64.MAX_VALUE);
  });

  group("parse", () {
    test("parseRadix10", () {
      checkInt(int x) {
        expect(Int64.parseRadix('$x', 10), new Int64(x));
      }
      checkInt(0);
      checkInt(1);
      checkInt(-1);
      checkInt(1000);
      checkInt(12345678);
      checkInt(-12345678);
      checkInt(2147483647);
      checkInt(2147483648);
      checkInt(-2147483647);
      checkInt(-2147483648);
      checkInt(4294967295);
      checkInt(4294967296);
      checkInt(-4294967295);
      checkInt(-4294967296);
      expect(() => Int64.parseRadix('xyzzy', -1), throwsArgumentError);
      expect(() => Int64.parseRadix('plugh', 10),
          throwsA(new isInstanceOf<FormatException>()));
    });

    test("parseHex", () {
      checkHex(String hexStr, int h, int l) {
        expect(Int64.parseHex(hexStr), new Int64.fromInts(h, l));
      }
      checkHex('0', 0, 0);
      checkHex('-0', 0, 0);
      checkHex('00', 0, 0);
      checkHex('01', 0, 1);
      checkHex('-01', 0xffffffff, 0xffffffff);
      checkHex('0a', 0, 10);
      checkHex('0A', 0, 10);
      checkHex('10', 0, 16);
      checkHex('3FFFFF', 0, 0x3fffff);
      checkHex('400000', 0, 0x400000);
      checkHex('FFFFFFFFFFF', 0xfff, 0xffffffff);
      checkHex('FFFFFFFFFFFFFFFE', 0xffffffff, 0xfffffffe);
      checkHex('FFFFFFFFFFFFFFFF', 0xffffffff, 0xffffffff);
    });

    test("parseRadix", () {
      check(String s, int r, String x) {
        expect(Int64.parseRadix(s, r).toString(), x);
      }
      check('ghoul', 36, '27699213');
      check('ghoul', 35, '24769346');
      // Min and max value.
      check("-9223372036854775808", 10, "-9223372036854775808");
      check("9223372036854775807", 10, "9223372036854775807");
      // Overflow during parsing.
      check("9223372036854775808", 10, "-9223372036854775808");

      expect(() => Int64.parseRadix('0', 1), throwsRangeError);
      expect(() => Int64.parseRadix('0', 37), throwsRangeError);
      expect(() => Int64.parseRadix('xyzzy', -1), throwsRangeError);
      expect(() => Int64.parseRadix('xyzzy', 10), throwsFormatException);
    });

    test("parseRadixN", () {
      check(String s, int r) {
        expect(Int64.parseRadix(s, r).toRadixString(r), s);
      }
      check("2ppp111222333", 33);  // This value & radix requires three chunks.
    });
  });

  group("string representation", () {
    test("toString", () {
      expect(new Int64(0).toString(), "0");
      expect(new Int64(1).toString(), "1");
      expect(new Int64(-1).toString(), "-1");
      expect(new Int64(-10).toString(), "-10");
      expect(Int64.MIN_VALUE.toString(), "-9223372036854775808");
      expect(Int64.MAX_VALUE.toString(), "9223372036854775807");

      int top = 922337201;
      int bottom = 967490662;
      Int64 fullnum =
          (new Int64(1000000000) * new Int64(top)) + new Int64(bottom);
      expect(fullnum.toString(), "922337201967490662");
      expect((-fullnum).toString(), "-922337201967490662");
      expect(new Int64(123456789).toString(), "123456789");
    });

    test("toHexString", () {
      Int64 deadbeef12341234 = new Int64.fromInts(0xDEADBEEF, 0x12341234);
      expect(Int64.ZERO.toHexString(), "0");
      expect(deadbeef12341234.toHexString(), "DEADBEEF12341234");
      expect(new Int64.fromInts(0x17678A7, 0xDEF01234).toHexString(),
          "17678A7DEF01234");
      expect(new Int64(123456789).toHexString(), "75BCD15");
    });

    test("toRadixString", () {
      expect(new Int64(123456789).toRadixString(5), "223101104124");
      expect(Int64.MIN_VALUE.toRadixString(2),
          "-1000000000000000000000000000000000000000000000000000000000000000");
      expect(Int64.MIN_VALUE.toRadixString(3),
          "-2021110011022210012102010021220101220222");
      expect(Int64.MIN_VALUE.toRadixString(4),
          "-20000000000000000000000000000000");
      expect(Int64.MIN_VALUE.toRadixString(5), "-1104332401304422434310311213");
      expect(Int64.MIN_VALUE.toRadixString(6), "-1540241003031030222122212");
      expect(Int64.MIN_VALUE.toRadixString(7), "-22341010611245052052301");
      expect(Int64.MIN_VALUE.toRadixString(8), "-1000000000000000000000");
      expect(Int64.MIN_VALUE.toRadixString(9), "-67404283172107811828");
      expect(Int64.MIN_VALUE.toRadixString(10), "-9223372036854775808");
      expect(Int64.MIN_VALUE.toRadixString(11), "-1728002635214590698");
      expect(Int64.MIN_VALUE.toRadixString(12), "-41a792678515120368");
      expect(Int64.MIN_VALUE.toRadixString(13), "-10b269549075433c38");
      expect(Int64.MIN_VALUE.toRadixString(14), "-4340724c6c71dc7a8");
      expect(Int64.MIN_VALUE.toRadixString(15), "-160e2ad3246366808");
      expect(Int64.MIN_VALUE.toRadixString(16), "-8000000000000000");
      expect(Int64.MAX_VALUE.toRadixString(2),
          "111111111111111111111111111111111111111111111111111111111111111");
      expect(Int64.MAX_VALUE.toRadixString(3),
          "2021110011022210012102010021220101220221");
      expect(Int64.MAX_VALUE.toRadixString(4),
          "13333333333333333333333333333333");
      expect(Int64.MAX_VALUE.toRadixString(5), "1104332401304422434310311212");
      expect(Int64.MAX_VALUE.toRadixString(6), "1540241003031030222122211");
      expect(Int64.MAX_VALUE.toRadixString(7), "22341010611245052052300");
      expect(Int64.MAX_VALUE.toRadixString(8), "777777777777777777777");
      expect(Int64.MAX_VALUE.toRadixString(9), "67404283172107811827");
      expect(Int64.MAX_VALUE.toRadixString(10), "9223372036854775807");
      expect(Int64.MAX_VALUE.toRadixString(11), "1728002635214590697");
      expect(Int64.MAX_VALUE.toRadixString(12), "41a792678515120367");
      expect(Int64.MAX_VALUE.toRadixString(13), "10b269549075433c37");
      expect(Int64.MAX_VALUE.toRadixString(14), "4340724c6c71dc7a7");
      expect(Int64.MAX_VALUE.toRadixString(15), "160e2ad3246366807");
      expect(Int64.MAX_VALUE.toRadixString(16), "7fffffffffffffff");
      expect(() => new Int64(42).toRadixString(-1), throwsArgumentError);
      expect(() => new Int64(42).toRadixString(0), throwsArgumentError);
      expect(() => new Int64(42).toRadixString(37), throwsArgumentError);
    });
  });
}
