Skip to main content

assay_sim/
suite.rs

1use crate::attacks;
2use crate::differential;
3use crate::report::SimReport;
4use anyhow::Result;
5use assay_evidence::VerifyLimits;
6use std::path::PathBuf;
7
8#[derive(Debug, Clone)]
9pub enum SuiteTier {
10    Quick,
11    Nightly,
12    Stress,
13}
14
15#[derive(Debug, Clone)]
16pub struct SuiteConfig {
17    pub tier: SuiteTier,
18    pub target_bundle: PathBuf, // Placeholder for future file-based targets
19    pub seed: u64,
20    pub verify_limits: Option<VerifyLimits>,
21}
22
23pub fn run_suite(cfg: SuiteConfig) -> Result<SimReport> {
24    let mut report = SimReport::new(&format!("{:?}", cfg.tier), cfg.seed);
25
26    // 1. Integrity Attacks
27    attacks::integrity::check_integrity_attacks(&mut report, cfg.seed)?;
28
29    // 2. Differential Testing
30    let iterations = match cfg.tier {
31        SuiteTier::Quick => 5,
32        SuiteTier::Nightly => 100,
33        SuiteTier::Stress => 1000,
34    };
35
36    let start = std::time::Instant::now();
37    let res = differential::check_invariants(iterations, Some(cfg.seed));
38    let duration = start.elapsed().as_millis() as u64;
39
40    report.add_check("differential.invariants", res, duration);
41
42    Ok(report)
43}