use mdns_proto::{
CollectedAnswer,
wire::{ResourceClass, ResourceType},
};
use super::next_answer_by_seq;
fn answer(seq: u64) -> CollectedAnswer {
CollectedAnswer::from_parts(
ResourceType::Ptr,
ResourceClass::In,
seq.to_be_bytes().to_vec(),
seq,
)
}
#[test]
fn picks_min_seq_not_first_iterated() {
let snapshot = [answer(5), answer(2)];
let picked = next_answer_by_seq(snapshot.iter(), 0).expect("an answer is pending");
assert_eq!(
picked.seq(),
2,
"must surface the minimum seq >= last, not the first iterated (5)"
);
}
#[test]
fn walks_every_retained_answer_in_seq_order() {
let snapshot = [answer(4), answer(2), answer(6), answer(3), answer(5)];
let mut last = 0u64;
let mut delivered = Vec::new();
while let Some(a) = next_answer_by_seq(snapshot.iter(), last) {
delivered.push(a.seq());
last = a.seq().saturating_add(1);
}
assert_eq!(
delivered,
vec![2, 3, 4, 5, 6],
"every retained answer delivered once, in seq order, none skipped"
);
}
#[test]
fn none_when_all_already_delivered() {
let snapshot = [answer(2), answer(3)];
assert!(
next_answer_by_seq(snapshot.iter(), 4).is_none(),
"no answer with seq >= 4 is present"
);
assert!(
next_answer_by_seq([].iter(), 0).is_none(),
"empty snapshot yields nothing"
);
}