// 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 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();
}
