use crate::graph::GraphNode;
use anyhow::{Result, bail};
pub struct ConformanceSuite;
impl ConformanceSuite {
pub fn verify_equivalence(rivox_nodes: &[GraphNode], native_nodes: &[GraphNode]) -> Result<()> {
if rivox_nodes.len() != native_nodes.len() {
bail!(
"Equivalence mismatch: Rivox resolved {} nodes but native tool resolved {}",
rivox_nodes.len(),
native_nodes.len()
);
}
for node in rivox_nodes {
let matched = native_nodes.iter().any(|n| {
n.ecosystem == node.ecosystem
&& n.package_name == node.package_name
&& n.resolved_version == node.resolved_version
});
if !matched {
bail!(
"Equivalence failure: Node {}:{} ({}) in Rivox graph missing from native resolution",
node.ecosystem,
node.package_name,
node.resolved_version
);
}
}
Ok(())
}
}