#[cfg(test)]
mod tests {
use crate::*;
use dirtydata_core::ir::{Graph, Node};
use dirtydata_core::types::{NodeKind, StableId, ConfigValue, ConfidenceScore};
use std::collections::BTreeMap;
#[test]
fn test_jit_null_equivalence() {
let mut graph = Graph::new();
let osc_id = StableId::new();
let gain_id = StableId::new();
let mut osc_config = BTreeMap::new();
osc_config.insert("frequency".into(), ConfigValue::Float(440.0));
graph.nodes.insert(osc_id, Node { id: osc_id, kind: NodeKind::Source, config: osc_config, ports: vec![], confidence: ConfidenceScore::Verified, metadata: Default::default() });
let mut gain_config = BTreeMap::new();
gain_config.insert("gain".into(), ConfigValue::Float(0.5));
graph.nodes.insert(gain_id, Node { id: gain_id, kind: NodeKind::Processor, config: gain_config, ports: vec![], confidence: ConfidenceScore::Verified, metadata: Default::default() });
let mut runner = DspRunner::new(graph.clone(), None, 44100.0);
let mut compiler = jit::JitCompiler::new();
let mut jit_prog = compiler.compile_runner(&runner);
for i in 0..1000 {
let test_ctx = nodes::base::ProcessContext {
sample_rate: 44100.0,
global_sample_index: i as u64,
crash_flag: None,
osc_tx: None,
convergence_info: None,
node_diagnostics: None,
node_id: None,
};
let out_std = runner.process_sample(&test_ctx);
let out_jit = jit_prog.execute(&test_ctx);
assert!((out_std[0] - out_jit[0]).abs() < 1e-6, "Sample {}: JIT deviation detected! Std: {}, Jit: {}", i, out_std[0], out_jit[0]);
}
}
}