OLD | NEW |
1 // Copyright (c) 2012, the Dart project authors. Please see the AUTHORS file | 1 // Copyright (c) 2012, the Dart project authors. Please see the AUTHORS file |
2 // for details. All rights reserved. Use of this source code is governed by a | 2 // for details. All rights reserved. Use of this source code is governed by a |
3 // BSD-style license that can be found in the LICENSE file. | 3 // BSD-style license that can be found in the LICENSE file. |
4 // | 4 // |
5 // Tests optimization: transform double.toInt() to DoubleToSmi | 5 // Tests optimization: transform double.toInt() to DoubleToSmi |
6 // unless we encounter a non-Smi result, in which case we deoptimize and | 6 // unless we encounter a non-Smi result, in which case we deoptimize and |
7 // optimize it later to DoubleToInt. | 7 // optimize it later to DoubleToInt. |
8 | 8 |
| 9 import "package:expect/expect.dart"; |
| 10 |
9 | 11 |
10 main() { | 12 main() { |
11 for (int i = 0; i < 600; i++) { | 13 for (int i = 0; i < 600; i++) { |
12 Expect.equals(100, foo(100, 1.2)); | 14 Expect.equals(100, foo(100, 1.2)); |
13 } | 15 } |
14 // Deoptimize 'foo', d2smi -> d2int. | 16 // Deoptimize 'foo', d2smi -> d2int. |
15 Expect.equals(36507222016 * 2, foo(2, 36507222016.6)); | 17 Expect.equals(36507222016 * 2, foo(2, 36507222016.6)); |
16 for (int i = 0; i < 600; i++) { | 18 for (int i = 0; i < 600; i++) { |
17 Expect.equals(100, foo(100, 1.2)); | 19 Expect.equals(100, foo(100, 1.2)); |
18 } | 20 } |
19 Expect.equals(36507222016 * 2, foo(2, 36507222016.6)); | 21 Expect.equals(36507222016 * 2, foo(2, 36507222016.6)); |
20 } | 22 } |
21 | 23 |
22 | 24 |
23 foo(n, a) { | 25 foo(n, a) { |
24 int k = 0; | 26 int k = 0; |
25 for (int i = 0; i < n; i++) { | 27 for (int i = 0; i < n; i++) { |
26 k += goo(a); | 28 k += goo(a); |
27 } | 29 } |
28 return k; | 30 return k; |
29 } | 31 } |
30 | 32 |
31 | 33 |
32 goo(a) { | 34 goo(a) { |
33 return a.toInt(); | 35 return a.toInt(); |
34 } | 36 } |
OLD | NEW |