Index: tests/language/vm/optimized_guarded_field_isolates_test.dart |
=================================================================== |
--- tests/language/vm/optimized_guarded_field_isolates_test.dart (revision 0) |
+++ tests/language/vm/optimized_guarded_field_isolates_test.dart (revision 0) |
@@ -0,0 +1,70 @@ |
+// 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. |
+// VMOptions=--optimization_counter_threshold=100 |
+ |
+// Test field type tracking and field list-length tracking in the presence of |
+// multiple isolates. |
+ |
+import "dart:isolate"; |
+import "package:expect/expect.dart"; |
+ |
+class A { |
+ A(this.a); |
+ var a; |
+} |
+ |
+class B extends A { |
+ B(a, this.b) : super(a) { } |
+ |
+ var b; |
+} |
+ |
+f1(SendPort send_port) { |
+ send_port.send(new B("foo", "bar")); |
+} |
+ |
+test_b(B obj) => obj.a + obj.b; |
+ |
+test_field_type() { |
+ var receive_port = new ReceivePort(); |
+ Future<Isolate> isolate = Isolate.spawn(f1, receive_port.sendPort); |
+ B b = new B(1, 2); |
+ for (var i = 0; i < 200; i++) test_b(b); |
Ivan Posva
2013/11/01 04:50:05
{
test_b(b);
}
Florian Schneider
2013/11/01 10:39:27
Done.
|
+ Expect.equals(3, test_b(b)); |
+ Future<B> item = receive_port.first; |
+ item.then((B value) { |
+ Expect.equals("foobar", test_b(value)); |
+ receive_port.close(); |
+ }); |
+} |
+ |
+class C { |
+ C(this.list); |
+ final List list; |
+} |
+ |
+f2(SendPort send_port) { |
+ send_port.send(new C(new List(1))); |
+} |
+ |
+test_c(C obj) => obj.list[9999]; |
+ |
+test_list_length() { |
+ var receive_port = new ReceivePort(); |
+ Future<Isolate> isolate = Isolate.spawn(f2, receive_port.sendPort); |
+ List list = new List(10000); |
Ivan Posva
2013/11/01 04:50:05
Where is list being used?
|
+ C c = new C(new List(10000)); |
+ for (var i = 0; i < 200; i++) test_c(c); |
Ivan Posva
2013/11/01 04:50:05
ditto:
{
test_c(c);
}
|
+ Expect.equals(null, test_c(c)); |
+ Future<C> item = receive_port.first; |
+ item.then((C value) { |
+ Expect.throws(() => test_c(value), (e) => e is RangeError); |
+ receive_port.close(); |
+ }); |
+} |
+ |
+main() { |
+ test_field_type(); |
+ test_list_length(); |
+} |