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

import "package:expect/expect.dart";

void do1() {
  bool cond = true;
  var result = 0;
  var x = 0;
  do {
    if (x == 10) cond = false;
    result += x;
    x = x + 1;
  } while (cond);
  Expect.equals(55, result);
}

void do2() {
  var t = 0;
  var i = 0;
  do {
    t = t + 10;
    i++;
  } while (i == 0);
  Expect.equals(10, t);
}

void do3() {
  var i = 0;
  do {
    i++;
  } while (false);
  Expect.equals(1, i);
}

void do4() {
  var cond1 = true;
  var result = 0;
  var i = 0;
  do {
    if (i == 9) cond1 = false;
    var cond2 = true;
    var j = 0;
    do {
      if (j == 9) cond2 = false;
      result = result + 1;
      j = j + 1;
    } while (cond2);
    i = i + 1;
  } while (cond1);
  Expect.equals(100, result);
}

void main() {
  do1();
  do2();
  do3();
  do4();
}
