// Copyright (c) 2014, 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 = 2.9

import "package:expect/expect.dart";

baz() {}

loop1(x) {
  var n = 0;
  while (n < x) {
    n = n + 1;
  }
  return n;
}

loop2(x) {
  var n = 0;
  if (x < 100) {
    while (n < x) {
      n = n + 1;
    }
  }
  baz();
  return n;
}

loop3(x) {
  var n = 0;
  if (x < 100) {
    while (n < x) {
      n = n + 1;
      baz();
    }
  }
  baz();
  return n;
}

loop4(x) {
  var n = 0;
  if (x < 100) {
    while (n < x) {
      baz();
      n = n + 1;
    }
  }
  baz();
  return n;
}

f1(b) {
  while (b) return 1;

  return 2;
}

f2(b) {
  while (b) {
    return 1;
  }
  return 2;
}

main() {
  Expect.equals(0, loop1(-10));
  Expect.equals(10, loop1(10));

  Expect.equals(0, loop2(-10));
  Expect.equals(10, loop2(10));
  Expect.equals(0, loop2(200));

  Expect.equals(0, loop3(-10));
  Expect.equals(10, loop3(10));
  Expect.equals(0, loop3(200));

  Expect.equals(0, loop4(-10));
  Expect.equals(10, loop4(10));
  Expect.equals(0, loop4(200));

  Expect.equals(1, f1(true));
  Expect.equals(2, f1(false));
  Expect.equals(1, f2(true));
  Expect.equals(2, f2(false));
}
