// 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 x = 499;
  var f = () {
    return x;
  };
  Expect.equals(499, f());
}

class A {
  closure1() {
    var x = 499;
    var f = () {
      return x;
    };
    Expect.equals(499, f());
  }
}

applyFun(f) {
  return f();
}

closure2() {
  var x = 499;
  Expect.equals(
    499,
    applyFun(() {
      return x;
    }),
  );
}

closure3() {
  var y = 400;
  var f = (x) {
    return y + x;
  };
  Expect.equals(499, f(99));
}

applyFun2(f) {
  return f(400, 90);
}

closure4() {
  var z = 9;
  Expect.equals(
    499,
    applyFun2((x, y) {
      return x + y + z;
    }),
  );
}

closure5() {
  var x = 498;
  var f = () {
    return x;
  };
  x++;
  Expect.equals(499, f());
}

class A2 {
  closure6() {
    var x = 498;
    var f = () {
      return x;
    };
    x++;
    Expect.equals(499, f());
  }
}

closure7() {
  var x = 498;
  var f = () {
    return x;
  };
  x++;
  Expect.equals(499, applyFun(f));
}

closure8() {
  var y = 399;
  var f = (x) {
    return y + x;
  };
  y++;
  Expect.equals(499, f(99));
}

closure9() {
  var z = 9;
  Expect.equals(
    499,
    applyFun2((x, y) {
      return x + y + z;
    }),
  );
}

main() {
  closure0();
  new A().closure1();
  closure2();
  closure3();
  closure4();
  closure5();
  new A2().closure6();
  closure7();
  closure8();
  closure9();
}
