///|
fn main raise {
  let log = @lens.EventLog::new([
    @lens.LogEvent::new("a1", "job-a", "receive", 0L, 1L),
    @lens.LogEvent::new("a2", "job-a", "repair", 2L, 6L, resource=Some("bench")),
    @lens.LogEvent::new("a3", "job-a", "inspect", 7L, 8L),
    @lens.LogEvent::new("b1", "job-b", "receive", 0L, 1L),
    @lens.LogEvent::new("b2", "job-b", "repair", 2L, 4L, resource=Some("bench")),
    @lens.LogEvent::new("b3", "job-b", "inspect", 5L, 6L),
    @lens.LogEvent::new(
      "b4",
      "job-b",
      "repair",
      7L,
      10L,
      resource=Some("bench"),
    ),
    @lens.LogEvent::new("b5", "job-b", "inspect", 11L, 12L),
  ])
  let standard = @lens.ReferencePath::new("standard", [
    "receive", "repair", "inspect",
  ])
  let rework = @lens.ReferencePath::new("one-rework", [
    "receive", "repair", "inspect", "repair", "inspect",
  ])
  let cases = log.traces()
  assert_eq(cases[0].align([standard, rework]).reference, "standard")
  assert_eq(cases[1].align([standard, rework]).reference, "one-rework")
  assert_eq(log.performance().resources[0].maximum_concurrency, 2)
  assert_eq(log.discover().variants.length(), 2)
  println(@lens.process_map_to_json(log.discover()).stringify())
  println(@lens.performance_to_json(log.performance()).stringify())
}