Index: tests/language/src/ClosureSharedStateTest.dart |
diff --git a/tests/language/src/ClosureSharedStateTest.dart b/tests/language/src/ClosureSharedStateTest.dart |
new file mode 100644 |
index 0000000000000000000000000000000000000000..99dda766b477e0936c69025408b987ce011c2439 |
--- /dev/null |
+++ b/tests/language/src/ClosureSharedStateTest.dart |
@@ -0,0 +1,51 @@ |
+// 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. |
+ |
+// Tests for closures sharing mutable bindings. |
+ |
+var f; |
+var g; |
+ |
+setupPlain() { |
+ int j = 1000; |
+ // Two closures sharing variable 'j'; j initially is 1000. |
+ f = (int x) { var q = j; j = x; return q;}; |
+ g = (int x) { var q = j; j = x; return q;}; |
+} |
+ |
+setupLoop() { |
+ for (int i = 0; i < 2; i++) { |
+ int j = i * 1000; // The last stored closure has j initially 1000. |
+ // Two closures sharing variable 'j'. |
+ f = (int x) { var q = j; j = x; return q;}; |
+ g = (int x) { var q = j; j = x; return q;}; |
+ } |
+} |
+ |
+setupNestedLoop() { |
+ for (int outer = 0; outer < 2; outer++) { |
+ int j = outer * 1000; |
+ for (int i = 0; i < 2; i++) { |
+ // Two closures sharing variable 'j' in a loop at different nesting. |
+ f = (int x) { var q = j; j = x; return q;}; |
+ g = (int x) { var q = j; j = x; return q;}; |
+ } |
+ } |
+} |
+ |
+test(setup) { |
+ setup(); |
+ Expect.equals(1000, f(100)); |
+ Expect.equals(100, f(200)); |
+ Expect.equals(200, f(300)); |
+ Expect.equals(300, g(400)); |
+ Expect.equals(400, g(500)); |
+} |
+ |
+ |
+main() { |
+ test(setupPlain); |
+ test(setupLoop); |
+ test(setupNestedLoop); |
+} |