ready-active-safe 0.1.3

Lifecycle engine for externally driven systems
Documentation
# ManualClock

*Requires feature `time`.*

A deterministic clock for tests and simulation. Time only advances when
you explicitly call [`set`](#set) or [`advance`](#advance).

## Construction

```rust
use ready_active_safe::time::{Clock, Instant, ManualClock};

let clock = ManualClock::new(Instant::from_nanos(0));
assert_eq!(clock.now().as_nanos(), 0);
```

## `set` — jump to an instant

```rust
use ready_active_safe::time::{Clock, Instant, ManualClock};

let clock = ManualClock::new(Instant::from_nanos(0));
clock.set(Instant::from_nanos(5_000_000_000));
assert_eq!(clock.now().as_nanos(), 5_000_000_000);
```

## `advance` — step forward by a duration

```rust
use ready_active_safe::time::{Clock, Instant, ManualClock};
use std::time::Duration;

let clock = ManualClock::new(Instant::from_nanos(0));
clock.advance(Duration::from_secs(1));
assert_eq!(clock.now().as_nanos(), 1_000_000_000);

clock.advance(Duration::from_millis(500));
assert_eq!(clock.now().as_nanos(), 1_500_000_000);
```

## Edge Cases

`advance` saturates at `u64::MAX` on overflow instead of panicking:

```rust
use ready_active_safe::time::{Clock, Instant, ManualClock};
use std::time::Duration;

let clock = ManualClock::new(Instant::from_nanos(u64::MAX - 1));
clock.advance(Duration::from_nanos(100));
assert_eq!(clock.now().as_nanos(), u64::MAX);
```

## See Also

- [`Clock`]clock.md — the trait `ManualClock` implements
- [`SystemClock`]system_clock.md — monotonic wall clock for production
- [`Deadline`]deadline.md — use with `ManualClock` for timeout testing