// Copyright (c) 2018, 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.

// Test for JavaScript specific BigInt behaviour. Any JavaScript number (double)
// that is an integral value is a Dart 'int' value, so any BigInt that has a
// value that is exactly a double integral value should return `true` for
// [BigInt.isValidInt].

import "package:expect/expect.dart";

int intPow(int a, int p) {
  int result = 1;
  for (int i = 0; i < p; i++) result *= a;
  return result;
}

int pow2_53 = intPow(2, 53);

test(int n1, int n2, int shift, [bool expectedIsValidInt = true]) {
  var n = (new BigInt.from(n1) * new BigInt.from(n2)) << shift;
  Expect.equals(expectedIsValidInt, n.isValidInt, '${n}.isValidInt');
  if (n >= new BigInt.from(pow2_53)) {
    var nplus1 = n + BigInt.one;
    Expect.isFalse(nplus1.isValidInt, '${nplus1}.isValidInt');
  }
}

main() {
  test(13, 19, 1);
  test(19997, 19993, 100);
  test(19997, pow2_53 ~/ 19997, 0);
  test(19997, pow2_53 ~/ 19997, 1);
  test(19997, pow2_53 ~/ 19997, 100);
  test(1, 1, 100);
  test(1, 1, 10000, false);

  // More than 53 bits in product,
  test(pow2_53 ~/ 3, pow2_53 ~/ 5, 0, false);
}
