OLD | NEW |
| (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 | |
5 // Tests for closures sharing mutable bindings. | |
6 | |
7 var f; | |
8 var g; | |
9 | |
10 setupPlain() { | |
11 int j = 1000; | |
12 // Two closures sharing variable 'j'; j initially is 1000. | |
13 f = (int x) { var q = j; j = x; return q;}; | |
14 g = (int x) { var q = j; j = x; return q;}; | |
15 } | |
16 | |
17 setupLoop() { | |
18 for (int i = 0; i < 2; i++) { | |
19 int j = i * 1000; // The last stored closure has j initially 1000. | |
20 // Two closures sharing variable 'j'. | |
21 f = (int x) { var q = j; j = x; return q;}; | |
22 g = (int x) { var q = j; j = x; return q;}; | |
23 } | |
24 } | |
25 | |
26 setupNestedLoop() { | |
27 for (int outer = 0; outer < 2; outer++) { | |
28 int j = outer * 1000; | |
29 for (int i = 0; i < 2; i++) { | |
30 // Two closures sharing variable 'j' in a loop at different nesting. | |
31 f = (int x) { var q = j; j = x; return q;}; | |
32 g = (int x) { var q = j; j = x; return q;}; | |
33 } | |
34 } | |
35 } | |
36 | |
37 test(setup) { | |
38 setup(); | |
39 Expect.equals(1000, f(100)); | |
40 Expect.equals(100, f(200)); | |
41 Expect.equals(200, f(300)); | |
42 Expect.equals(300, g(400)); | |
43 Expect.equals(400, g(500)); | |
44 } | |
45 | |
46 | |
47 main() { | |
48 test(setupPlain); | |
49 test(setupLoop); | |
50 test(setupNestedLoop); | |
51 } | |
OLD | NEW |