Index: tests/language/vm/reusable_boxes_test.dart |
diff --git a/tests/language/vm/reusable_boxes_test.dart b/tests/language/vm/reusable_boxes_test.dart |
new file mode 100644 |
index 0000000000000000000000000000000000000000..a70cade673038210f531dc27ac1a6bb45a0b225c |
--- /dev/null |
+++ b/tests/language/vm/reusable_boxes_test.dart |
@@ -0,0 +1,92 @@ |
+// 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. |
+// Test correct handling reusable boxes. |
+// VMOptions=--optimization_counter_threshold=100 |
+ |
+library reusable_boxes_test; |
+ |
+import 'dart:typed_data'; |
+import 'package:expect/expect.dart'; |
+ |
+class D { |
+ var a = 0.0; |
+ var b = 1.0; |
+ var c = 2.0; |
+ test() { |
+ a = 0.0; |
+ b = 1.0; |
+ c = a + b; |
+ return c; |
+ } |
+ |
+ testParam(x, y) { |
+ x = x * x; |
+ y = y * y; |
+ c = x + y; |
+ } |
+} |
+ |
+testD() { |
+ var f = new D(); |
+ var r = 0.0; |
+ for (var i = 0; i < 20; i++) { |
+ r += f.test(); |
+ } |
+ Expect.equals(20.0, r); |
+ // Trigger a deopt of test. |
+ f.testParam(new Float32x4(1.0, 2.0, 3.0, 4.0), new Float32x4.zero()); |
+ r = 0.0; |
+ for (var i = 0; i < 20; i++) { |
+ r += f.test(); |
+ } |
+ Expect.equals(20.0, r); |
+} |
+ |
+ |
+class F { |
+ var a = new Float32x4.zero(); |
+ var b = new Float32x4(1.0, 2.0, 3.0, 4.0); |
+ var c = new Float32x4.zero(); |
+ test() { |
+ a = new Float32x4.zero(); |
+ b = new Float32x4(1.0, 2.0, 3.0, 4.0); |
+ c = a + b; |
+ return c; |
+ } |
+ |
+ testParam(x, y) { |
+ x = x * x; |
+ y = y * y; |
+ c = x + y; |
+ } |
+ |
+} |
+ |
+testF() { |
+ var f = new F(); |
+ var r = new Float32x4.zero(); |
+ for (var i = 0; i < 20; i++) { |
+ r += f.test(); |
+ } |
+ Expect.equals(20.0, r.x); |
+ Expect.equals(40.0, r.y); |
+ Expect.equals(60.0, r.z); |
+ Expect.equals(80.0, r.w); |
+ // Trigger a deopt of test. |
+ f.testParam(1.0, 2.0); |
+ r = new Float32x4.zero(); |
+ for (var i = 0; i < 20; i++) { |
+ r += f.test(); |
+ } |
+ Expect.equals(20.0, r.x); |
+ Expect.equals(40.0, r.y); |
+ Expect.equals(60.0, r.z); |
+ Expect.equals(80.0, r.w); |
+} |
+ |
+ |
+main() { |
+ testD(); |
+ testF(); |
+} |