minerva 0.2.0

Causal ordering for distributed systems
use crate::kairos::{TimeSource, VirtualTimeSource};

#[test]
fn test_virtual_time_source_is_caller_advanced_and_shared() {
    let source = VirtualTimeSource::new(10);
    let driver = source.clone();

    // Reading does not advance the source (the contrast with TickCounter).
    assert_eq!(source.now(), 10);
    assert_eq!(source.now(), 10);

    // A clone shares one clock: the driver moves what the source reads.
    driver.advance(5);
    assert_eq!(source.now(), 15);

    // set moves in either direction (the skew-replay capability).
    driver.set(3);
    assert_eq!(source.now(), 3);

    // advance saturates rather than wrapping past the ceiling.
    driver.set(u64::MAX);
    driver.advance(1);
    assert_eq!(source.now(), u64::MAX);
}