use super::{check_executor, executor_reference_vectors};
use crate::hash_edge_id;
#[test]
fn core_reference_matches_frozen_golden_table() {
let divergences = check_executor(hash_edge_id);
assert!(
divergences.is_empty(),
"core hash_edge_id diverged from its own golden table: {divergences:?}"
);
}
#[test]
fn golden_expected_values_pin_to_real_derivation() {
for vector in executor_reference_vectors() {
let derived = hash_edge_id(vector.source, vector.target, vector.label);
assert_eq!(
derived, vector.expected,
"frozen expected for ({}, {}, {:?}) does not match hash_edge_id",
vector.source, vector.target, vector.label
);
}
}
#[test]
fn agreeing_candidate_reports_no_divergence() {
let candidate = |source: u64, target: u64, label: &str| hash_edge_id(source, target, label);
let divergences = check_executor(candidate);
assert!(
divergences.is_empty(),
"an agreeing candidate must report no divergence, got: {divergences:?}"
);
}
#[test]
fn constant_candidate_is_detected_as_divergent() {
let candidate = |_s: u64, _t: u64, _l: &str| 0_u64;
let divergences = check_executor(candidate);
assert!(
!divergences.is_empty(),
"a constant candidate must be detected as divergent"
);
let expected_divergent = executor_reference_vectors()
.into_iter()
.filter(|v| v.expected != 0)
.count();
assert_eq!(
divergences.len(),
expected_divergent,
"constant candidate should diverge on every case with a non-zero golden id"
);
}
#[test]
fn single_case_divergence_identifies_the_specific_case() {
let vectors = executor_reference_vectors();
let target_case = vectors
.first()
.copied()
.expect("reference table must be non-empty");
let candidate = |source: u64, target: u64, label: &str| {
let base = hash_edge_id(source, target, label);
if source == target_case.source
&& target == target_case.target
&& label == target_case.label
{
base ^ 1
} else {
base
}
};
let divergences = check_executor(candidate);
assert_eq!(
divergences.len(),
1,
"exactly one case should diverge, got: {divergences:?}"
);
let divergence = &divergences[0];
let expected_case = format!(
"hash_edge_id({}, {}, {:?})",
target_case.source, target_case.target, target_case.label
);
assert_eq!(divergence.case, expected_case);
assert_eq!(
divergence.expected,
format!("{:#018x}", target_case.expected)
);
assert_eq!(
divergence.actual,
format!("{:#018x}", target_case.expected ^ 1)
);
}