// 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.

test1(bool passed, [a = 42]) {
  if (passed) {
    Expect.equals(54, a);
    Expect.isTrue(?a);
  } else {
    Expect.equals(42, a);
    Expect.isFalse(?a);
  }
  Expect.isTrue(?passed);
}

test2() {
  var closure = (passed, [a = 42]) {
    if (passed) {
      Expect.equals(54, a);
      Expect.isTrue(?a);
    } else {
      Expect.equals(42, a);
      Expect.isFalse(?a);
    }
    Expect.isTrue(?passed);
  };
  closure(true, 54);
  closure(false);
}

class A {
  test3(bool passed, [a = 42]) {
    if (passed) {
      Expect.equals(54, a);
      Expect.isTrue(?a);
    } else {
      Expect.equals(42, a);
      Expect.isFalse(?a);
    }
    Expect.isTrue(?passed);
  }
}


test4(bool passed, [a]) {
  if (passed) {
    Expect.equals(54, a);
    Expect.isTrue(?a);
  } else {
    Expect.equals(null, a);
    Expect.isFalse(?a);
  }
  Expect.isTrue(?passed);
}

int inscrutable(int x) => x == 0 ? 0 : x | inscrutable(x & (x - 1));

main() {
  test1(true, 54);
  test1(false);
  test2();
  new A().test3(true, 54);
  new A().test3(false);

  var things = [test1, test2, new A().test3];

  var closure = things[inscrutable(0)];
  closure(true, 54);
  closure(false);

  closure = things[inscrutable(1)];
  closure();

  closure = things[inscrutable(2)];
  closure(true, 54);
  closure(false);

  test4(true, 54);
  test4(false);
}
