| // 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. |
| |
| // @dart = 2.9 |
| |
| // VMOptions=--no_background_compilation --optimization_counter_threshold=10 |
| // VMOptions=--no_background_compilation --optimization_counter_threshold=10 --use_slow_path |
| |
| import "package:expect/expect.dart"; |
| |
| // Tests for long negations under |
| // 64-bit arithmetic wrap-around semantics. |
| |
| final int maxInt32 = 2147483647; |
| final int minInt32 = -2147483648; |
| final int maxInt64 = 0x7fffffffffffffff; |
| final int minInt64 = 0x8000000000000000; |
| |
| int negate(int x) { |
| return -x; |
| } |
| |
| doConstant() { |
| Expect.equals(1, negate(-1)); |
| Expect.equals(0, negate(0)); |
| Expect.equals(-1, negate(1)); |
| |
| Expect.equals(-maxInt32, negate(maxInt32)); |
| Expect.equals(-minInt32, negate(minInt32)); |
| Expect.equals(-maxInt64, negate(maxInt64)); |
| Expect.equals(minInt64, negate(minInt64)); // sic! |
| } |
| |
| doVar() { |
| int d = 0; |
| for (int i = -88; i < 10; i++) { |
| d += negate(i); |
| } |
| Expect.equals(3871, d); |
| } |
| |
| main() { |
| // Repeat tests to enter JIT (when applicable). |
| for (int i = 0; i < 20; i++) { |
| doConstant(); |
| doVar(); |
| } |
| } |