// Copyright (c) 2011, 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.
// VMOptions=--optimization-counter-threshold=10

import "package:expect/expect.dart";

main() {
  for (int i = 0; i < 20; i++) {
    Expect.isFalse(test1(5));
    Expect.isTrue(test1(3));

    Expect.isTrue(test2(5));
    Expect.isFalse(test2(3));

    Expect.isTrue(test2r(5));
    Expect.isFalse(test2r(3));

    Expect.isTrue(test3());

    Expect.equals(2, test4(5));
    Expect.equals(1, test4(3));

    Expect.equals(1, test5(5));
    Expect.equals(2, test5(3));

    Expect.equals(1, test6());

    Expect.isFalse(test7());
    Expect.equals(2, test8());

    Expect.isFalse(test9(2));
    Expect.isFalse(test9r(2));
    Expect.isTrue(test9(0));
    Expect.isTrue(test9r(0));

    Expect.isFalse(test10(0));
    Expect.isFalse(test10r(0));
    Expect.isTrue(test10(2));
    Expect.isTrue(test10r(2));

    test11(i);
  }
}

test1(a) {
  return identical(a, 3);
}

test2(a) {
  return !identical(a, 3);
}

test2r(a) {
  return !identical(3, a);
}

test3() {
  return identical(get5(), 5);
}

test4(a) {
  if (identical(a, 3)) {
    return 1;
  } else {
    return 2;
  }
}

test5(a) {
  if (!identical(a, 3)) {
    return 1;
  } else {
    return 2;
  }
}

test6() {
  if (identical(get5(), 5)) {
    return 1;
  } else {
    return 2;
  }
}

get5() {
  return 5;
}

test7() {
  return null != null;
}

test8() {
  if (null != null) {
    return 1;
  } else {
    return 2;
  }
}

test9(a) {
  return identical(a, 0);
}

test9r(a) {
  return identical(0, a);
}

test10(a) {
  return !identical(a, 0);
}

test10r(a) {
  return !identical(0, a);
}

test11(a) {
  if (identical(a, 0)) {
    Expect.isTrue(identical(0, a));
    Expect.isFalse(!identical(a, 0));
    Expect.isFalse(!identical(0, a));
  } else {
    Expect.isFalse(identical(0, a));
    Expect.isTrue(!identical(a, 0));
    Expect.isTrue(!identical(0, a));
  }
}
