Files
airdef/airdef-mod/tests/core_boundary.rs
T
chexit 5f07027faa Build canonical simulation without Horizon SDK and remove hidden launch fixes (#87 #107)
Preserve the adapter facade and move adapter-only checks out of domain tests. Late tracks do not reveal an unseen launch origin or its timestamp.

Co-Authored-By: Codex GPT-6.1 Terra <noreply@openai.com>
2026-11-02 01:17:03 +03:00

38 lines
1.7 KiB
Rust

//! The adapter re-exports the actual core types and keeps deterministic combat traces.
use glam::DVec3;
macro_rules! trace {
($sim:path) => {{
use $sim::{DroneKind, Ground, Out, Sam, SamKind, Sim};
let mut sim = Sim::new(0x87);
let id = sim.id();
sim.sams.push(Sam::new(id, SamKind::Patriot, DVec3::new(0.0, 64.0, 0.0), 0.0));
let mut out = Out::default();
for (i, kind) in [DroneKind::Shahed, DroneKind::Kh101, DroneKind::Iskander].into_iter().enumerate() {
sim.launch(kind, DVec3::new(i as f64 * 100.0, 110.0, 800.0), -DVec3::Z, DVec3::new(0.0, 64.0, 0.0), &mut out);
}
let mut ground = Ground::default();
let mut trace = Vec::new();
for _ in 0..600 {
let wanted = ground.take_wanted();
ground.answer(wanted.into_iter().map(|(x, z)| (x, z, 64)).collect(), sim.tick);
out = Out::default();
sim.step(&mut ground, None, &mut out);
trace.push(format!("{}:{}:{}:{}:{:?}:{:?}:{:?}:{:?}", sim.tick, sim.launched, sim.kills, sim.hits,
sim.sams.iter().map(|s| (s.id, s.missiles, s.fired, s.health)).collect::<Vec<_>>(),
sim.drones.iter().map(|d| (d.id, d.pos, d.vel)).collect::<Vec<_>>(),
sim.missiles.iter().map(|m| (m.id, m.pos)).collect::<Vec<_>>(), out.messages));
}
(trace, sim.sams.iter().map(|s| s.fired).sum::<u32>())
}};
}
#[test]
fn adapter_reexports_core_and_combat_trace_is_deterministic() {
let _: airdef_core::sim::Sim = airdef::sim::Sim::new(1);
let adapter = trace!(airdef::sim);
let core = trace!(airdef_core::sim);
assert_eq!(adapter, core);
assert!(adapter.1 > 0, "the trace must include actual interceptor launches");
}