use super::declaration::{FinalizerEntryPoint, FINALIZER_ENTRY_POINTS};
#[derive(Debug, Clone, Copy, PartialEq, Eq, PartialOrd, Ord, Hash)]
#[allow(dead_code)] pub(crate) enum MatrixCaseKind {
LegacyScannerBehavior,
FixtureMatch,
OneByteMiss,
WrongScopeMiss,
ReservedKeyMutation,
SupportedEcho,
RecordWriteFailure,
StampFailure,
SuccessAuditFailure,
SecondOrderFailureAuditFailure,
OneSnapshotRefreshRace,
}
impl MatrixCaseKind {
pub(crate) const ALL: &'static [MatrixCaseKind] = &[
MatrixCaseKind::LegacyScannerBehavior,
MatrixCaseKind::FixtureMatch,
MatrixCaseKind::OneByteMiss,
MatrixCaseKind::WrongScopeMiss,
MatrixCaseKind::ReservedKeyMutation,
MatrixCaseKind::SupportedEcho,
MatrixCaseKind::RecordWriteFailure,
MatrixCaseKind::StampFailure,
MatrixCaseKind::SuccessAuditFailure,
MatrixCaseKind::SecondOrderFailureAuditFailure,
MatrixCaseKind::OneSnapshotRefreshRace,
];
}
#[derive(Debug, Clone, Copy, PartialEq, Eq)]
#[allow(dead_code)] pub(crate) struct MatrixRow {
pub(crate) entry_point: &'static FinalizerEntryPoint,
pub(crate) case: MatrixCaseKind,
}
#[allow(dead_code)] pub(crate) fn generated_acceptance_matrix() -> Vec<MatrixRow> {
let mut rows = Vec::with_capacity(FINALIZER_ENTRY_POINTS.len() * MatrixCaseKind::ALL.len());
for entry_point in FINALIZER_ENTRY_POINTS {
for &case in MatrixCaseKind::ALL {
rows.push(MatrixRow { entry_point, case });
}
}
rows
}
#[cfg(test)]
mod tests {
use super::*;
use std::collections::BTreeSet;
#[test]
fn generation_produces_full_cross_product() {
let rows = generated_acceptance_matrix();
assert_eq!(
rows.len(),
FINALIZER_ENTRY_POINTS.len() * MatrixCaseKind::ALL.len()
);
assert_eq!(rows[0].entry_point.id, "entity.create");
assert_eq!(rows[0].case, MatrixCaseKind::LegacyScannerBehavior);
}
#[test]
fn completeness_covers_every_entry_point_and_case_kind() {
let rows = generated_acceptance_matrix();
for entry_point in FINALIZER_ENTRY_POINTS {
let cases_for_entry: BTreeSet<MatrixCaseKind> = rows
.iter()
.filter(|row| row.entry_point.id == entry_point.id)
.map(|row| row.case)
.collect();
let expected: BTreeSet<MatrixCaseKind> = MatrixCaseKind::ALL.iter().copied().collect();
assert_eq!(
cases_for_entry, expected,
"entry point {} is missing required case coverage",
entry_point.id
);
}
let pairs: BTreeSet<(&str, MatrixCaseKind)> = rows
.iter()
.map(|row| (row.entry_point.id, row.case))
.collect();
assert_eq!(
pairs.len(),
rows.len(),
"generated matrix contains a duplicate (entry point, case) pair"
);
}
#[test]
fn stability_is_deterministic_across_calls() {
let first = generated_acceptance_matrix();
let second = generated_acceptance_matrix();
assert_eq!(first, second);
let ids_first: Vec<&str> = first.iter().map(|row| row.entry_point.id).collect();
let ids_second: Vec<&str> = second.iter().map(|row| row.entry_point.id).collect();
assert_eq!(ids_first, ids_second);
}
#[test]
fn visibility_exposes_exactly_the_declared_entry_points() {
let rows = generated_acceptance_matrix();
let visible_ids: BTreeSet<&str> = rows.iter().map(|row| row.entry_point.id).collect();
let expected_ids: BTreeSet<&str> = [
"entity.create",
"entity.update",
"entity.bulk",
"note.create",
"note.update",
"note.atomic_message",
]
.into_iter()
.collect();
assert_eq!(visible_ids, expected_ids);
}
}