// 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 test program testing closures.

// @dart = 2.9

import "package:expect/expect.dart";

class A {
  operator -() => this;

  foo(x) {
    -a;
    if (x) return true;
    return false;
  }

  loop1(x) {
    -a;
    while (x) return true;
    return false;
  }

  loop2(x) {
    -a;
    for (; x;) return true;
    return false;
  }

  loop3(x) {
    -a;
    var i = 0;
    do {
      if (i++ == 1) return false;
    } while (!x);
    return true;
  }
}

var a;

main() {
  a = new A();
  Expect.isTrue(a.foo(true));
  Expect.isTrue(a.loop1(true));
  Expect.isTrue(a.loop2(true));
  Expect.isTrue(a.loop3(true));
}
