| // Copyright (c) 2015, 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. |
| |
| // Test that no wakeups are being dropped if we cancel timers. |
| // WARNING: For this test to work it cannot rely on any other async features |
| // and will just timeout if it is failing. |
| |
| library timer_regress22626_test; |
| |
| import 'dart:async'; |
| import 'dart:math'; |
| import 'package:expect/expect.dart'; |
| |
| int countdown = 5; |
| var rng = new Random(1234); |
| |
| void test(int delay, int delta) { |
| var t0 = new Timer(new Duration(milliseconds: delay + delta), |
| () => Expect.fail("should have been cancelled by now")); |
| new Timer(Duration.ZERO, () => t0.cancel()); |
| new Timer( |
| Duration.ZERO, |
| () => new Timer(new Duration(milliseconds: delay), () { |
| if (--countdown == 0) { |
| print("done"); |
| } else { |
| test(delay, max(0, delta + rng.nextInt(2) - 1)); |
| } |
| })); |
| } |
| |
| void main() { |
| test(200, 2); |
| } |