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

void main() {
  testAdditive();
  testBitOps();
  testComparisons();
  testConversions();
  testDiv();
  testFactorial();
  testMinMax();
  testMod();
  testMultiplicative();
  testNegate();
  testShift();
  testToHexString();
  testToString();
}

void testAdditive() {
  {
    int64 n1 = new int64.fromInt(1234);
    int64 n2 = new int64.fromInt(9876);
    Expect.equals(new int64.fromInt(11110), n1 + n2);
    Expect.equals(new int64.fromInt(-8642), n1 - n2);
  }

  {
    int64 n1 = new int64.fromInt(-1234);
    int64 n2 = new int64.fromInt(9876);
    Expect.equals(new int64.fromInt(8642), n1 + n2);
    Expect.equals(new int64.fromInt(-11110), n1 - n2);
  }

  {
    int64 n1 = new int64.fromInt(-1234);
    int64 n2 = new int64.fromInt(-9876);
    Expect.equals(new int64.fromInt(-11110), n1 + n2);
    Expect.equals(new int64.fromInt(8642), n1 - n2);
  }

  {
    int64 n1 = new int64.fromInts(0x12345678, 0xabcdabcd);
    int64 n2 = new int64.fromInts(0x77773333, 0x22224444);
    Expect.equals(new int64.fromInts(0x89ab89ab, 0xcdeff011), n1 + n2);
    Expect.equals(new int64.fromInts(0x9abd2345, 0x89ab6789), n1 - n2);
  }
}

void testBitOps() {
  {
    int64 n1 = new int64.fromInt(1234);
    int64 n2 = new int64.fromInt(9876);

    Expect.equals(new int64.fromInt(1168), n1 & n2);
    Expect.equals(new int64.fromInt(9942), n1 | n2);
    Expect.equals(new int64.fromInt(8774), n1 ^ n2);
    Expect.equals(new int64.fromInt(-1235), ~n1);
    Expect.equals(new int64.fromInt(-9877), ~n2);
  }

  {
    int64 n1 = new int64.fromInt(-1234);
    int64 n2 = new int64.fromInt(9876);
    Expect.equals(new int64.fromInt(8708), n1 & n2);
    Expect.equals(new int64.fromInt(-66), n1 | n2);
    Expect.equals(new int64.fromInt(-8774), n1 ^ n2);
    Expect.equals(new int64.fromInt(1233), ~n1);
    Expect.equals(new int64.fromInt(-9877), ~n2);
  }

  {
    int64 n1 = new int64.fromInt(0x1234) << 32;
    int64 n2 = new int64.fromInt(0x9876) << 32;
    Expect.equals(new int64.fromInt(0x1034) << 32, n1 & n2);
    Expect.equals(new int64.fromInt(0x9a76) << 32, n1 | n2);
    Expect.equals(new int64.fromInt(0x8a42) << 32, n1 ^ n2);
    Expect.equals(new int64.fromInts(0xffffedcb, 0xffffffff), ~n1);
    Expect.equals(new int64.fromInts(0xffff6789, 0xffffffff), ~n2);
  }
}

