///|
fn main raise {
let pattern = @cep.Pattern::new(
"pair",
[@cep.Stage::new("a", @cep.Kind("a")), @cep.Stage::new("b", @cep.Kind("b"))],
100L,
)
let engine = @cep.Engine::new([pattern])
let started = @env.now()
let mut total_work = 0L
let mut matches = 0
for batch in 0..<100 {
for key in 0..<500 {
ignore(
engine.push(
@cep.Event::new("a\{batch}", "k\{key}", (batch * 2).to_int64(), "a"),
),
)
ignore(
engine.push(
@cep.Event::new(
"b\{batch}",
"k\{key}",
(batch * 2 + 1).to_int64(),
"b",
),
),
)
}
let result = engine.advance_watermark((batch * 2 + 1).to_int64())
matches += result.matches().length()
total_work += result.work().to_int64()
}
let elapsed = @env.now() - started
assert_eq(matches, 50000)
assert_eq(engine.active_states(), 0)
println(
"events=100000 matches=\{matches} work=\{total_work} elapsed_ms=\{elapsed}",
)
println(
"Work counts recognition bookkeeping, not a hard CPU or byte-memory bound.",
)
}