// 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,
      "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", 127, "1b0f7d954");
  expectShifted("d87becaa3701c97b31b5b8084f2b5b34e7857092", 128, "d87becaa");
  expectShifted("d87becaa3701c97b31b5b8084f2b5b34e7857092", 129, "6c3df655");

  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");
  expectShifted("-d87becaa3701c97b31b5b8084f2b5b34e7857092", 127, "-1b0f7d955");
  expectShifted("-d87becaa3701c97b31b5b8084f2b5b34e7857092", 128, "-d87becab");
  expectShifted("-d87becaa3701c97b31b5b8084f2b5b34e7857092", 129, "-6c3df656");
}