void testComparisons() {
  Expect.isTrue(new int64.fromInt(10) < new int64.fromInt(11));
  Expect.isTrue(new int64.fromInt(10) <= new int64.fromInt(11));
  Expect.isTrue(!(new int64.fromInt(10) == new int64.fromInt(11)));
  Expect.isTrue(!(new int64.fromInt(10) >= new int64.fromInt(11)));
  Expect.isTrue(!(new int64.fromInt(10) > new int64.fromInt(11)));

  Expect.isTrue(!(new int64.fromInt(10) < new int64.fromInt(10)));
  Expect.isTrue(new int64.fromInt(10) <= new int64.fromInt(10));
  Expect.isTrue(new int64.fromInt(10) == new int64.fromInt(10));
  Expect.isTrue(new int64.fromInt(10) >= new int64.fromInt(10));
  Expect.isTrue(!(new int64.fromInt(10) > new int64.fromInt(10)));

  Expect.isTrue(!(new int64.fromInt(12) < new int64.fromInt(11)));
  Expect.isTrue(!(new int64.fromInt(12) <= new int64.fromInt(11)));
  Expect.isTrue(!(new int64.fromInt(12) == new int64.fromInt(11)));
  Expect.isTrue(new int64.fromInt(12) >= new int64.fromInt(11));
  Expect.isTrue(new int64.fromInt(12) > new int64.fromInt(11));

  Expect.isTrue(new int64.fromInt(-10) > new int64.fromInt(-11));
  Expect.isTrue(new int64.fromInt(10) > new int64.fromInt(-11));
  Expect.isTrue(!(new int64.fromInt(-10) > new int64.fromInt(11)));
  Expect.isTrue(new int64.fromInt(-10) >= new int64.fromInt(-11));
  Expect.isTrue(new int64.fromInt(-10) >= new int64.fromInt(-10));
  Expect.isTrue(!(new int64.fromInt(-10) < new int64.fromInt(-11)));
  Expect.isTrue(!(new int64.fromInt(-10) <= new int64.fromInt(-11)));
  Expect.isTrue(new int64.fromInt(-10) <= new int64.fromInt(-10));
  Expect.isTrue(new int64.fromInt(-10) == new int64.fromInt(-10));
  Expect.isTrue(!(new int64.fromInt(-10) != new int64.fromInt(-10)));

  // the following three comparisons cannot be implemented by
  // subtracting the arguments, because the subtraction causes an overflow
  int64 largeNeg = new int64.fromInts(0x82341234, 0x0);
  int64 largePos = new int64.fromInts(0x12341234, 0x0);
  Expect.isTrue(largeNeg < largePos);

  Expect.isTrue(int64.MIN_VALUE < new int64.fromInt(0));
  Expect.isTrue(new int64.fromInt(0) > int64.MIN_VALUE);

  int64 largePosPlusOne = largePos + new int64.fromInt(1);

  Expect.isTrue(largePos < largePosPlusOne);
  Expect.isTrue(largePos <= largePosPlusOne);
  Expect.isTrue(!(largePos == largePosPlusOne));
  Expect.isTrue(!(largePos >= largePosPlusOne));
  Expect.isTrue(!(largePos > largePosPlusOne));

  Expect.isTrue(!(largePos < largePos));
  Expect.isTrue(largePos <= largePos);
  Expect.isTrue(largePos == largePos);
  Expect.isTrue(largePos >= largePos);
  Expect.isTrue(!(largePos > largePos));

  Expect.isTrue(!(largePosPlusOne < largePos));
  Expect.isTrue(!(largePosPlusOne <= largePos));
  Expect.isTrue(!(largePosPlusOne == largePos));
  Expect.isTrue(largePosPlusOne >= largePos);
  Expect.isTrue(largePosPlusOne > largePos);

  try {
    new int64.fromInt(17) < null;
    Expect.fail("x < null should throw ArgumentError");
  } on ArgumentError catch (e) {
  }

  try {
    new int64.fromInt(17) <= null;
    Expect.fail("x <= null should throw ArgumentError");
  } on ArgumentError catch (e) {
  }

  try {
    new int64.fromInt(17) > null;
    Expect.fail("x > null should throw ArgumentError");
  } on ArgumentError catch (e) {
  }

  try {
    new int64.fromInt(17) < null;
    Expect.fail("x >= null should throw ArgumentError");
  } on ArgumentError catch (e) {
  }

  Expect.isFalse(new int64.fromInt(17) == null);
}

void testConversions() {
  Expect.equals(0, new int64.fromInt(0).toInt());
  Expect.equals(100, new int64.fromInt(100).toInt());
  Expect.equals(-100, new int64.fromInt(-100).toInt());
  Expect.equals(2147483647, new int64.fromInt(2147483647).toInt());
  Expect.equals(2147483648, new int64.fromInt(2147483648).toInt());
  Expect.equals(-2147483647, new int64.fromInt(-2147483647).toInt());
  Expect.equals(-2147483648, new int64.fromInt(-2147483648).toInt());
  Expect.equals(4503599627370495, new int64.fromInt(4503599627370495).toInt());
  Expect.equals(4503599627370496, new int64.fromInt(4503599627370496).toInt());
  Expect.equals(-4503599627370495,
      new int64.fromInt(-4503599627370495).toInt());
  Expect.equals(-4503599627370496,
      new int64.fromInt(-4503599627370496).toInt());

  Expect.equals(new int32.fromInt(0), new int64.fromInt(0).toInt32());
  Expect.equals(new int32.fromInt(1), new int64.fromInt(1).toInt32());
  Expect.equals(new int32.fromInt(-1), new int64.fromInt(-1).toInt32());
  Expect.equals(new int32.fromInt(2147483647),
    new int64.fromInt(2147483647).toInt32());
  Expect.equals(new int32.fromInt(-2147483648),
      new int64.fromInt(2147483648).toInt32());
  Expect.equals(new int32.fromInt(-2147483647),
      new int64.fromInt(2147483649).toInt32());
  Expect.equals(new int32.fromInt(-2147483646),
      new int64.fromInt(2147483650).toInt32());

  Expect.equals(new int32.fromInt(-2147483648),
      new int64.fromInt(-2147483648).toInt32());
  Expect.equals(new int32.fromInt(2147483647),
      new int64.fromInt(-2147483649).toInt32());
  Expect.equals(new int32.fromInt(2147483646),
      new int64.fromInt(-2147483650).toInt32());
  Expect.equals(new int32.fromInt(2147483645),
      new int64.fromInt(-2147483651).toInt32());
}

