///|
fn main raise {
  let window = try! @temporal.Span::new(0L, 100L)
  let ledger = try! @temporal.Ledger::new()
    .commit(10L, [
      @temporal.Change::put("service", window, "on"),
      @temporal.Change::put("license", window, "on"),
    ])
    .commit(20L, [
      @temporal.Change::delete("license", try! @temporal.Span::new(40L, 60L)),
    ])
  let page = try! ledger.batches_since(None, max_revisions=2)
  assert_eq(page.batches()[0].size(), 2)
  assert_true(page.has_more())
  let tail = try! ledger.batches_since(page.next_known_at())
  assert_false(tail.has_more())
  let joint = try! ledger.joint_assigned_spans(
    ["service", "license"],
    window,
    20L,
  )
  assert_eq(joint.length(), 2)
  assert_eq(joint[0].end(), Some(40L))
  assert_eq(joint[1].start(), 60L)
  println("Whole-batch replication pages and joint temporal coverage: ok")
}