Back to Delivery 3 Reliable Quality Utilities

delivery-03-reliable-quality-utilities/src/deterministicClock.ts

import type { Clock } from "./models.js";

/**
 * Advances virtual time instead of waiting on wall-clock time. This keeps the
 * teaching scenarios fast and repeatable while preserving timing reasoning.
 */
export class DeterministicClock implements Clock {
  private currentTimeMs = 0;

  now(): number {
    return this.currentTimeMs;
  }

  async sleep(milliseconds: number): Promise<void> {
    if (!Number.isFinite(milliseconds) || milliseconds < 0) {
      throw new Error(`sleep duration must be a non-negative finite number; received ${milliseconds}.`);
    }

    this.currentTimeMs += milliseconds;
  }
}