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

// 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,
      "6c3df6551b80e4bd98dadc042795ad9a73c2b849");
  expectShifted("d87becaa3701c97b31b5b8084f2b5b34e7857092", 2,
      "361efb2a8dc0725ecc6d6e0213cad6cd39e15c24");
  expectShifted("d87becaa3701c97b31b5b8084f2b5b34e7857092", 31,
      "1b0f7d9546e0392f6636b70109e56b669");
  expectShifted("d87becaa3701c97b31b5b8084f2b5b34e7857092", 32,
      "d87becaa3701c97b31b5b8084f2b5b34");
  expectShifted("d87becaa3701c97b31b5b8084f2b5b34e7857092", 33,
      "6c3df6551b80e4bd98dadc042795ad9a");
  expectShifted("d87becaa3701c97b31b5b8084f2b5b34e7857092", 63,
      "1b0f7d9546e0392f6636b7010");
  expectShifted("d87becaa3701c97b31b5b8084f2b5b34e7857092", 64,
      "d87becaa3701c97b31b5b808");
  expectShifted("d87becaa3701c97b31b5b8084f2b5b34e7857092", 65,
      "6c3df6551b80e4bd98dadc04");

  expectShifted("-d87becaa3701c97b31b5b8084f2b5b34e7857092", 0,
      "-d87becaa3701c97b31b5b8084f2b5b34e7857092");
  expectShifted("-d87becaa3701c97b31b5b8084f2b5b34e7857092", 1,
      "-6c3df6551b80e4bd98dadc042795ad9a73c2b849");
  expectShifted("-d87becaa3701c97b31b5b8084f2b5b34e7857092", 2,
      "-361efb2a8dc0725ecc6d6e0213cad6cd39e15c25");
  expectShifted("-d87becaa3701c97b31b5b8084f2b5b34e7857092", 31,
      "-1b0f7d9546e0392f6636b70109e56b66a");
  expectShifted("-d87becaa3701c97b31b5b8084f2b5b34e7857092", 32,
      "-d87becaa3701c97b31b5b8084f2b5b35");
  expectShifted("-d87becaa3701c97b31b5b8084f2b5b34e7857092", 33,
      "-6c3df6551b80e4bd98dadc042795ad9b");
  expectShifted("-d87becaa3701c97b31b5b8084f2b5b34e7857092", 63,
      "-1b0f7d9546e0392f6636b7011");
  expectShifted("-d87becaa3701c97b31b5b8084f2b5b34e7857092", 64,
      "-d87becaa3701c97b31b5b809");
  expectShifted("-d87becaa3701c97b31b5b8084f2b5b34e7857092", 65,
      "-6c3df6551b80e4bd98dadc05");
}
