// 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. // @dart = 2.7 import "package:expect/expect.dart"; closure0() { var fs = []; for (var x = 1; x <= 3; x++) { 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 fs = []; for (var x = 0; x < 6; x++) { fs.add(() { return x; }); x++; } Expect.equals(3, fs.length); Expect.equals(1, fs[0]()); Expect.equals(3, fs[1]()); Expect.equals(5, fs[2]()); } closure2() { var input = [1, 2, 3]; var fs = []; for (var i = 0; i < input.length; i++) { fs.add(() { return input[i]; }); } Expect.equals(3, fs.length); Expect.equals(1, fs[0]()); Expect.equals(2, fs[1]()); Expect.equals(3, fs[2]()); } closure3() { var fs = []; for (var i = 0; i < 3; (() { fs.add(() => i); i++; })()) { i++; } Expect.equals(2, fs.length); Expect.equals(3, fs[0]()); Expect.equals(4, fs[1]()); } closure4() { var g; for (var i = 0; (() { g = () => i; return false; })(); i++) { Expect.equals(false, true); } Expect.equals(0, g()); } main() { closure0(); closure1(); closure2(); closure3(); closure4(); }