irtt-client 0.1.1

IRTT-compatible Rust client library
Documentation
use super::*;
use std::time::Instant;

use crate::{
    probe::{CompletedSet, PendingMap, TimedOutMap},
    session::ActiveSession,
};

#[test]
fn sequence_ordering_handles_normal_and_wrapped_values() {
    assert!(sequence_is_after(11, 10));
    assert!(sequence_is_before(9, 10));
    assert!(!sequence_is_after(10, 10));
    assert!(!sequence_is_before(10, 10));

    assert!(sequence_is_after(0, u32::MAX - 1));
    assert!(!sequence_is_before(0, u32::MAX - 1));
    assert!(sequence_is_after(1, u32::MAX));
    assert!(!sequence_is_before(1, u32::MAX));

    assert!(sequence_is_before(u32::MAX, 1));
    assert!(!sequence_is_after(u32::MAX, 1));
}

#[test]
fn highest_received_seq_updates_across_wrap() {
    let mut session = ActiveSession {
        next_wire_seq: 0,
        next_logical_seq: 0,
        highest_received_seq: Some(u32::MAX),
        packets_sent: 0,
        start_mono: Instant::now(),
        end_mono: None,
        next_send_at: Instant::now(),
        pending: PendingMap::new(8),
        timed_out: TimedOutMap::new(8),
        completed: CompletedSet::new(8),
        sending_done: false,
    };

    update_highest_received(&mut session, 0);
    assert_eq!(session.highest_received_seq, Some(0));
    update_highest_received(&mut session, u32::MAX);
    assert_eq!(session.highest_received_seq, Some(0));
}