use super::super::super::support::dot;
use super::{Doc, dots, seen, write};
use crate::metis::{DotStore, Purview};
#[test]
fn test_owed_is_delta_for_against_the_row() {
let mut state = Doc::new();
write(&mut state, 1, 7);
write(&mut state, 1, 7);
let mut purview = Purview::new([1]);
purview.note(&seen(1, &[(1, 1)])).unwrap();
let owed = purview.owed(&state, 1).unwrap();
let expected = state.delta_for(&dots(&[(1, 1)]));
assert_eq!(owed, expected);
assert!(owed.store().dots().any(|d| d == dot(1, 2)));
assert!(!owed.store().dots().any(|d| d == dot(1, 1)));
}
#[test]
fn test_under_claimed_row_over_ships_but_still_converges() {
let mut state = Doc::new();
write(&mut state, 1, 7);
write(&mut state, 1, 7);
let peer_true = Doc::new().merge(&state);
let mut purview = Purview::new([1]);
purview.note(&seen(1, &[(1, 1)])).unwrap();
let owed = purview.owed(&state, 1).unwrap();
assert_eq!(peer_true.merge(&owed), peer_true.merge(&state));
}
#[test]
fn test_over_claimed_evidence_via_trust_under_ships() {
let mut state = Doc::new();
write(&mut state, 1, 7);
write(&mut state, 1, 7);
let peer_true = Doc::new();
let mut purview = Purview::new([1]);
purview.note(&seen(1, &[(1, 1), (1, 2)])).unwrap();
let owed = purview.owed(&state, 1).unwrap();
let via_owed = peer_true.merge(&owed);
let via_full = peer_true.merge(&state);
assert_ne!(via_owed, via_full);
assert!(via_owed.store().get(&7).is_none());
assert!(via_full.store().get(&7).is_some());
}