///|
fn run_demo() -> Int {
  println("moon-distinct-sketch demo")
  let hll = @hll.HyperLogLog::new(12)
  let mut i = 0
  while i < 1000 {
    hll.add_string("demo-user-" + i.to_string())
    i = i + 1
  }
  println("hll.distinct=" + hll.cardinality().to_string())

  let tenant = @multitenant.TenantMetricsEngine::new(12)
  tenant.record("demo", "user-a")
  tenant.record("demo", "user-b")
  println("tenant.distinct=" + tenant.get_tenant_uv("demo").to_string())

  let stream = @stream.StreamAggregator::new(
    @stream.StreamConfig::new(60000L, 5000L, 10, 5),
  )
  let _ = stream.ingest(
    @stream.StreamRecord::new(1000L, "demo", "api", "user-a", 1L),
  )
  let _ = stream.ingest(
    @stream.StreamRecord::new(2000L, "demo", "api", "user-b", 2L),
  )
  match stream.tenant_snapshot("demo") {
    Some(snapshot) =>
      println(
        "stream.distinct=" +
        snapshot.distinct.to_string() +
        ",weight=" +
        snapshot.total_weight.to_string(),
      )
    None => println("stream.distinct=0,weight=0")
  }
  0
}