// 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 '../lib/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 NullPointerException");
  } on NullPointerException catch (e) {
  }

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

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

  try {
    new int64.fromInt(17) < null;
    Expect.fail("x >= null should throw NullPointerException");
  } on NullPointerException 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));
}
