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

/**
 * @assertion final int elapsedTicks
 * Returns the elapsed number of clock ticks since calling [start]
 * while the [Stopwatch] is running.
 * Returns the elapsed number of clock ticks between calling [start] and calling
 * [stop].
 * Returns 0 if the [Stopwatch] has never been started.
 * The elapsed number of clock ticks increases by [frequency] every second.
 * @description Checks that the elapsed tick count does not change between
 *              invocations of stop() and start().
 * @author kaigorodov
 */
import "dart:async";
import "../../../Utils/expect.dart";

Duration delay = durationMs(10);
Stopwatch sw = new Stopwatch();
int count = 5;
int e0 = 0;

main() {
  e0 = sw.elapsedTicks;
  asyncStart();
  new Timer(delay, proc1);
}

void proc1() {
  int e1 = sw.elapsedTicks;
  Expect.isTrue(e1 == e0);
  if (count == 0) {
    asyncEnd();
    return;
  }
  count--;
  sw.start();
  sw.stop();
  e0 = sw.elapsedTicks;
  new Timer(delay, proc1);
}
