| // Copyright (c) 2012, 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. | 
 |  | 
 | import "package:expect/expect.dart"; | 
 |  | 
 | closure0() { | 
 |   var input = [1, 2, 3]; | 
 |   var fs = []; | 
 |   for (var x in input) { | 
 |     fs.add(() { | 
 |       return x; | 
 |     }); | 
 |   } | 
 |   Expect.equals(3, fs.length); | 
 |   Expect.equals(1, fs[0]()); | 
 |   Expect.equals(2, fs[1]()); | 
 |   Expect.equals(3, fs[2]()); | 
 | } | 
 |  | 
 | closure1() { | 
 |   var input = [1, 2, 3]; | 
 |   var fs = []; | 
 |   for (var x in input) { | 
 |     fs.add(() { | 
 |       return x; | 
 |     }); | 
 |     x++; | 
 |   } | 
 |   Expect.equals(3, fs.length); | 
 |   Expect.equals(2, fs[0]()); | 
 |   Expect.equals(3, fs[1]()); | 
 |   Expect.equals(4, fs[2]()); | 
 | } | 
 |  | 
 | closure2() { | 
 |   var input = [1, 2, 3]; | 
 |   var fs = []; | 
 |   for (var i = 0; i < input.length; i++) { | 
 |     var j = i; | 
 |     fs.add(() { | 
 |       return input[j]; | 
 |     }); | 
 |   } | 
 |   Expect.equals(3, fs.length); | 
 |   Expect.equals(1, fs[0]()); | 
 |   Expect.equals(2, fs[1]()); | 
 |   Expect.equals(3, fs[2]()); | 
 | } | 
 |  | 
 | closure3() { | 
 |   var input = [1, 2, 3]; | 
 |   var fs = []; | 
 |   for (var i = 0; i < input.length; i++) { | 
 |     var x = input[i]; | 
 |     fs.add(() { | 
 |       return x; | 
 |     }); | 
 |     x++; | 
 |   } | 
 |   Expect.equals(3, fs.length); | 
 |   Expect.equals(2, fs[0]()); | 
 |   Expect.equals(3, fs[1]()); | 
 |   Expect.equals(4, fs[2]()); | 
 | } | 
 |  | 
 | closure4() { | 
 |   var input = [1, 2, 3]; | 
 |   var fs = []; | 
 |   var x; | 
 |   for (var i = 0; i < input.length; i++) { | 
 |     x = input[i]; | 
 |     fs.add(() { | 
 |       return x; | 
 |     }); | 
 |     x++; | 
 |   } | 
 |   Expect.equals(3, fs.length); | 
 |   Expect.equals(4, fs[0]()); | 
 |   Expect.equals(4, fs[1]()); | 
 |   Expect.equals(4, fs[2]()); | 
 | } | 
 |  | 
 | closure5() { | 
 |   var input = [1, 2, 3]; | 
 |   var fs = []; | 
 |   var i = 0; | 
 |   do { | 
 |     var x = input[i]; | 
 |     fs.add(() { | 
 |       return x; | 
 |     }); | 
 |   } while (++i < input.length); | 
 |   Expect.equals(3, fs.length); | 
 |   Expect.equals(1, fs[0]()); | 
 |   Expect.equals(2, fs[1]()); | 
 |   Expect.equals(3, fs[2]()); | 
 | } | 
 |  | 
 | closure6() { | 
 |   var input = [1, 2, 3]; | 
 |   var fs = []; | 
 |   var i = 0; | 
 |   do { | 
 |     var x = input[i]; | 
 |     fs.add(() { | 
 |       return x; | 
 |     }); | 
 |     x++; | 
 |   } while (++i < input.length); | 
 |   Expect.equals(3, fs.length); | 
 |   Expect.equals(2, fs[0]()); | 
 |   Expect.equals(3, fs[1]()); | 
 |   Expect.equals(4, fs[2]()); | 
 | } | 
 |  | 
 | closure7() { | 
 |   var input = [1, 2, 3]; | 
 |   var fs = []; | 
 |   var i = 0; | 
 |   while (i < input.length) { | 
 |     var x = input[i]; | 
 |     fs.add(() { | 
 |       return x; | 
 |     }); | 
 |     x++; | 
 |     i++; | 
 |   } | 
 |   Expect.equals(3, fs.length); | 
 |   Expect.equals(2, fs[0]()); | 
 |   Expect.equals(3, fs[1]()); | 
 |   Expect.equals(4, fs[2]()); | 
 | } | 
 |  | 
 | main() { | 
 |   closure0(); | 
 |   closure1(); | 
 |   closure2(); | 
 |   closure3(); | 
 |   closure4(); | 
 |   closure5(); | 
 |   closure6(); | 
 |   closure7(); | 
 | } |