use super::Divergence;
#[derive(Debug, Clone, Copy, PartialEq, Eq)]
pub struct ExecutorVector {
pub source: u64,
pub target: u64,
pub label: &'static str,
pub expected: u64,
}
#[must_use]
pub fn executor_reference_vectors() -> Vec<ExecutorVector> {
vec![
ExecutorVector {
source: 1,
target: 2,
label: "knows",
expected: 0x083a_4358_f694_89c6,
},
ExecutorVector {
source: 2,
target: 1,
label: "knows",
expected: 0xa2e9_af24_0f80_a6a6,
},
ExecutorVector {
source: 0,
target: 0,
label: "",
expected: 0x8820_1fb9_60ff_6465,
},
ExecutorVector {
source: 100,
target: 200,
label: "linked_to",
expected: 0x9624_81e1_7255_9460,
},
ExecutorVector {
source: u64::from(u32::MAX),
target: 1,
label: "e",
expected: 0x07dc_c840_67e6_abff,
},
]
}
#[must_use]
pub fn check_executor(edge_id_fn: impl Fn(u64, u64, &str) -> u64) -> Vec<Divergence> {
let mut divergences = Vec::new();
for vector in executor_reference_vectors() {
let actual = edge_id_fn(vector.source, vector.target, vector.label);
if actual != vector.expected {
divergences.push(Divergence {
case: format!(
"hash_edge_id({}, {}, {:?})",
vector.source, vector.target, vector.label
),
expected: format!("{:#018x}", vector.expected),
actual: format!("{actual:#018x}"),
});
}
}
divergences
}