void testDiv() {
  int64 deadBeef = new int64.fromInts(0xDEADBEEF, 0xDEADBEEF);
  int64 ten = new int64.fromInt(10);
  Expect.equals(new int64.fromInts(0xfcaaf97e, 0x63115fe5), deadBeef ~/ ten);
  Expect.equals(int64.ZERO, int64.ONE ~/ int64.TWO);
  Expect.equals(new int64.fromInts(0x3fffffff, 0xffffffff),
    int64.MAX_VALUE ~/ int64.TWO);

  Expect.equals(int64.ZERO, int64.ZERO ~/ new int64.fromInt(1000));
  Expect.equals(int64.ONE, int64.MIN_VALUE ~/ int64.MIN_VALUE);
  Expect.equals(int64.ZERO, new int64.fromInt(1000) ~/ int64.MIN_VALUE);

  Expect.equals("-1125899906842624",
    (int64.MIN_VALUE ~/ new int64.fromInt(8192)).toString());
  Expect.equals("-1125762484664320",
    (int64.MIN_VALUE ~/ new int64.fromInt(8193)).toString());
  Expect.equals(int64.ZERO,
    new int64.fromInt(-1000) ~/ new int64.fromInt(8192));
  Expect.equals(int64.ZERO,
    new int64.fromInt(-1000) ~/ new int64.fromInt(8193));
  Expect.equals(new int64.fromInt(-122070),
    new int64.fromInt(-1000000000) ~/ new int64.fromInt(8192));
  Expect.equals(new int64.fromInt(-122055),
    new int64.fromInt(-1000000000) ~/ new int64.fromInt(8193));
  Expect.equals(new int64.fromInt(122070),
    new int64.fromInt(1000000000) ~/ new int64.fromInt(8192));
  Expect.equals(new int64.fromInt(122055),
    new int64.fromInt(1000000000) ~/ new int64.fromInt(8193));

  Expect.equals(new int64.fromInts(0x1fffff, 0xffffffff),
    int64.MAX_VALUE ~/ new int64.fromInts(0x00000000, 0x00000400));
  Expect.equals(new int64.fromInts(0x1fff, 0xffffffff),
    int64.MAX_VALUE ~/ new int64.fromInts(0x00000000, 0x00040000));
  Expect.equals(new int64.fromInts(0x1f, 0xffffffff),
    int64.MAX_VALUE ~/ new int64.fromInts(0x00000000, 0x04000000));
  Expect.equals(new int64.fromInt(536870911),
    int64.MAX_VALUE ~/ new int64.fromInts(0x00000004, 0x00000000));
  Expect.equals(new int64.fromInt(2097151),
    int64.MAX_VALUE ~/ new int64.fromInts(0x00000400, 0x00000000));
  Expect.equals(new int64.fromInt(8191),
    int64.MAX_VALUE ~/ new int64.fromInts(0x00040000, 0x00000000));
  Expect.equals(new int64.fromInt(31),
    int64.MAX_VALUE ~/ new int64.fromInts(0x04000000, 0x00000000));

  Expect.equals(new int64.fromInts(0x2AAAAA, 0xAAAAAAAA),
      int64.MAX_VALUE ~/ new int64.fromInts(0x00000000, 0x00000300));
  Expect.equals(new int64.fromInts(0x2, 0xAAAAAAAA),
      int64.MAX_VALUE ~/ new int64.fromInts(0x00000000, 0x30000000));
  Expect.equals(new int64.fromInt(0x2AA),
      int64.MAX_VALUE ~/ new int64.fromInts(0x00300000, 0x00000000));

  Expect.equals(new int64.fromInts(0x708, 0x002E9501),
      int64.MAX_VALUE ~/ new int64.fromInt(0x123456));
  Expect.equals(new int64.fromInt(0x3BDA9),
      int64.MAX_VALUE % new int64.fromInt(0x123456));
}

