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