///|
/// Deterministic operation-count benchmark for streaming telemetry.
fn main {
let count = 100000
let stats = @signal.OnlineMoments::new()
let detector = @signal.CusumDetector::new(100.0, 0.2, 8.0)
let rolling = @signal.RollingWindow::new(256)
let filter = @signal.EwmaFilter::new(250)
let mut changes = 0
for i = 0; i < count; i = i + 1 {
let phase = i / 25000 % 2
let baseline = if phase == 0 { 100.0 } else { 101.0 }
let noise = (i * 17 % 9 - 4).to_double() / 10.0
let value = baseline + noise
let cleaned = filter.push(@signal.Sample::new(i, value))
rolling.push(cleaned)
stats.push(cleaned.value)
match detector.push(cleaned) {
Some(_) => changes = changes + 1
None => ()
}
}
println("scenario,samples,retained_samples,mean,variance,p95,changes")
println(
"stream-100k,\{count},\{rolling.length()},\{stats.mean},\{stats.variance()},\{rolling.quantile(950)},\{changes}",
)
}