use convergent::{GCounter, LWWRegister, Merge, ORSet, PNCounter};
fn main() {
println!("=== G-Counter ===");
let mut sensor_a = GCounter::new("north");
let mut sensor_b = GCounter::new("south");
sensor_a.increment(12);
sensor_b.increment(8);
println!(
"Before merge: A={}, B={}",
sensor_a.value(),
sensor_b.value()
);
sensor_a.merge(&sensor_b);
println!("After merge: A={}", sensor_a.value());
println!("\n=== PN-Counter ===");
let mut likes_a = PNCounter::new("server-1");
let mut likes_b = PNCounter::new("server-2");
likes_a.increment(10);
likes_b.decrement(3);
likes_a.merge(&likes_b);
println!("Total likes: {}", likes_a.value());
println!("\n=== LWW-Register ===");
let mut reg_a = LWWRegister::new(1);
let mut reg_b = LWWRegister::new(2);
reg_a.set("draft");
std::thread::sleep(std::time::Duration::from_millis(2));
reg_b.set("published");
reg_a.merge(®_b);
println!("Status: {:?}", reg_a.get());
println!("\n=== OR-Set ===");
let mut cart_a = ORSet::new(1);
let mut cart_b = ORSet::new(2);
cart_a.insert("bread");
cart_b.insert("milk");
cart_b.insert("eggs");
cart_a.merge(&cart_b);
println!("Cart: {:?}", cart_a.values());
}