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