extern crate alloc;
use super::{Doc, dots, seen};
use crate::metis::{DotSet, Purview, UnknownStation};
use alloc::vec::Vec;
#[test]
fn test_rows_start_at_bottom() {
let purview = Purview::new([1, 2, 3]);
for peer in [1, 2, 3] {
assert_eq!(purview.of(peer), Some(&DotSet::new()));
}
assert_eq!(purview.common(), DotSet::new());
}
#[test]
fn test_note_grows_the_row_by_union() {
let mut purview = Purview::new([1, 2]);
purview.note(&seen(1, &[(3, 1), (3, 2)])).unwrap();
purview.note(&seen(1, &[(4, 1)])).unwrap();
assert_eq!(purview.of(1), Some(&dots(&[(3, 1), (3, 2), (4, 1)])));
assert_eq!(purview.of(2), Some(&DotSet::new()));
}
#[test]
fn test_stale_note_is_absorbed() {
let mut purview = Purview::new([1]);
purview.note(&seen(1, &[(1, 1), (1, 2), (1, 3)])).unwrap();
let before = purview.clone();
purview.note(&seen(1, &[(1, 1)])).unwrap();
assert_eq!(purview, before);
}
#[test]
fn test_unknown_peer_note_is_refused_unchanged() {
let mut purview = Purview::new([1, 2]);
purview.note(&seen(1, &[(1, 1)])).unwrap();
let before = purview.clone();
let refused = purview.note(&seen(9, &[(1, 5)]));
assert_eq!(refused, Err(UnknownStation { station: 9 }));
assert_eq!(purview, before);
}
#[test]
fn test_of_and_owed_are_none_off_roster() {
let purview = Purview::new([1, 2]);
let state = Doc::new();
assert_eq!(purview.of(9), None);
assert!(purview.owed(&state, 9).is_none());
}
#[test]
fn test_roster_is_ascending_and_deduplicated() {
let purview = Purview::new([3, 1, 2, 1, 3]);
let roster: Vec<u32> = purview.roster().collect();
assert_eq!(roster, alloc::vec![1, 2, 3]);
}