void testFactorial() {

  int64 _fact(int64 n) {
    if (n.isZero) {
      return new int64.fromInt(1);
    } else {
      return n * _fact(n - new int64.fromInt(1));
    }
  }

  int64 fact18 = _fact(new int64.fromInt(18));
  int64 fact17 = _fact(new int64.fromInt(17));
  Expect.equals(new int64.fromInt(18), fact18 ~/ fact17);
}

void testMinMax() {
  Expect.equals(int64.MIN_VALUE, new int64.fromInt(1) << 63);
  Expect.equals(int64.MAX_VALUE, -(int64.MIN_VALUE + new int64.fromInt(1)));
}

// Define % as Euclidean mod, with positive result for all arguments
void testMod() {
  Expect.equals(new int64.fromInt(0), int64.ZERO % new int64.fromInt(1000));
  Expect.equals(new int64.fromInt(0), int64.MIN_VALUE % int64.MIN_VALUE);
  Expect.equals(new int64.fromInt(1000),
    new int64.fromInt(1000) % int64.MIN_VALUE);
  Expect.equals(new int64.fromInt(0),
    int64.MIN_VALUE % new int64.fromInt(8192));
  Expect.equals(new int64.fromInt(6145),
    int64.MIN_VALUE % new int64.fromInt(8193));

  Expect.equals(new int64.fromInt(7192),
    new int64.fromInt(-1000) % new int64.fromInt(8192));
  Expect.equals(new int64.fromInt(7193),
    new int64.fromInt(-1000) % new int64.fromInt(8193));
  Expect.equals(new int64.fromInt(5632),
    new int64.fromInt(-1000000000) % new int64.fromInt(8192));
  Expect.equals(new int64.fromInt(4808),
    new int64.fromInt(-1000000000) % new int64.fromInt(8193));
  Expect.equals(new int64.fromInt(2560),
    new int64.fromInt(1000000000) % new int64.fromInt(8192));
  Expect.equals(new int64.fromInt(3385),
    new int64.fromInt(1000000000) % new int64.fromInt(8193));

  Expect.equals(new int64.fromInts(0x0, 0x3ff),
    int64.MAX_VALUE % new int64.fromInts(0x00000000, 0x00000400));
  Expect.equals(new int64.fromInts(0x0, 0x3ffff),
    int64.MAX_VALUE % new int64.fromInts(0x00000000, 0x00040000));
  Expect.equals(new int64.fromInts(0x0, 0x3ffffff),
    int64.MAX_VALUE % new int64.fromInts(0x00000000, 0x04000000));
  Expect.equals(new int64.fromInts(0x3, 0xffffffff),
    int64.MAX_VALUE % new int64.fromInts(0x00000004, 0x00000000));
  Expect.equals(new int64.fromInts(0x3ff, 0xffffffff),
    int64.MAX_VALUE % new int64.fromInts(0x00000400, 0x00000000));
  Expect.equals(new int64.fromInts(0x3ffff, 0xffffffff),
    int64.MAX_VALUE % new int64.fromInts(0x00040000, 0x00000000));
  Expect.equals(new int64.fromInts(0x3ffffff, 0xffffffff),
    int64.MAX_VALUE % new int64.fromInts(0x04000000, 0x00000000));

  Expect.equals(new int64.fromInt(0x12345678.remainder(0x22)),
      new int64.fromInt(0x12345678).remainder(new int64.fromInt(0x22)));
  Expect.equals(new int64.fromInt(0x12345678.remainder(-0x22)),
      new int64.fromInt(0x12345678).remainder(new int64.fromInt(-0x22)));
  Expect.equals(new int64.fromInt(-0x12345678.remainder(-0x22)),
      new int64.fromInt(-0x12345678).remainder(new int64.fromInt(-0x22)));
  Expect.equals(new int64.fromInt(-0x12345678.remainder(0x22)),
      new int64.fromInt(-0x12345678).remainder(new int64.fromInt(0x22)));
  Expect.equals(new int64.fromInt(0x12345678.remainder(0x22)),
      new int32.fromInt(0x12345678).remainder(new int64.fromInt(0x22)));
}

