Index: tests/standalone/deoptimization_test.dart |
diff --git a/tests/standalone/deoptimization_test.dart b/tests/standalone/deoptimization_test.dart |
deleted file mode 100644 |
index add6d23e45d048376a42592c571f3dfbb452a25a..0000000000000000000000000000000000000000 |
--- a/tests/standalone/deoptimization_test.dart |
+++ /dev/null |
@@ -1,216 +0,0 @@ |
-// Copyright (c) 2011, 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 deoptimization. |
- |
-import "package:expect/expect.dart"; |
- |
-class SmiCompares { |
- // Test deoptimization when one argument is known to be Smi. |
- static bool smiCompareLessThan2(a) { |
- return a < 2; |
- } |
- |
- // Test deoptimization when one argument is known to be Smi. |
- static bool smiCompareGreaterThan2(a) { |
- return 2 < a; |
- } |
- |
- // Test deoptimization when both arguments unknown. |
- static bool smiCompareLessThan(a, b) { |
- return a < b; |
- } |
- |
- // Test deoptimization when both arguments unknown. |
- static bool smiCompareGreaterThan(a, b) { |
- return a > b; |
- } |
- |
- static smiComparesTest() { |
- for (int i = 0; i < 2000; i++) { |
- Expect.equals(true, smiCompareLessThan2(1)); |
- Expect.equals(false, smiCompareLessThan2(3)); |
- Expect.equals(false, smiCompareGreaterThan2(1)); |
- Expect.equals(true, smiCompareGreaterThan2(3)); |
- Expect.equals(true, smiCompareLessThan(1, 2)); |
- Expect.equals(false, smiCompareGreaterThan(1, 2)); |
- } |
- // Deoptimize by passing a double instead of Smi |
- Expect.equals(true, smiCompareLessThan2(1.0)); |
- Expect.equals(false, smiCompareGreaterThan2(1.0)); |
- Expect.equals(true, smiCompareLessThan(1.0, 2)); |
- Expect.equals(false, smiCompareGreaterThan(1, 2.0)); |
- } |
-} |
- |
-class SmiBinop { |
- static subWithLiteral(a) { |
- return a - 1; |
- } |
- |
- static void smiBinopTest() { |
- for (int i = 0; i < 2000; i++) { |
- Expect.equals(2, subWithLiteral(3)); |
- } |
- // Deoptimize. |
- Expect.equals(2.0, subWithLiteral(3.0)); |
- } |
- |
- static mul(x) { |
- return x * 1024; |
- } |
- |
- static void smiBinopOverflowTest() { |
- final int big = 536870912; |
- for (int i = 0; i < 2000; i++) { |
- Expect.equals(1024, mul(1)); |
- } |
- // Deoptimize by overflow. |
- Expect.equals(1024 * big, mul(big)); |
- } |
-} |
- |
-class ObjectsEquality { |
- static bool compareEqual(a, b) { |
- return a == b; |
- } |
- |
- static bool compareNotEqual(a, b) { |
- return a != b; |
- } |
- |
- // Use only Object.==. |
- static void objectsEqualityTest() { |
- var a = new ObjectsEquality(); |
- var b = new ObjectsEquality(); |
- final nan = 0.0 / 0.0; |
- for (int i = 0; i < 1000; i++) { |
- Expect.equals(true, compareEqual(a, a)); |
- Expect.equals(true, compareEqual(null, null)); |
- Expect.equals(false, compareEqual(null, a)); |
- Expect.equals(false, compareEqual(a, null)); |
- Expect.equals(true, compareEqual(b, b)); |
- Expect.equals(false, compareEqual(a, b)); |
- |
- Expect.equals(false, compareNotEqual(a, a)); |
- Expect.equals(false, compareNotEqual(null, null)); |
- Expect.equals(true, compareNotEqual(null, a)); |
- Expect.equals(true, compareNotEqual(a, null)); |
- Expect.equals(false, compareNotEqual(b, b)); |
- Expect.equals(true, compareNotEqual(a, b)); |
- } |
- var c = new SmiBinop(); |
- // Deoptimize. |
- Expect.equals(true, compareEqual(c, c)); |
- Expect.equals(false, compareEqual(c, null)); |
- Expect.equals(false, compareNotEqual(c, c)); |
- Expect.equals(true, compareNotEqual(c, null)); |
- } |
-} |
- |
-class DeoptimizationTest { |
- static foo(a, b) { |
- return a - b; |
- } |
- |
- static test1() { |
- for (int i = 0; i < 2000; i++) { |
- Expect.equals(2, foo(3, 1)); // <-- Optimizes 'foo', |
- } |
- Expect.equals(2.2, foo(1.2, -1.0)); // <-- Deoptimizes 'foo'. |
- for (int i = 0; i < 10000; i++) { |
- Expect.equals(2, foo(3, 1)); // <-- Optimizes 'foo'. |
- } |
- Expect.equals(2.2, foo(1.2, -1)); // <-- Deoptimizes 'foo'. |
- } |
- |
- static moo(n) { |
- return ++n; |
- } |
- |
- static test2() { |
- for (int i = 0; i < 2000; i++) { |
- Expect.equals(4, moo(3)); // <-- Optimizes 'moo', |
- } |
- Expect.equals(2.2, moo(1.2)); // <-- Deoptimizes 'moo'. |
- for (int i = 0; i < 10000; i++) { |
- Expect.equals(4, moo(3)); // <-- Optimizes 'moo'. |
- } |
- Expect.equals(2.2, moo(1.2)); // <-- Deoptimizes 'moo'. |
- } |
- |
- static test3() { |
- for (int i = 0; i < 2000; i++) { |
- Expect.equals(2.0, foo(3.0, 1.0)); // <-- Optimizes 'foo', |
- } |
- Expect.equals(2, foo(1, -1)); // <-- Deoptimizes 'foo'. |
- for (int i = 0; i < 2000; i++) { |
- Expect.equals(2.0, foo(3.0, 1.0)); // <-- Optimizes 'foo', |
- } |
- Expect.equals(2.2, moo(1.2)); // <-- Deoptimizes 'moo'. |
- } |
- |
- static bool compareInt(a, b) { |
- return a < b; |
- } |
- |
- static bool compareDouble(a, b) { |
- return a < b; |
- } |
- |
- static test4() { |
- for (int i = 0; i < 2000; i++) { |
- Expect.equals(true, compareInt(1, 2)); |
- Expect.equals(true, compareDouble(1.0, 2.0)); |
- } |
- // Trigger deoptimization in compareInt and compareDouble. |
- Expect.equals(true, compareInt(1, 2.0)); |
- Expect.equals(true, compareDouble(1.0, 2)); |
- } |
- |
- static smiRightShift() { |
- int ShiftRight(int a, int b) { |
- return a >> b; |
- } |
- |
- for (int i = 0; i < 2000; i++) { |
- var r = ShiftRight(10, 2); |
- Expect.equals(2, r); |
- } |
- // ShiftRight is optimized. |
- Expect.equals(0, ShiftRight(10, 64)); |
- // Deoptimize ShiftRight because 'a' is a Mint. |
- var mint = 1 << 63; |
- Expect.equals(1 << 3, ShiftRight(mint, 60)); |
- } |
- |
- static doubleUnary() { |
- num unary(num a) { |
- return -a; |
- } |
- |
- for (int i = 0; i < 2000; i++) { |
- var r = unary(2.0); |
- Expect.equals(-2.0, r); |
- } |
- var r = unary(5); |
- Expect.equals(-5, r); |
- } |
- |
- static void testMain() { |
- test1(); |
- test2(); |
- test3(); |
- test4(); |
- SmiCompares.smiComparesTest(); |
- SmiBinop.smiBinopTest(); |
- SmiBinop.smiBinopOverflowTest(); |
- ObjectsEquality.objectsEqualityTest(); |
- smiRightShift(); |
- doubleUnary(); |
- } |
-} |
- |
-main() { |
- DeoptimizationTest.testMain(); |
-} |