//! Criterion skeleton for AM-6/AM-7 (GameKernel ยง4), wired to the //! CB-RES-0001 baseline shape (3-player commit/reveal synthetic workload). //! T08 replaces the placeholder body with the real aggregate loop; the //! bench IDs and workload sizes are fixed here so results stay comparable //! to benchmarks/baselines/ recordings. use cb_events::state_hash; use cb_game_runtime::CommitWindow; use cb_kernel::PlayerId; use criterion::{criterion_group, criterion_main, BatchSize, Criterion}; /// Placeholder workload: open/submit/reveal one 3-player commit window and /// hash a small value. Exists so the bench harness, IDs, and baseline /// wiring compile and run before the aggregate exists. fn commit_reveal_round() -> usize { let mut w: CommitWindow = CommitWindow::open([PlayerId(0), PlayerId(1), PlayerId(2)]); for p in 0..3u8 { w.submit(PlayerId(p), p).unwrap(); } let revealed = w.reveal().unwrap(); state_hash(&revealed.len()).len() } fn bench_synthetic(c: &mut Criterion) { let mut group = c.benchmark_group("synthetic-ground-3p"); // AM-6 headline workload sizes; AM-7 compares 5k vs 100k throughput. for &rounds in &[5_000usize, 100_000] { group.bench_function(format!("commit-reveal-{rounds}"), |b| { b.iter_batched( || rounds, |n| { let mut acc = 0usize; for _ in 0..n / 1000 { // Scaffold runs 1/1000th scale until T08 wires the // real aggregate; the group/ID layout is what T07 // delivers. acc += commit_reveal_round(); } acc }, BatchSize::SmallInput, ) }); } group.finish(); } criterion_group!(benches, bench_synthetic); criterion_main!(benches);