// 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.
// Dart test for branches. Make sure that shortcuts work, even if they have
// to jump over several expressions.

import "package:expect/expect.dart";

class BranchesTest {
  static bool f() {
    Expect.equals("Never reached", 0);
    return true;
  }

  static void testMain() {
    int checkPointCounter = 1;
    int checkPoint1 = 0;
    int checkPoint2 = 0;
    int checkPoint3 = 0;
    int checkPoint4 = 0;
    int checkPoint5 = 0;
    int checkPoint6 = 0;
    int i = 0;
    for (int i = 0; i < 2; i++) {
      if (i == 0) {
        checkPoint1 += checkPointCounter++;
        if (true ||  // Test branch-if-true.
            f() ||
            f() ||
            f() ||
            f() ||
            f() ||
            f() ||
            f() ||
            f() ||
            f() ||
            f() ||
            f() ||
            f() ||
            f() ||
            f() ||
            f() ||
            f() ||
            f() ||
            f() ||
            f() ||
            f() ||
            f() ||
            f() ||
            f() ||
            f() ||
            f() ||
            f() ||
            f() ||
            f() ||
            f() ||
            f() ||
            f() ||
            f() ||
            f() ||
            f() ||
            f() ||
            f() ||
            f() ||
            f() ||
            f() ||
            f() ||
            f() ||
            f() ||
            f() ||
            f() ||
            f() ||
            f() ||
            f() ||
            f() ||
            f() ||
            f() ||
            f() ||
            f() ||
            f() ||
            f()) {
          checkPoint2 += checkPointCounter++;
        }
      } else {  // Test branch (jumping over the else branch).
        checkPoint3 += checkPointCounter++;
        if (false) {
          checkPoint4 = checkPointCounter++;  // Never reached.
          checkPoint4 = checkPointCounter++;  // Never reached.
          checkPoint4 = checkPointCounter++;  // Never reached.
          checkPoint4 = checkPointCounter++;  // Never reached.
          checkPoint4 = checkPointCounter++;  // Never reached.
          checkPoint4 = checkPointCounter++;  // Never reached.
          checkPoint4 = checkPointCounter++;  // Never reached.
          checkPoint4 = checkPointCounter++;  // Never reached.
          checkPoint4 = checkPointCounter++;  // Never reached.
          checkPoint4 = checkPointCounter++;  // Never reached.
          checkPoint4 = checkPointCounter++;  // Never reached.
          checkPoint4 = checkPointCounter++;  // Never reached.
          checkPoint4 = checkPointCounter++;  // Never reached.
          checkPoint4 = checkPointCounter++;  // Never reached.
          checkPoint4 = checkPointCounter++;  // Never reached.
          checkPoint4 = checkPointCounter++;  // Never reached.
          checkPoint4 = checkPointCounter++;  // Never reached.
          checkPoint4 = checkPointCounter++;  // Never reached.
          checkPoint4 = checkPointCounter++;  // Never reached.
          checkPoint4 = checkPointCounter++;  // Never reached.
          checkPoint4 = checkPointCounter++;  // Never reached.
          checkPoint4 = checkPointCounter++;  // Never reached.
          checkPoint4 = checkPointCounter++;  // Never reached.
          checkPoint4 = checkPointCounter++;  // Never reached.
          checkPoint4 = checkPointCounter++;  // Never reached.
          checkPoint4 = checkPointCounter++;  // Never reached.
          checkPoint4 = checkPointCounter++;  // Never reached.
          checkPoint4 = checkPointCounter++;  // Never reached.
          checkPoint4 = checkPointCounter++;  // Never reached.
          checkPoint4 = checkPointCounter++;  // Never reached.
          checkPoint4 = checkPointCounter++;  // Never reached.
          checkPoint4 = checkPointCounter++;  // Never reached.
          checkPoint4 = checkPointCounter++;  // Never reached.
          checkPoint4 = checkPointCounter++;  // Never reached.
          checkPoint4 = checkPointCounter++;  // Never reached.
          checkPoint4 = checkPointCounter++;  // Never reached.
          checkPoint4 = checkPointCounter++;  // Never reached.
          checkPoint4 = checkPointCounter++;  // Never reached.
          checkPoint4 = checkPointCounter++;  // Never reached.
          checkPoint4 = checkPointCounter++;  // Never reached.
          checkPoint4 = checkPointCounter++;  // Never reached.
          checkPoint4 = checkPointCounter++;  // Never reached.
          checkPoint4 = checkPointCounter++;  // Never reached.
          checkPoint4 = checkPointCounter++;  // Never reached.
          checkPoint4 = checkPointCounter++;  // Never reached.
          checkPoint4 = checkPointCounter++;  // Never reached.
          checkPoint4 = checkPointCounter++;  // Never reached.
          checkPoint4 = checkPointCounter++;  // Never reached.
          checkPoint4 = checkPointCounter++;  // Never reached.
          checkPoint4 = checkPointCounter++;  // Never reached.
          checkPoint4 = checkPointCounter++;  // Never reached.
          checkPoint4 = checkPointCounter++;  // Never reached.
          checkPoint4 = checkPointCounter++;  // Never reached.
          checkPoint4 = checkPointCounter++;  // Never reached.
          checkPoint4 = checkPointCounter++;  // Never reached.
        }
      }
      checkPoint5 += checkPointCounter++;
    }
    checkPoint6 += checkPointCounter++;
    Expect.equals(1, checkPoint1);
    Expect.equals(2, checkPoint2);
    Expect.equals(4, checkPoint3);
    Expect.equals(0, checkPoint4);
    Expect.equals(8, checkPoint5);
    Expect.equals(6, checkPoint6);
  }
}

main() {
  BranchesTest.testMain();
}
