advanceTo method

Future<void> advanceTo(
  1. DateTime instant
)

Move time to instant and complete every due sleep.

Implementation

Future<void> advanceTo(DateTime instant) async {
  if (instant.isBefore(_now)) {
    throw ArgumentError.value(
      instant,
      'instant',
      'must not be earlier than the current manual time',
    );
  }

  _now = instant;
  final due = <_ManualSleep>[
    for (final sleep in _pending)
      if (!sleep.deadline.isAfter(_now)) sleep,
  ];
  due.sort((left, right) => left.deadline.compareTo(right.deadline));
  for (final sleep in due) {
    if (!sleep.completer.isCompleted) sleep.completer.complete();
  }

  await Future<void>.value();
}