anode 0.1.0

Concurrency library for Rust.
Documentation
use std::cmp::Ordering;
use std::time::Duration;
use crate::deadline::Deadline;
use crate::wait::Spin;
use crate::wait::Wait;

#[test]
fn spin_once_on_elapsed_deadline() {
    let mut invocations = 0;
    let result = Spin::wait_until(|| {
        invocations += 1;
        false
    }, Deadline::Elapsed);
    assert!(result.is_err());
    assert_eq!(1, invocations);
}

#[test]
fn spin_a_while() {
    const MAX_INVOCATIONS: u8 = 10;
    let mut invocations = 0;
    let result = Spin::wait_until(|| {
        invocations += 1;
        invocations == MAX_INVOCATIONS
    }, Deadline::Forever);
    assert!(result.is_ok());
    assert_eq!(MAX_INVOCATIONS, invocations);
}

#[test]
fn wait_for_inequality() {
    let result = Spin::wait_for_inequality(|| 69, Ordering::is_eq, &42, Duration::ZERO);
    assert!(result.is_err());

    let result = Spin::wait_for_inequality(|| 69, Ordering::is_lt, &70, Duration::ZERO);
    assert!(result.is_ok());
}