void testMultiplicative() {
  Expect.equals(new int64.fromInt(3333),
    new int64.fromInt(1111) * new int64.fromInt(3));
  Expect.equals(new int64.fromInt(-3333),
    new int64.fromInt(1111) * new int64.fromInt(-3));
  Expect.equals(new int64.fromInt(-3333),
    new int64.fromInt(-1111) * new int64.fromInt(3));
  Expect.equals(new int64.fromInt(3333),
    new int64.fromInt(-1111) * new int64.fromInt(-3));
  Expect.equals(new int64.fromInt(0),
    new int64.fromInt(100) * new int64.fromInt(0));

  Expect.equals(new int64.fromInts(0x7ff63f7c, 0x1df4d840),
      new int64.fromInts(0x12345678, 0x12345678) *
      new int64.fromInts(0x1234, 0x12345678));
  Expect.equals(new int64.fromInts(0x7ff63f7c, 0x1df4d840),
      new int64.fromInts(0xf2345678, 0x12345678) *
      new int64.fromInts(0x1234, 0x12345678));
  Expect.equals(new int64.fromInts(0x297e3f7c, 0x1df4d840),
      new int64.fromInts(0xf2345678, 0x12345678) *
      new int64.fromInts(0xffff1234, 0x12345678));

  Expect.equals(new int64.fromInt(0), int64.MIN_VALUE * new int64.fromInt(2));
  Expect.equals(int64.MIN_VALUE, int64.MIN_VALUE * new int64.fromInt(1));
  Expect.equals(int64.MIN_VALUE, int64.MIN_VALUE * new int64.fromInt(-1));

  Expect.equals(new int64.fromInt(1), new int64.fromInt(5) ~/
      new int64.fromInt(5));
  Expect.equals(new int64.fromInt(333), new int64.fromInt(1000) ~/
      new int64.fromInt(3));
  Expect.equals(new int64.fromInt(-333), new int64.fromInt(1000) ~/
      new int64.fromInt(-3));
  Expect.equals(new int64.fromInt(-333), new int64.fromInt(-1000) ~/
      new int64.fromInt(3));
  Expect.equals(new int64.fromInt(333), new int64.fromInt(-1000) ~/
      new int64.fromInt(-3));
  Expect.equals(new int64.fromInt(0), new int64.fromInt(3) ~/
      new int64.fromInt(1000));
  Expect.equals(new int64.fromInts(0x1003d0, 0xe84f5ae8), new int64.fromInts(
      0x12345678, 0x12345678) ~/ new int64.fromInts(0x0, 0x123));
  Expect.equals(new int64.fromInts(0x0, 0x10003), new int64.fromInts(
      0x12345678, 0x12345678) ~/ new int64.fromInts(0x1234, 0x12345678));
  Expect.equals(new int64.fromInts(0xffffffff, 0xffff3dfe),
      new int64.fromInts(0xf2345678, 0x12345678) ~/
      new int64.fromInts(0x1234, 0x12345678));
  Expect.equals(new int64.fromInts(0x0, 0xeda), new int64.fromInts(0xf2345678,
      0x12345678) ~/ new int64.fromInts(0xffff1234, 0x12345678));

  try {
    new int64.fromInt(1) ~/ new int64.fromInt(0);
    Expect.fail("Expected an IntegerDivisionByZeroException");
  } on IntegerDivisionByZeroException catch (e) {
  }

  Expect.equals(new int64.fromInts(0xc0000000, 0x00000000),
      int64.MIN_VALUE ~/ new int64.fromInt(2));
  Expect.equals(int64.MIN_VALUE, int64.MIN_VALUE ~/
      new int64.fromInt(1));
  Expect.equals(int64.MIN_VALUE, int64.MIN_VALUE ~/
      new int64.fromInt(-1));
}

void testNegate() {
  Expect.equals(new int64.fromInt(-1), -new int64.fromInt(1));
  Expect.equals(new int64.fromInt(1), -new int64.fromInt(-1));
  Expect.equals(int64.MIN_VALUE, -int64.MIN_VALUE);
}

