liminal-protocol 0.3.2

Shared participant-lifecycle protocol types for liminal
Documentation
use super::floor_transition;

#[test]
fn multiple_claims_match_the_document_floor_walk() {
    let floor = floor_transition(1, Some(10), 100, 100, 25);

    assert_eq!(floor.member_cursor, 10);
    assert_eq!(floor.preferred_floor, 11);
    assert_eq!(floor.resulting_floor, 25);
}

#[test]
fn final_leave_substitutes_candidate_watermark_for_empty_membership() {
    let after_leave = floor_transition(1, None, 101, 100, 101);
    assert_eq!(after_leave.member_cursor, 101);
    assert_eq!(after_leave.preferred_floor, 101);
    assert_eq!(after_leave.resulting_floor, 101);

    let after_projection = floor_transition(101, None, 101, 101, 102);
    assert_eq!(after_projection.preferred_floor, 102);
    assert_eq!(after_projection.resulting_floor, 102);
}

#[test]
fn a_late_cursor_zero_member_never_lowers_the_floor() {
    let floor = floor_transition(25, Some(0), 101, 100, 25);

    assert_eq!(floor.preferred_floor, 1);
    assert_eq!(floor.resulting_floor, 25);
}

#[test]
fn one_past_maximum_is_representable() {
    let floor = floor_transition(
        u128::from(u64::MAX),
        None,
        u64::MAX,
        u64::MAX,
        u128::from(u64::MAX) + 1,
    );

    assert_eq!(floor.preferred_floor, u128::from(u64::MAX) + 1);
    assert_eq!(floor.resulting_floor, u128::from(u64::MAX) + 1);
}