// 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.
//
// Dart test program for testing left shifts of a constant.

// @dart = 2.9

import "package:expect/expect.dart";

shiftLeft0(c) => 0 << c;
shiftLeft1(c) => 1 << c;
shiftLeft8448(c) => 8448 << c;

shiftLeftNeg1(c) => -1 << c;
shiftLeftNeg8448(c) => -8448 << c;

main() {
  // Optimize shifts.
  for (int i = 0; i < 6000; i++) {
    shiftLeft1(2);
    shiftLeft0(2);
    shiftLeft8448(2);
    shiftLeftNeg1(2);
    shiftLeftNeg8448(2);
  }
  for (int i = 0; i < 80; i++) {
    Expect.equals(0, shiftLeft0(i));
  }
  // Exceptions.
  Expect.throws(() => shiftLeft0(-1));

  Expect.equals(1, shiftLeft1(0));
  Expect.equals(128, shiftLeft1(7));
  Expect.equals(536870912, shiftLeft1(29));
  // Deoptimize on 32-bit.
  Expect.equals(1073741824, shiftLeft1(30));
  Expect.equals(2147483648, shiftLeft1(31));
  Expect.equals(1152921504606846976, shiftLeft1(60));
  Expect.equals(2305843009213693952, shiftLeft1(61));
  // Deoptimize on 64 bits.
  Expect.equals(4611686018427387904, shiftLeft1(62));
  Expect.equals(-9223372036854775808, shiftLeft1(63));

  Expect.equals(8448, shiftLeft8448(0));
  Expect.equals(1081344, shiftLeft8448(7));
  Expect.equals(553648128, shiftLeft8448(16));
  // Deoptimize on 32-bit.
  Expect.equals(1107296256, shiftLeft8448(17));
  Expect.equals(2214592512, shiftLeft8448(18));
  Expect.equals(1188950301625810944, shiftLeft8448(47));
  Expect.equals(2377900603251621888, shiftLeft8448(48));
  // Deoptimize on 64 bits.
  Expect.equals(4755801206503243776, shiftLeft8448(49));
  Expect.equals(-8935141660703064064, shiftLeft8448(50));

  Expect.equals(-1, shiftLeftNeg1(0));
  Expect.equals(-128, shiftLeftNeg1(7));
  Expect.equals(-536870912, shiftLeftNeg1(29));
  // Deoptimize on 32-bit.
  Expect.equals(-1073741824, shiftLeftNeg1(30));
  Expect.equals(-2147483648, shiftLeftNeg1(31));
  Expect.equals(-1152921504606846976, shiftLeftNeg1(60));
  Expect.equals(-2305843009213693952, shiftLeftNeg1(61));
  // Deoptimize on 64 bits.
  Expect.equals(-4611686018427387904, shiftLeftNeg1(62));
  Expect.equals(-9223372036854775808, shiftLeftNeg1(63));

  Expect.equals(-8448, shiftLeftNeg8448(0));
  Expect.equals(-1081344, shiftLeftNeg8448(7));
  Expect.equals(-553648128, shiftLeftNeg8448(16));
  // Deoptimize on 32-bit.
  Expect.equals(-1107296256, shiftLeftNeg8448(17));
  Expect.equals(-2214592512, shiftLeftNeg8448(18));
  Expect.equals(-1188950301625810944, shiftLeftNeg8448(47));
  Expect.equals(-2377900603251621888, shiftLeftNeg8448(48));
  // Deoptimize on 64 bits.
  Expect.equals(-4755801206503243776, shiftLeftNeg8448(49));
  Expect.equals(8935141660703064064, shiftLeftNeg8448(50));
}
