extern crate alloc;
use super::super::super::support::{dot, vv};
use crate::metis::{CausalIdeal, Cut, DotSet, Purview, Received, Stability};
use alloc::vec::Vec;
#[test]
fn test_adoption_bridge_holes_above_the_floor_do_not_move_the_watermark() {
let mut have = DotSet::new();
for (station, counter) in [(1, 1), (1, 2), (2, 1), (2, 3)] {
assert!(have.insert(dot(station, counter)));
}
let cut = Cut::floor_of(&have);
assert_eq!(cut.as_vector(), &vv(&[(1, 2), (2, 1)]));
let mut tracker = Stability::new([1, 2]);
tracker.report(1, &vv(&[(1, 4), (2, 3)])).unwrap();
tracker.report(2, cut.as_vector()).unwrap();
let watermark = tracker.watermark();
assert_eq!(watermark, vv(&[(1, 2), (2, 1)]));
let holes: Vec<_> = have.holes().collect();
assert_eq!(holes, [dot(2, 2)]);
assert!(watermark.get(2) < 2);
}
#[test]
fn test_to_have_set_round_trips() {
let cut = Cut::floor_of(&{
let mut set = DotSet::new();
assert!(set.insert(dot(1, 3)));
assert!(set.insert(dot(4, 1)));
set
});
let embedded = cut.to_have_set();
assert_eq!(embedded.floor(), *cut.as_vector());
assert_eq!(embedded.high_water(), *cut.as_vector());
assert_eq!(embedded.holes().count(), 0);
}
#[test]
fn test_delivered_by_reads_the_buffer_cut() {
let buffer: CausalIdeal<u32> = CausalIdeal::new();
let cut = Cut::delivered_by(&buffer);
assert_eq!(cut, Cut::bottom());
assert_eq!(cut.as_vector(), buffer.delivered());
}
#[test]
fn test_common_of_reads_the_purview_floor() {
let mut view = Purview::new([1u32, 2]);
let mut evidence = DotSet::new();
assert!(evidence.insert(dot(1, 1)));
assert!(evidence.insert(dot(1, 2)));
view.note(&Received::trust(1, evidence.clone())).unwrap();
view.note(&Received::trust(2, evidence)).unwrap();
let cut = Cut::common_of(&view);
assert_eq!(cut.as_vector(), &vv(&[(1, 2)]));
assert_eq!(cut.as_vector(), &view.common_floor());
}