|  | // 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 canonicalization of integer shift operations. | 
|  | // This is a regression test for dartbug.com/34288. | 
|  |  | 
|  | // VMOptions=--no_background_compilation --optimization_counter_threshold=10 | 
|  |  | 
|  | import "package:expect/expect.dart"; | 
|  |  | 
|  | int _shl_63(int x) => x << 63; | 
|  | int _shl_64(int x) => x << 64; | 
|  | int _shl_65(int x) => x << 65; | 
|  | int _shl_m1(int x) => x << -1; | 
|  |  | 
|  | int _shr_63(int x) => x >> 63; | 
|  | int _shr_64(int x) => x >> 64; | 
|  | int _shr_65(int x) => x >> 65; | 
|  | int _shr_m1(int x) => x >> -1; | 
|  |  | 
|  | // Non-constant values. | 
|  | int one = 1; | 
|  | int minusOne = -1; | 
|  |  | 
|  | doTests() { | 
|  | Expect.equals(0x8000000000000000, _shl_63(one)); | 
|  | Expect.equals(0x8000000000000000, _shl_63(minusOne)); | 
|  | Expect.equals(0, _shl_64(one)); | 
|  | Expect.equals(0, _shl_64(minusOne)); | 
|  | Expect.equals(0, _shl_65(one)); | 
|  | Expect.equals(0, _shl_65(minusOne)); | 
|  |  | 
|  | Expect.throws<ArgumentError>(() { | 
|  | _shl_m1(one); | 
|  | }); | 
|  |  | 
|  | Expect.equals(0, _shr_63(one)); | 
|  | Expect.equals(-1, _shr_63(minusOne)); | 
|  | Expect.equals(0, _shr_64(one)); | 
|  | Expect.equals(-1, _shr_64(minusOne)); | 
|  | Expect.equals(0, _shr_65(one)); | 
|  | Expect.equals(-1, _shr_65(minusOne)); | 
|  |  | 
|  | Expect.throws<ArgumentError>(() { | 
|  | _shr_m1(one); | 
|  | }); | 
|  | } | 
|  |  | 
|  | void main() { | 
|  | for (int i = 0; i < 20; ++i) { | 
|  | doTests(); | 
|  | } | 
|  | } |