extern crate alloc;
use super::super::editor::{Replica, gossip_cursors};
#[test]
fn test_cursors_converge_as_registers() {
let roster = [1u32, 2u32];
let mut a = Replica::new(1, &roster);
let mut b = Replica::new(2, &roster);
a.move_cursor(10, 3);
a.move_cursor(10, 7);
assert_eq!(a.cursor_positions(10), alloc::vec![7]);
a.move_cursor(20, 42);
assert_eq!(a.cursor_positions(20), alloc::vec![42]);
gossip_cursors(&a, &mut b);
assert_eq!(b.cursor_positions(10), alloc::vec![7]);
assert_eq!(b.cursor_positions(20), alloc::vec![42]);
let mut c = Replica::new(1, &roster);
let mut d = Replica::new(2, &roster);
c.move_cursor(30, 100);
d.move_cursor(30, 200);
gossip_cursors(&d, &mut c);
gossip_cursors(&c, &mut d);
let mut c_vals = c.cursor_positions(30);
let mut d_vals = d.cursor_positions(30);
c_vals.sort_unstable();
d_vals.sort_unstable();
assert_eq!(
c_vals,
alloc::vec![100, 200],
"concurrent same-key writes are siblings"
);
assert_eq!(c_vals, d_vals);
}