Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(189)

Side by Side Diff: tests/standalone/deoptimization_test.dart

Issue 2984363004: Migrate first block of tests in standalone to standalone_2 (Closed)
Patch Set: Remove Expect.throws Created 3 years, 4 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
(Empty)
1 // Copyright (c) 2011, the Dart project authors. Please see the AUTHORS file
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.
4 // Test deoptimization.
5
6 import "package:expect/expect.dart";
7
8 class SmiCompares {
9 // Test deoptimization when one argument is known to be Smi.
10 static bool smiCompareLessThan2(a) {
11 return a < 2;
12 }
13
14 // Test deoptimization when one argument is known to be Smi.
15 static bool smiCompareGreaterThan2(a) {
16 return 2 < a;
17 }
18
19 // Test deoptimization when both arguments unknown.
20 static bool smiCompareLessThan(a, b) {
21 return a < b;
22 }
23
24 // Test deoptimization when both arguments unknown.
25 static bool smiCompareGreaterThan(a, b) {
26 return a > b;
27 }
28
29 static smiComparesTest() {
30 for (int i = 0; i < 2000; i++) {
31 Expect.equals(true, smiCompareLessThan2(1));
32 Expect.equals(false, smiCompareLessThan2(3));
33 Expect.equals(false, smiCompareGreaterThan2(1));
34 Expect.equals(true, smiCompareGreaterThan2(3));
35 Expect.equals(true, smiCompareLessThan(1, 2));
36 Expect.equals(false, smiCompareGreaterThan(1, 2));
37 }
38 // Deoptimize by passing a double instead of Smi
39 Expect.equals(true, smiCompareLessThan2(1.0));
40 Expect.equals(false, smiCompareGreaterThan2(1.0));
41 Expect.equals(true, smiCompareLessThan(1.0, 2));
42 Expect.equals(false, smiCompareGreaterThan(1, 2.0));
43 }
44 }
45
46 class SmiBinop {
47 static subWithLiteral(a) {
48 return a - 1;
49 }
50
51 static void smiBinopTest() {
52 for (int i = 0; i < 2000; i++) {
53 Expect.equals(2, subWithLiteral(3));
54 }
55 // Deoptimize.
56 Expect.equals(2.0, subWithLiteral(3.0));
57 }
58
59 static mul(x) {
60 return x * 1024;
61 }
62
63 static void smiBinopOverflowTest() {
64 final int big = 536870912;
65 for (int i = 0; i < 2000; i++) {
66 Expect.equals(1024, mul(1));
67 }
68 // Deoptimize by overflow.
69 Expect.equals(1024 * big, mul(big));
70 }
71 }
72
73 class ObjectsEquality {
74 static bool compareEqual(a, b) {
75 return a == b;
76 }
77
78 static bool compareNotEqual(a, b) {
79 return a != b;
80 }
81
82 // Use only Object.==.
83 static void objectsEqualityTest() {
84 var a = new ObjectsEquality();
85 var b = new ObjectsEquality();
86 final nan = 0.0 / 0.0;
87 for (int i = 0; i < 1000; i++) {
88 Expect.equals(true, compareEqual(a, a));
89 Expect.equals(true, compareEqual(null, null));
90 Expect.equals(false, compareEqual(null, a));
91 Expect.equals(false, compareEqual(a, null));
92 Expect.equals(true, compareEqual(b, b));
93 Expect.equals(false, compareEqual(a, b));
94
95 Expect.equals(false, compareNotEqual(a, a));
96 Expect.equals(false, compareNotEqual(null, null));
97 Expect.equals(true, compareNotEqual(null, a));
98 Expect.equals(true, compareNotEqual(a, null));
99 Expect.equals(false, compareNotEqual(b, b));
100 Expect.equals(true, compareNotEqual(a, b));
101 }
102 var c = new SmiBinop();
103 // Deoptimize.
104 Expect.equals(true, compareEqual(c, c));
105 Expect.equals(false, compareEqual(c, null));
106 Expect.equals(false, compareNotEqual(c, c));
107 Expect.equals(true, compareNotEqual(c, null));
108 }
109 }
110
111 class DeoptimizationTest {
112 static foo(a, b) {
113 return a - b;
114 }
115
116 static test1() {
117 for (int i = 0; i < 2000; i++) {
118 Expect.equals(2, foo(3, 1)); // <-- Optimizes 'foo',
119 }
120 Expect.equals(2.2, foo(1.2, -1.0)); // <-- Deoptimizes 'foo'.
121 for (int i = 0; i < 10000; i++) {
122 Expect.equals(2, foo(3, 1)); // <-- Optimizes 'foo'.
123 }
124 Expect.equals(2.2, foo(1.2, -1)); // <-- Deoptimizes 'foo'.
125 }
126
127 static moo(n) {
128 return ++n;
129 }
130
131 static test2() {
132 for (int i = 0; i < 2000; i++) {
133 Expect.equals(4, moo(3)); // <-- Optimizes 'moo',
134 }
135 Expect.equals(2.2, moo(1.2)); // <-- Deoptimizes 'moo'.
136 for (int i = 0; i < 10000; i++) {
137 Expect.equals(4, moo(3)); // <-- Optimizes 'moo'.
138 }
139 Expect.equals(2.2, moo(1.2)); // <-- Deoptimizes 'moo'.
140 }
141
142 static test3() {
143 for (int i = 0; i < 2000; i++) {
144 Expect.equals(2.0, foo(3.0, 1.0)); // <-- Optimizes 'foo',
145 }
146 Expect.equals(2, foo(1, -1)); // <-- Deoptimizes 'foo'.
147 for (int i = 0; i < 2000; i++) {
148 Expect.equals(2.0, foo(3.0, 1.0)); // <-- Optimizes 'foo',
149 }
150 Expect.equals(2.2, moo(1.2)); // <-- Deoptimizes 'moo'.
151 }
152
153 static bool compareInt(a, b) {
154 return a < b;
155 }
156
157 static bool compareDouble(a, b) {
158 return a < b;
159 }
160
161 static test4() {
162 for (int i = 0; i < 2000; i++) {
163 Expect.equals(true, compareInt(1, 2));
164 Expect.equals(true, compareDouble(1.0, 2.0));
165 }
166 // Trigger deoptimization in compareInt and compareDouble.
167 Expect.equals(true, compareInt(1, 2.0));
168 Expect.equals(true, compareDouble(1.0, 2));
169 }
170
171 static smiRightShift() {
172 int ShiftRight(int a, int b) {
173 return a >> b;
174 }
175
176 for (int i = 0; i < 2000; i++) {
177 var r = ShiftRight(10, 2);
178 Expect.equals(2, r);
179 }
180 // ShiftRight is optimized.
181 Expect.equals(0, ShiftRight(10, 64));
182 // Deoptimize ShiftRight because 'a' is a Mint.
183 var mint = 1 << 63;
184 Expect.equals(1 << 3, ShiftRight(mint, 60));
185 }
186
187 static doubleUnary() {
188 num unary(num a) {
189 return -a;
190 }
191
192 for (int i = 0; i < 2000; i++) {
193 var r = unary(2.0);
194 Expect.equals(-2.0, r);
195 }
196 var r = unary(5);
197 Expect.equals(-5, r);
198 }
199
200 static void testMain() {
201 test1();
202 test2();
203 test3();
204 test4();
205 SmiCompares.smiComparesTest();
206 SmiBinop.smiBinopTest();
207 SmiBinop.smiBinopOverflowTest();
208 ObjectsEquality.objectsEqualityTest();
209 smiRightShift();
210 doubleUnary();
211 }
212 }
213
214 main() {
215 DeoptimizationTest.testMain();
216 }
OLDNEW
« no previous file with comments | « tests/standalone/deferred_transitive_import_error_test.dart ('k') | tests/standalone/double_smi_comparison_test.dart » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698