// 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.

// We permit local variable types in this test because they statically 'assert'
// that the operations have an expected type.
//
// ignore_for_file: omit_local_variable_types

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

void main() {
  group('fromBytes', () {
    test('fromBytes', () {
      void checkBytes(List<int> bytes, int h, int l) {
        expect(Int64.fromBytes(bytes), 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', () {
      void checkBytes(List<int> bytes, int h, int l) {
        expect(Int64.fromBytesBigEndian(bytes), 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);
    });
  });

  void argumentErrorTest(
    Object Function(Int64, Object) op, [
    Int64 receiver = Int64.ONE,
  ]) {
    expect(
      () => op(receiver, 'foo'),
      throwsA(
        isA<ArgumentError>()
            .having((p0) => p0.toString(), 'toString', contains('"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(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(Int64(2).bitLength, 2);
      expect(Int64.MAX_VALUE.bitLength, 63);
      expect(Int64.MIN_VALUE.bitLength, 63);
    });
  });

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

  group('leading/trailing zeros', () {
    test('numberOfLeadingZeros', () {
      void checkZeros(Int64 value, int zeros) {
        expect(value.numberOfLeadingZeros(), zeros);
      }

      checkZeros(Int64(0), 64);
      checkZeros(Int64(1), 63);
      checkZeros(Int64.fromInts(0x00000000, 0x003fffff), 42);
      checkZeros(Int64.fromInts(0x00000000, 0x00400000), 41);
      checkZeros(Int64.fromInts(0x00000fff, 0xffffffff), 20);
      checkZeros(Int64.fromInts(0x00001000, 0x00000000), 19);
      checkZeros(Int64.fromInts(0x7fffffff, 0xffffffff), 1);
      checkZeros(Int64(-1), 0);
    });

    test('numberOfTrailingZeros', () {
      void checkZeros(Int64 value, int zeros) {
        expect(value.numberOfTrailingZeros(), zeros);
      }

      checkZeros(Int64(-1), 0);
      checkZeros(Int64(1), 0);
      checkZeros(Int64(2), 1);
      checkZeros(Int64.fromInts(0x00000000, 0x00200000), 21);
      checkZeros(Int64.fromInts(0x00000000, 0x00400000), 22);
      checkZeros(Int64.fromInts(0x00000800, 0x00000000), 43);
      checkZeros(Int64.fromInts(0x00001000, 0x00000000), 44);
      checkZeros(Int64.fromInts(0x80000000, 0x00000000), 63);
      checkZeros(Int64(0), 64);
    });
  });

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

    test('<', () {
      expect(Int64(10) < Int64(11), true);
      expect(Int64(10) < Int64(10), false);
      expect(Int64(10) < Int64(9), false);
      expect(Int64(10) < Int32(11), true);
      expect(Int64(10) < Int32(10), false);
      expect(Int64(10) < Int32(9), false);
      expect(Int64(-10) < 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(Int64(10) <= Int64(11), true);
      expect(Int64(10) <= Int64(10), true);
      expect(Int64(10) <= Int64(9), false);
      expect(Int64(10) <= Int32(11), true);
      expect(Int64(10) <= Int32(10), true);
      expect(Int64(10) <= Int64(9), false);
      expect(Int64(-10) <= Int64(-11), false);
      expect(Int64(-10) <= 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(Int64(0), equals(Int64(0)));
      expect(Int64(0), isNot(equals(Int64(1))));
      expect(Int64(0), equals(Int32(0)));
      expect(Int64(0), isNot(equals(Int32(1))));
      expect(Int64(0) == 0, isTrue); // ignore: unrelated_type_equality_checks
      expect(Int64(0), isNot(equals(1)));
      expect(Int64(10), isNot(equals(Int64(11))));
      expect(Int64(10), equals(Int64(10)));
      expect(Int64(10), isNot(equals(Int64(9))));
      expect(Int64(10), isNot(equals(Int32(11))));
      expect(Int64(10), equals(Int32(10)));
      expect(Int64(10), isNot(equals(Int32(9))));
      expect(Int64(10), isNot(equals(11)));
      expect(Int64(10) == 10, isTrue); // ignore: unrelated_type_equality_checks
      expect(Int64(10), isNot(equals(9)));
      expect(Int64(-10), equals(Int64(-10)));
      expect(Int64(-10) != Int64(-10), false);
      expect(
          Int64(-10) == -10, isTrue); // ignore: unrelated_type_equality_checks
      expect(Int64(-10), isNot(equals(-9)));
      expect(largePos, equals(largePos));
      expect(largePos, isNot(equals(largePosPlusOne)));
      expect(largePosPlusOne, isNot(equals(largePos)));
      expect(Int64.MIN_VALUE, isNot(equals(Int64.MAX_VALUE)));
      expect(Int64(17), isNot(equals(Object())));
      expect(Int64(17), isNot(equals(null)));
    });

    test('>=', () {
      expect(Int64(10) >= Int64(11), false);
      expect(Int64(10) >= Int64(10), true);
      expect(Int64(10) >= Int64(9), true);
      expect(Int64(10) >= Int32(11), false);
      expect(Int64(10) >= Int32(10), true);
      expect(Int64(10) >= Int32(9), true);
      expect(Int64(-10) >= Int64(-11), true);
      expect(Int64(-10) >= 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(Int64(10) > Int64(11), false);
      expect(Int64(10) > Int64(10), false);
      expect(Int64(10) > Int64(9), true);
      expect(Int64(10) > Int32(11), false);
      expect(Int64(10) > Int32(10), false);
      expect(Int64(10) > Int32(9), true);
      expect(Int64(-10) > Int64(-11), true);
      expect(Int64(10) > Int64(-11), true);
      expect(Int64(-10) > 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 = Int64(1234);
    Int64 n2 = Int64(9876);
    Int64 n3 = Int64(-1234);
    Int64 n4 = Int64(0x1234) << 32;
    Int64 n5 = Int64(0x9876) << 32;

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

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

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

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

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

  group('bitshift operators', () {
    test('<<', () {
      expect(Int64.fromInts(0x12341234, 0x45674567) << 10,
          Int64.fromInts(0xd048d115, 0x9d159c00));
      expect(Int64.fromInts(0x92341234, 0x45674567) << 10,
          Int64.fromInts(0xd048d115, 0x9d159c00));
      expect(Int64(-1) << 5, Int64(-32));
      expect(Int64(-1) << 0, Int64(-1));
      expect(Int64(42) << 64, Int64.ZERO);
      expect(Int64(42) << 65, Int64.ZERO);
      expect(() => Int64(17) << -1, throwsArgumentError);
    });

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

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

    test('overflow', () {
      expect((Int64(1) << 63) >> 1, -Int64.fromInts(0x40000000, 0x00000000));
      expect((Int64(-1) << 32) << 32, Int64(0));
      expect(Int64.MIN_VALUE << 0, Int64.MIN_VALUE);
      expect(Int64.MIN_VALUE << 1, Int64(0));
      expect(
          (-Int64.fromInts(8, 0)) >> 1, Int64.fromInts(0xfffffffc, 0x00000000));
      expect((-Int64.fromInts(8, 0)).shiftRightUnsigned(1),
          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(Int64(0).toDouble(), same(0.0));
      expect(Int64(100).toDouble(), same(100.0));
      expect(Int64(-100).toDouble(), same(-100.0));
      expect(Int64(2147483647).toDouble(), same(2147483647.0));
      expect(Int64(2147483648).toDouble(), same(2147483648.0));
      expect(Int64(-2147483647).toDouble(), same(-2147483647.0));
      expect(Int64(-2147483648).toDouble(), same(-2147483648.0));
      expect(Int64(4503599627370495).toDouble(), same(4503599627370495.0));
      expect(Int64(4503599627370496).toDouble(), same(4503599627370496.0));
      expect(Int64(-4503599627370495).toDouble(), same(-4503599627370495.0));
      expect(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(Int64(0).toInt(), 0);
      expect(Int64(100).toInt(), 100);
      expect(Int64(-100).toInt(), -100);
      expect(Int64(2147483647).toInt(), 2147483647);
      expect(Int64(2147483648).toInt(), 2147483648);
      expect(Int64(-2147483647).toInt(), -2147483647);
      expect(Int64(-2147483648).toInt(), -2147483648);
      expect(Int64(4503599627370495).toInt(), 4503599627370495);
      expect(Int64(4503599627370496).toInt(), 4503599627370496);
      expect(Int64(-4503599627370495).toInt(), -4503599627370495);
      expect(Int64(-4503599627370496).toInt(), -4503599627370496);
    });

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

    test('toBytes', () {
      expect(Int64(0).toBytes(), [0, 0, 0, 0, 0, 0, 0, 0]);
      expect(Int64.fromInts(0x08070605, 0x04030201).toBytes(),
          [1, 2, 3, 4, 5, 6, 7, 8]);
      expect(Int64.fromInts(0x01020304, 0x05060708).toBytes(),
          [8, 7, 6, 5, 4, 3, 2, 1]);
      expect(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 Int64(1);
      } else {
        return n * factorial(n - Int64(1));
      }
    }

    Int64 fact18 = factorial(Int64(18));
    Int64 fact17 = factorial(Int64(17));
    expect(fact18 ~/ fact17, Int64(18));
  });

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

  test('negation', () {
    void check(int n) {
      // Sign change should commute with conversion.
      expect(-Int64(-n), Int64(n));
      expect(Int64(-n), -Int64(n));
    }

    check(10);
    check(1000000000000000000);
    check(9223372036854774784); // Near Int64.MAX_VALUE with exact double value.
    check(-9223372036854775808); // Int64.MIN_VALUE. Is exact double.
  });

  group('parse', () {
    test('parseRadix10', () {
      void checkInt(int x) {
        expect(Int64.parseRadix('$x', 10), Int64(x));
        expect(Int64.tryParseRadix('$x', 10), 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), throwsFormatException);
      expect(() => Int64.parseRadix('', 10), throwsFormatException);
      expect(() => Int64.parseRadix('-', 10), throwsFormatException);

      expect(() => Int64.tryParseRadix('xyzzy', -1), throwsArgumentError);
      expect(Int64.tryParseRadix('plugh', 10), null);
      expect(Int64.tryParseRadix('', 10), null);
      expect(Int64.tryParseRadix('-', 10), null);
    });

    test('parseHex', () {
      void checkHex(String hexStr, int h, int l) {
        expect(Int64.parseHex(hexStr), Int64.fromInts(h, l));
        expect(Int64.tryParseHex(hexStr), 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);

      expect(() => Int64.parseHex(''), throwsFormatException);
      expect(() => Int64.parseHex('-'), throwsFormatException);

      expect(Int64.tryParseHex(''), null);
      expect(Int64.tryParseHex('-'), null);
    });

    test('parseRadix', () {
      void check(String s, int r, String x) {
        expect(Int64.parseRadix(s, r).toString(), x);
        expect(Int64.tryParseRadix(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);

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

    test('parseRadixN', () {
      void check(String s, int r) {
        expect(Int64.parseRadix(s, r).toRadixString(r), s);
        expect(Int64.tryParseRadix(s, r)!.toRadixString(r), s);
      }

      check('2ppp111222333', 33); // This value & radix requires three chunks.
    });
  });

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

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

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

    test('toRadixString', () {
      expect(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(() => Int64(42).toRadixString(-1), throwsArgumentError);
      expect(() => Int64(42).toRadixString(0), throwsArgumentError);
      expect(() => Int64(42).toRadixString(37), throwsArgumentError);
    });

    test('toStringUnsigned', () {
      List<Int64> values = [];
      for (int high = 0; high < 16; high++) {
        for (int low = -2; low <= 2; low++) {
          values.add((Int64(high) << (64 - 4)) + Int64(low));
        }
      }

      for (Int64 value in values) {
        for (int radix = 2; radix <= 36; radix++) {
          String s1 = value.toRadixStringUnsigned(radix);
          Int64 v2 = Int64.parseRadix(s1, radix);
          expect(v2, value);
          String s2 = v2.toRadixStringUnsigned(radix);
          expect(s2, s1);
        }
        String s3 = value.toStringUnsigned();
        Int64 v4 = Int64.parseInt(s3);
        expect(v4, value);
        String s4 = v4.toStringUnsigned();
        expect(s4, s3);
      }
    });
  });
}
