use std::collections::HashSet;
use vyre_primitives::graph::reachable::{reachable as reachable_cpu, UnknownNode};
use vyre_primitives::graph::toposort::{toposort as toposort_cpu, ToposortError};
#[cfg(test)]
pub fn reference_topo_order(
node_count: u32,
edges: &[(u32, u32)],
) -> Result<Vec<u32>, ToposortError> {
use crate::observability::{bump, toposort_calls};
bump(&toposort_calls);
toposort_cpu(node_count, edges)
}
#[cfg(test)]
pub fn reference_reachable_set(
node_count: u32,
edges: &[(u32, u32)],
sources: &[u32],
) -> Result<HashSet<u32>, UnknownNode> {
use crate::observability::{bump, toposort_calls};
bump(&toposort_calls);
reachable_cpu(node_count, edges, sources)
}
#[cfg(test)]
pub fn reference_all_reachable(
node_count: u32,
edges: &[(u32, u32)],
sources: &[u32],
targets: &[u32],
) -> Result<bool, UnknownNode> {
let reach = reference_reachable_set(node_count, edges, sources)?;
Ok(targets.iter().all(|t| reach.contains(t)))
}