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

// @dart = 2.9

// Testing Bigints with and without intrinsics.
// VMOptions=--intrinsify --no-enable-asserts
// VMOptions=--intrinsify --enable-asserts
// VMOptions=--no-intrinsify --enable-asserts
// VMOptions=--no-intrinsify --no-enable-asserts

import "package:expect/expect.dart";

expectShifted(aString, n, expectedString) {
  BigInt a = BigInt.parse(aString, radix: 16);
  BigInt expected = BigInt.parse(expectedString, radix: 16);
  BigInt actual = a << n;
  String actualString = actual.toRadixString(16);
  print("$aString << $n");
  print(" = $actualString (expected $expectedString)");
  Expect.equals(expected, actual);
}

main() {
  expectShifted("d87becaa3701c97b31b5b8084f2b5b34e7857092", 0,
      "d87becaa3701c97b31b5b8084f2b5b34e7857092");
  expectShifted("d87becaa3701c97b31b5b8084f2b5b34e7857092", 1,
      "1b0f7d9546e0392f6636b70109e56b669cf0ae124");
  expectShifted("d87becaa3701c97b31b5b8084f2b5b34e7857092", 2,
      "361efb2a8dc0725ecc6d6e0213cad6cd39e15c248");
  expectShifted("d87becaa3701c97b31b5b8084f2b5b34e7857092", 31,
      "6c3df6551b80e4bd98dadc042795ad9a73c2b84900000000");
  expectShifted("d87becaa3701c97b31b5b8084f2b5b34e7857092", 32,
      "d87becaa3701c97b31b5b8084f2b5b34e785709200000000");
  expectShifted("d87becaa3701c97b31b5b8084f2b5b34e7857092", 33,
      "1b0f7d9546e0392f6636b70109e56b669cf0ae12400000000");
  expectShifted("d87becaa3701c97b31b5b8084f2b5b34e7857092", 63,
      "6c3df6551b80e4bd98dadc042795ad9a73c2b8490000000000000000");
  expectShifted("d87becaa3701c97b31b5b8084f2b5b34e7857092", 64,
      "d87becaa3701c97b31b5b8084f2b5b34e78570920000000000000000");
  expectShifted("d87becaa3701c97b31b5b8084f2b5b34e7857092", 65,
      "1b0f7d9546e0392f6636b70109e56b669cf0ae1240000000000000000");

  expectShifted("-d87becaa3701c97b31b5b8084f2b5b34e7857092", 0,
      "-d87becaa3701c97b31b5b8084f2b5b34e7857092");
  expectShifted("-d87becaa3701c97b31b5b8084f2b5b34e7857092", 1,
      "-1b0f7d9546e0392f6636b70109e56b669cf0ae124");
  expectShifted("-d87becaa3701c97b31b5b8084f2b5b34e7857092", 2,
      "-361efb2a8dc0725ecc6d6e0213cad6cd39e15c248");
  expectShifted("-d87becaa3701c97b31b5b8084f2b5b34e7857092", 31,
      "-6c3df6551b80e4bd98dadc042795ad9a73c2b84900000000");
  expectShifted("-d87becaa3701c97b31b5b8084f2b5b34e7857092", 32,
      "-d87becaa3701c97b31b5b8084f2b5b34e785709200000000");
  expectShifted("-d87becaa3701c97b31b5b8084f2b5b34e7857092", 33,
      "-1b0f7d9546e0392f6636b70109e56b669cf0ae12400000000");
  expectShifted("-d87becaa3701c97b31b5b8084f2b5b34e7857092", 63,
      "-6c3df6551b80e4bd98dadc042795ad9a73c2b8490000000000000000");
  expectShifted("-d87becaa3701c97b31b5b8084f2b5b34e7857092", 64,
      "-d87becaa3701c97b31b5b8084f2b5b34e78570920000000000000000");
  expectShifted("-d87becaa3701c97b31b5b8084f2b5b34e7857092", 65,
      "-1b0f7d9546e0392f6636b70109e56b669cf0ae1240000000000000000");
}
