| // 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 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(); | 
 | } |