void testShift() {
  Expect.equals("-1125899906842624", (int64.MIN_VALUE >> 13).toString());
  Expect.equals(new int64.fromInts(0xd048d115, 0x9d159c00),
    new int64.fromInts(0x12341234, 0x45674567) << 10);
  Expect.equals(new int64.fromInts(0x48d04, 0x8d1159d1),
    new int64.fromInts(0x12341234, 0x45674567) >> 10);
  Expect.equals(new int64.fromInts(0x48d04, 0x8d1159d1),
    new int64.fromInts(0x12341234, 0x45674567).shiftRightUnsigned(10));
  Expect.equals(new int64.fromInts(0xd048d115, 0x9d159c00),
    new int64.fromInts(0x92341234, 0x45674567) << 10);
  Expect.equals(new int64.fromInts(0xffe48d04, 0x8d1159d1),
    new int64.fromInts(0x92341234, 0x45674567) >> 10);
  Expect.equals(new int64.fromInt(67108863),
    new int64.fromInts(0xFFFFFFF, 0xFFFFFFFF) >> 34);
  Expect.equals(new int64.fromInts(0x248d04, 0x8d1159d1),
    new int64.fromInts(0x92341234, 0x45674567).shiftRightUnsigned(10));

  for (int n = 0; n <= 66; n++) {
    Expect.equals(new int64.fromInt(-1), new int64.fromInt(-1) >> n);
  }

  Expect.equals(new int64.fromInt(-32), new int64.fromInt(-1) << 5);
  Expect.equals(new int64.fromInt(-1), new int64.fromInt(-1) << 0);
  Expect.equals(-new int64.fromInts(0x40000000, 0x00000000),
    (new int64.fromInt(1) << 63) >> 1);
  Expect.equals(new int64.fromInt(0), (new int64.fromInt(-1) << 32) << 32);
  Expect.equals(int64.MIN_VALUE, int64.MIN_VALUE << 0);
  Expect.equals(new int64.fromInt(0), int64.MIN_VALUE << 1);
  Expect.equals(new int64.fromInts(0xfffffffc, 0x00000000),
    (-new int64.fromInts(8, 0)) >> 1);
  Expect.equals(new int64.fromInts(0x7ffffffc, 0x0),
    (-new int64.fromInts(8, 0)).shiftRightUnsigned(1));

  Expect.equals(new int64.fromInts(0x00723456, 0x789abcde),
      new int64.fromInts(0x72345678, 0x9abcdef0) >> 8);
  Expect.equals(new int64.fromInts(0x00007234, 0x56789abc),
      new int64.fromInts(0x72345678, 0x9abcdef0) >> 16);
  Expect.equals(new int64.fromInts(0x00000072, 0x3456789a),
      new int64.fromInts(0x72345678, 0x9abcdef0) >> 24);
  Expect.equals(new int64.fromInts(0x00000007, 0x23456789),
      new int64.fromInts(0x72345678, 0x9abcdef0) >> 28);
  Expect.equals(new int64.fromInts(0x00000000, 0x72345678),
      new int64.fromInts(0x72345678, 0x9abcdef0) >> 32);
  Expect.equals(new int64.fromInts(0x00000000, 0x07234567),
      new int64.fromInts(0x72345678, 0x9abcdef0) >> 36);
  Expect.equals(new int64.fromInts(0x00000000, 0x00723456),
      new int64.fromInts(0x72345678, 0x9abcdef0) >> 40);
  Expect.equals(new int64.fromInts(0x00000000, 0x00072345),
      new int64.fromInts(0x72345678, 0x9abcde00) >> 44);
  Expect.equals(new int64.fromInts(0x00000000, 0x00007234),
      new int64.fromInts(0x72345678, 0x9abcdef0) >> 48);

  Expect.equals(new int64.fromInts(0x00723456, 0x789abcde),
      new int64.fromInts(0x72345678, 0x9abcdef0).shiftRightUnsigned(8));
  Expect.equals(new int64.fromInts(0x00007234, 0x56789abc),
      new int64.fromInts(0x72345678, 0x9abcdef0).shiftRightUnsigned(16));
  Expect.equals(new int64.fromInts(0x00000072, 0x3456789a),
      new int64.fromInts(0x72345678, 0x9abcdef0).shiftRightUnsigned(24));
  Expect.equals(new int64.fromInts(0x00000007, 0x23456789),
      new int64.fromInts(0x72345678, 0x9abcdef0).shiftRightUnsigned(28));
  Expect.equals(new int64.fromInts(0x00000000, 0x72345678),
      new int64.fromInts(0x72345678, 0x9abcdef0).shiftRightUnsigned(32));
  Expect.equals(new int64.fromInts(0x00000000, 0x07234567),
      new int64.fromInts(0x72345678, 0x9abcdef0).shiftRightUnsigned(36));
  Expect.equals(new int64.fromInts(0x00000000, 0x00723456),
      new int64.fromInts(0x72345678, 0x9abcdef0).shiftRightUnsigned(40));
  Expect.equals(new int64.fromInts(0x00000000, 0x00072345),
      new int64.fromInts(0x72345678, 0x9abcde00).shiftRightUnsigned(44));
  Expect.equals(new int64.fromInts(0x00000000, 0x00007234),
      new int64.fromInts(0x72345678, 0x9abcdef0).shiftRightUnsigned(48));

  Expect.equals(new int64.fromInts(0xff923456, 0x789abcde),
      new int64.fromInts(0x92345678, 0x9abcdef0) >> 8);
  Expect.equals(new int64.fromInts(0xffff9234, 0x56789abc),
      new int64.fromInts(0x92345678, 0x9abcdef0) >> 16);

  Expect.equals(new int64.fromInts(0xffffff92, 0x3456789a),
      new int64.fromInts(0x92345678, 0x9abcdef0) >> 24);
  Expect.equals(new int64.fromInts(0xfffffff9, 0x23456789),
      new int64.fromInts(0x92345678, 0x9abcdef0) >> 28);
  Expect.equals(new int64.fromInts(0xffffffff, 0x92345678),
      new int64.fromInts(0x92345678, 0x9abcdef0) >> 32);
  Expect.equals(new int64.fromInts(0xffffffff, 0xf9234567),
      new int64.fromInts(0x92345678, 0x9abcdef0) >> 36);
  Expect.equals(new int64.fromInts(0xffffffff, 0xff923456),
      new int64.fromInts(0x92345678, 0x9abcdef0) >> 40);
  Expect.equals(new int64.fromInts(0xffffffff, 0xfff92345),
      new int64.fromInts(0x92345678, 0x9abcdef0) >> 44);
  Expect.equals(new int64.fromInts(0xffffffff, 0xffff9234),
      new int64.fromInts(0x92345678, 0x9abcdef0) >> 48);

  Expect.equals(new int64.fromInts(0x00923456, 0x789abcde),
      new int64.fromInts(0x92345678, 0x9abcdef0).shiftRightUnsigned(8));
  Expect.equals(new int64.fromInts(0x00009234, 0x56789abc),
      new int64.fromInts(0x92345678, 0x9abcdef0).shiftRightUnsigned(16));
  Expect.equals(new int64.fromInts(0x00000092, 0x3456789a),
      new int64.fromInts(0x92345678, 0x9abcdef0).shiftRightUnsigned(24));
  Expect.equals(new int64.fromInts(0x00000009, 0x23456789),
      new int64.fromInts(0x92345678, 0x9abcdef0).shiftRightUnsigned(28));
  Expect.equals(new int64.fromInts(0x00000000, 0x92345678),
      new int64.fromInts(0x92345678, 0x9abcdef0).shiftRightUnsigned(32));
  Expect.equals(new int64.fromInts(0x00000000, 0x09234567),
      new int64.fromInts(0x92345678, 0x9abcdef0).shiftRightUnsigned(36));
  Expect.equals(new int64.fromInts(0x00000000, 0x00923456),
      new int64.fromInts(0x92345678, 0x9abcdef0).shiftRightUnsigned(40));
  Expect.equals(new int64.fromInts(0x00000000, 0x00092345),
      new int64.fromInts(0x92345678, 0x9abcdef0).shiftRightUnsigned(44));
  Expect.equals(new int64.fromInts(0x00000000, 0x00009234),
      new int64.fromInts(0x92345678, 0x9abcdef0).shiftRightUnsigned(48));

  try {
    new int64.fromInt(17) >> -1;
    Expect.fail("x >> -1 should throw ArgumentError");
  } on ArgumentError catch (e) {
  }

  try {
    new int64.fromInt(17) << -1;
    Expect.fail("x >> -1 should throw ArgumentError");
  } on ArgumentError catch (e) {
  }

  try {
    new int64.fromInt(17).shiftRightUnsigned(-1);
    Expect.fail("x >> -1 should throw ArgumentError");
  } on ArgumentError catch (e) {
  }

}

