Skip to main content

clock_basic/
basic.rs

1//! Run with: `cargo run -p reliakit-core --example clock_basic`
2//!
3//! A `Clock` produces the `u64` tick that Reliakit's clock-agnostic policies
4//! expect. `ManualClock` makes that deterministic for tests; `MonotonicClock`
5//! reads real monotonic time.
6
7use reliakit_core::{Clock, ManualClock, MonotonicClock};
8
9fn main() {
10    // Deterministic clock for tests / demos.
11    let clock = ManualClock::new(0);
12    println!("manual t = {}", clock.now());
13    clock.advance(1_000);
14    println!("after advance(1000): t = {}", clock.now());
15
16    // Real monotonic clock (milliseconds since creation).
17    let real = MonotonicClock::new();
18    let a = real.now();
19    let b = real.now();
20    println!("monotonic: {a} -> {b} (non-decreasing: {})", b >= a);
21
22    // Any &Clock works wherever a Clock is expected.
23    println!("via trait object: {}", read(&clock));
24}
25
26fn read(clock: &dyn Clock) -> u64 {
27    clock.now()
28}