| // Copyright (c) 2013, 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 optimization of modulo operator on Smi. |
| // VMOptions=--optimization-counter-threshold=10 --no-use-osr |
| |
| import "package:expect/expect.dart"; |
| |
| main() { |
| for (int i = -30; i < 30; i++) { |
| Expect.equals(i % 9, foo(i, 9)); |
| // Zero test is done outside the loop. |
| if (i < 0) { |
| Expect.equals(i ~/ -i, foo2(i)); |
| } else if (i > 0) { |
| Expect.equals(i ~/ i, foo2(i)); |
| } |
| } |
| // We don't specify the exact exception type here, that is covered in |
| // truncdiv_zero_test. The correct answer is IntegerDivisionByZeroException, |
| // but the web platform has only one num type and can't distinguish between |
| // int and double, so it throws UnsupportedError (the behaviour for double). |
| Expect.throws(() => foo2(0)); |
| } |
| |
| foo(i, x) => i % x; |
| |
| foo2(i) { |
| // Make sure x has a range computed. |
| var x = 0; |
| if (i < 0) { |
| x = -i; |
| } else { |
| x = i; |
| } |
| return i ~/ x; |
| } |