void testToHexString() {
  int64 deadbeef12341234 = new int64.fromInts(0xDEADBEEF, 0x12341234);
  Expect.equals("0", int64.ZERO.toHexString());
  Expect.equals("DEADBEEF12341234", deadbeef12341234.toHexString());
}

void testToString() {
  Expect.equals("0", new int64.fromInt(0).toString());
  Expect.equals("1", new int64.fromInt(1).toString());
  Expect.equals("-1", new int64.fromInt(-1).toString());
  Expect.equals("-10", new int64.fromInt(-10).toString());
  Expect.equals("-9223372036854775808", int64.MIN_VALUE.toString());
  Expect.equals("9223372036854775807", int64.MAX_VALUE.toString());

  int top = 922337201;
  int bottom = 967490662;
  int64 fullnum = (new int64.fromInt(1000000000) * new int64.fromInt(top)) +
      new int64.fromInt(bottom);

  Expect.equals("922337201967490662", fullnum.toString());
  Expect.equals("-922337201967490662", (-fullnum).toString());

  Expect.equals("17678A7DEF01234",
      new int64.fromInts(0x17678A7, 0xDEF01234).toHexString());

  Expect.equals("123456789", new int64.fromInt(123456789).toString());
  Expect.equals("75BCD15", new int64.fromInt(123456789).toHexString());
  Expect.equals("223101104124", new int64.fromInt(123456789).toRadixString(5));

  Expect.equals(
        "-1000000000000000000000000000000000000000000000000000000000000000",
      int64.MIN_VALUE.toRadixString(2));
  Expect.equals("-2021110011022210012102010021220101220222",
      int64.MIN_VALUE.toRadixString(3));
  Expect.equals("-20000000000000000000000000000000",
      int64.MIN_VALUE.toRadixString(4));
  Expect.equals("-1104332401304422434310311213",
      int64.MIN_VALUE.toRadixString(5));
  Expect.equals("-1540241003031030222122212", int64.MIN_VALUE.toRadixString(6));
  Expect.equals("-22341010611245052052301", int64.MIN_VALUE.toRadixString(7));
  Expect.equals("-1000000000000000000000", int64.MIN_VALUE.toRadixString(8));
  Expect.equals("-67404283172107811828", int64.MIN_VALUE.toRadixString(9));
  Expect.equals("-9223372036854775808", int64.MIN_VALUE.toRadixString(10));
  Expect.equals("-1728002635214590698", int64.MIN_VALUE.toRadixString(11));
  Expect.equals("-41A792678515120368", int64.MIN_VALUE.toRadixString(12));
  Expect.equals("-10B269549075433C38", int64.MIN_VALUE.toRadixString(13));
  Expect.equals("-4340724C6C71DC7A8", int64.MIN_VALUE.toRadixString(14));
  Expect.equals("-160E2AD3246366808", int64.MIN_VALUE.toRadixString(15));
  Expect.equals("-8000000000000000", int64.MIN_VALUE.toRadixString(16));

  Expect.equals(
        "111111111111111111111111111111111111111111111111111111111111111",
      int64.MAX_VALUE.toRadixString(2));
  Expect.equals("2021110011022210012102010021220101220221",
      int64.MAX_VALUE.toRadixString(3));
  Expect.equals("13333333333333333333333333333333",
      int64.MAX_VALUE.toRadixString(4));
  Expect.equals("1104332401304422434310311212",
      int64.MAX_VALUE.toRadixString(5));
  Expect.equals("1540241003031030222122211", int64.MAX_VALUE.toRadixString(6));
  Expect.equals("22341010611245052052300", int64.MAX_VALUE.toRadixString(7));
  Expect.equals("777777777777777777777", int64.MAX_VALUE.toRadixString(8));
  Expect.equals("67404283172107811827", int64.MAX_VALUE.toRadixString(9));
  Expect.equals("9223372036854775807", int64.MAX_VALUE.toRadixString(10));
  Expect.equals("1728002635214590697", int64.MAX_VALUE.toRadixString(11));
  Expect.equals("41A792678515120367", int64.MAX_VALUE.toRadixString(12));
  Expect.equals("10B269549075433C37", int64.MAX_VALUE.toRadixString(13));
  Expect.equals("4340724C6C71DC7A7", int64.MAX_VALUE.toRadixString(14));
  Expect.equals("160E2AD3246366807", int64.MAX_VALUE.toRadixString(15));
  Expect.equals("7FFFFFFFFFFFFFFF", int64.MAX_VALUE.toRadixString(16));
}
