blob: dfdeb0ca60173fd7bd016a17e59f639a88f65376 [file] [log] [blame]
// Copyright (c) 2012, 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
// Dart test program for testing stopwatch support.
library stopwatch_test;
import "package:expect/expect.dart";
class StopwatchTest {
static bool checkTicking(Stopwatch sw) {
Expect.isFalse(sw.isRunning);
sw.start();
Expect.isTrue(sw.isRunning);
for (int i = 0; i < 1000000; i++) {
int.parse(i.toString());
if (sw.elapsedTicks > 0) {
break;
}
}
return sw.elapsedTicks > 0;
}
static bool checkStopping(Stopwatch sw) {
sw.stop();
Expect.isFalse(sw.isRunning);
int v1 = sw.elapsedTicks;
Expect.isTrue(v1 > 0); // Expect a non-zero elapsed time.
Stopwatch sw2 = new Stopwatch(); // Used for verification.
sw2.start();
Expect.isTrue(sw2.isRunning);
int sw2LastElapsed = 0;
for (int i = 0; i < 100000; i++) {
int.parse(i.toString());
int v2 = sw.elapsedTicks;
if (v1 != v2) {
return false;
}
// If sw2 elapsed twice then sw must have advanced too if it wasn't
// stopped.
if (sw2LastElapsed > 0 && sw2.elapsedTicks > sw2LastElapsed) {
break;
}
sw2LastElapsed = sw2.elapsedTicks;
}
// The test only makes sense if measureable time elapsed and elapsed time
// on the stopped Stopwatch did not increase.
Expect.isTrue(sw2.elapsedTicks > 0);
return true;
}
static checkRestart() {
Stopwatch sw = new Stopwatch();
Expect.isFalse(sw.isRunning);
sw.start();
Expect.isTrue(sw.isRunning);
for (int i = 0; i < 100000; i++) {
int.parse(i.toString());
if (sw.elapsedTicks > 0) {
break;
}
}
sw.stop();
Expect.isFalse(sw.isRunning);
int initial = sw.elapsedTicks;
sw.start();
Expect.isTrue(sw.isRunning);
for (int i = 0; i < 100000; i++) {
int.parse(i.toString());
if (sw.elapsedTicks > initial) {
break;
}
}
sw.stop();
Expect.isFalse(sw.isRunning);
Expect.isTrue(sw.elapsedTicks > initial);
}
static checkReset() {
Stopwatch sw = new Stopwatch();
Expect.isFalse(sw.isRunning);
sw.start();
Expect.isTrue(sw.isRunning);
for (int i = 0; i < 100000; i++) {
int.parse(i.toString());
if (sw.elapsedTicks > 0) {
break;
}
}
sw.stop();
Expect.isFalse(sw.isRunning);
sw.reset();
Expect.isFalse(sw.isRunning);
Expect.equals(0, sw.elapsedTicks);
sw.start();
Expect.isTrue(sw.isRunning);
for (int i = 0; i < 100000; i++) {
int.parse(i.toString());
if (sw.elapsedTicks > 0) {
break;
}
}
sw.reset();
Expect.isTrue(sw.isRunning);
for (int i = 0; i < 100000; i++) {
int.parse(i.toString());
if (sw.elapsedTicks > 0) {
break;
}
}
sw.stop();
Expect.isFalse(sw.isRunning);
Expect.isTrue(sw.elapsedTicks > 0);
}
static testMain() {
Stopwatch sw = new Stopwatch();
Expect.isTrue(checkTicking(sw));
Expect.isTrue(checkStopping(sw));
checkRestart();
checkReset();
}
}
main() {
StopwatchTest.testMain();
}