///|
/// A fixed, deterministic workload for external wall-clock measurement.
/// It exercises builder ingestion, indexed point lookups, sweep timelines and
/// versioned archive import. No platform timer is embedded in the library.
fn main raise {
  let builder = try! @temporal.LedgerBuilder::new(maximum=3000)
  for i = 0; i < 2000; i = i + 1 {
    let key = "sensor/" + (i % 16).to_string()
    let start = (i * 31 % 1024).to_int64()
    let end = start + (i % 31 + 1).to_int64()
    builder.append(i.to_int64(), [
      @temporal.Change::put(
        key,
        try! @temporal.Span::new(start, end),
        i.to_string(),
      ),
    ])
  }
  let ledger = builder.freeze()
  assert_eq(ledger.revision_count(), 2000)
  let mut checksum = 0L
  for i = 0; i < 5000; i = i + 1 {
    let key = "sensor/" + (i % 16).to_string()
    let valid_at = (i * 17 % 1024).to_int64()
    match ledger.observe(key, valid_at, 1999L) {
      Some(revision) => checksum = checksum + revision.sequence().to_int64()
      None => checksum = checksum + 1L
    }
  }
  let timeline = try! ledger.timeline(
    "sensor/0",
    try! @temporal.Span::new(0L, 1024L),
    1999L,
  )
  checksum = checksum + timeline.length().to_int64()
  let restored = try! @temporal.Ledger::from_json_string(
    ledger.to_json_string(),
    maximum=3000,
  )
  assert_eq(restored.revision_count(), 2000)
  assert_eq(
    restored.get("sensor/0", 0L, 1999L),
    ledger.get("sensor/0", 0L, 1999L),
  )
  println(
    "revisions=2000 queries=5000 timeline_segments=" +
    timeline.length().to_string(),
  )
  println("checksum=" + checksum.to_string())
}