///|
pub fn sample_linear_events() -> Array[CausalEvent] {
  let a1 = VectorClock::new().tick("a")
  let b1 = a1.merge(VectorClock::new().tick("b"))
  [
    CausalEvent::new("a1", "a", a1, "create"),
    CausalEvent::new("b1", "b", b1, "reply"),
  ]
}

///|
pub fn sample_concurrent_events() -> Array[CausalEvent] {
  [
    CausalEvent::new("a1", "a", VectorClock::new().tick("a"), "edit-a"),
    CausalEvent::new("b1", "b", VectorClock::new().tick("b"), "edit-b"),
  ]
}

///|
pub fn sample_out_of_order_events() -> Array[CausalEvent] {
  let a1 = VectorClock::new().tick("a")
  let b1 = a1.merge(VectorClock::new().tick("b"))
  [
    CausalEvent::new("b1", "b", b1, "reply before create arrives"),
    CausalEvent::new("a1", "a", a1, "create arrives later"),
  ]
}