///|
fn main raise {
  let events : Array[@lens.LogEvent] = []
  for i = 0; i < 20000; i = i + 1 {
    let base = i.to_int64() * 100L
    for j, activity in ["create", "approve", "ship"] {
      events.push(
        @lens.LogEvent::new(
          "\{i}/\{j}",
          "order/\{i}",
          activity,
          base + j.to_int64() * 10L,
          base + j.to_int64() * 10L + 5L,
          resource=Some("shared-worker"),
        ),
      )
    }
  }
  let started = @env.now()
  let log = @lens.EventLog::new(events, max_cases=20000)
  let graph = log.discover()
  let report = log.performance()
  let aligned = log.align([
    @lens.ReferencePath::new("normal", ["create", "approve", "ship"]),
  ])
  assert_eq(graph.variants.length(), 1)
  assert_eq(graph.edges[0].occurrences, 20000)
  assert_eq(aligned.length(), 20000)
  assert_true(aligned.all(result => result.cost == 0))
  assert_eq(report.resources[0].maximum_concurrency, 1)
  assert_true(report.cycle_times.p95 == Some(25L))
  println(
    "process_events=60000 cases=20000 variants=1 aligned=20000 elapsed_ms=\{@env.now()-started}",
  )
}