///|
fn main {
  println("MoonTraceKit demo")

  println("case=out_of_order_delivery")
  let events = @causal.sample_out_of_order_events()
  let after_first = @causal.CausalBuffer::new().push(events[0])
  println(after_first.to_json())
  let after_second = after_first.push(events[1]).flush_ready()
  println(after_second.to_json())

  println("case=concurrent_edits")
  let concurrent = @causal.sample_concurrent_events()
  let conflicts = @causal.find_concurrent_pairs(concurrent)
  for pair in conflicts {
    println(pair.to_json())
  }
  println(@causal.causal_frontier(concurrent).to_json())

  println("case=linear_reply")
  let linear = @causal.sample_linear_events()
  println(@causal.compare_events(linear[0], linear[1]).to_json())
}