use crate::raptorq_rfc6330::{
ConformanceContext, ConformanceResult, ConformanceTest, RequirementLevel, TestCategory,
};
pub struct LookupTableV0Test;
impl ConformanceTest for LookupTableV0Test {
fn rfc_clause(&self) -> &str {
"RFC6330-5.5.1"
}
fn section(&self) -> &str {
"5.5"
}
fn requirement_level(&self) -> RequirementLevel {
RequirementLevel::Must
}
fn category(&self) -> TestCategory {
TestCategory::Unit
}
fn description(&self) -> &str {
"Lookup table V0 MUST match RFC 6330 values exactly"
}
fn run(&self, _ctx: &ConformanceContext) -> ConformanceResult {
let _rfc_v0_sample = [251291136u32, 3952231631, 3370958628];
ConformanceResult::Skipped {
reason: "V0 table validation not yet implemented - requires integration with actual RaptorQ module".to_string(),
}
}
fn tags(&self) -> Vec<&str> {
vec!["p0", "lookup-tables", "critical"]
}
}
pub struct LookupTableV1Test;
impl ConformanceTest for LookupTableV1Test {
fn rfc_clause(&self) -> &str {
"RFC6330-5.5.1-V1"
}
fn section(&self) -> &str {
"5.5"
}
fn requirement_level(&self) -> RequirementLevel {
RequirementLevel::Must
}
fn category(&self) -> TestCategory {
TestCategory::Unit
}
fn description(&self) -> &str {
"Lookup table V1 MUST match RFC 6330 values exactly"
}
fn run(&self, _ctx: &ConformanceContext) -> ConformanceResult {
ConformanceResult::Skipped {
reason: "V1 table validation not yet implemented - requires integration with actual RaptorQ module".to_string(),
}
}
fn tags(&self) -> Vec<&str> {
vec!["p0", "lookup-tables", "critical"]
}
}
pub struct SystematicIndexTest;
impl ConformanceTest for SystematicIndexTest {
fn rfc_clause(&self) -> &str {
"RFC6330-5.1.1"
}
fn section(&self) -> &str {
"5.1"
}
fn requirement_level(&self) -> RequirementLevel {
RequirementLevel::Must
}
fn category(&self) -> TestCategory {
TestCategory::Unit
}
fn description(&self) -> &str {
"Systematic index J(K) MUST be calculated according to RFC Table 2"
}
fn run(&self, _ctx: &ConformanceContext) -> ConformanceResult {
ConformanceResult::Skipped {
reason: "Systematic index validation not yet implemented - requires RFC Table 2 reference data".to_string(),
}
}
fn tags(&self) -> Vec<&str> {
vec!["p0", "parameters", "systematic-index", "critical"]
}
}
pub struct SystematicTupleGenerationTest;
impl ConformanceTest for SystematicTupleGenerationTest {
fn rfc_clause(&self) -> &str {
"RFC6330-5.3.1"
}
fn section(&self) -> &str {
"5.3"
}
fn requirement_level(&self) -> RequirementLevel {
RequirementLevel::Must
}
fn category(&self) -> TestCategory {
TestCategory::Differential
}
fn description(&self) -> &str {
"Systematic symbol tuples (d, a, b) MUST be generated using RFC algorithm"
}
fn run(&self, ctx: &ConformanceContext) -> ConformanceResult {
if !ctx.enable_differential {
return ConformanceResult::Skipped {
reason: "Differential testing disabled - no reference implementation available"
.to_string(),
};
}
ConformanceResult::Skipped {
reason: "Systematic tuple generation differential testing not yet implemented"
.to_string(),
}
}
fn dependencies(&self) -> Vec<&str> {
vec!["RFC6330-5.5.1", "RFC6330-5.1.1"] }
fn tags(&self) -> Vec<&str> {
vec!["p0", "tuple-generation", "differential", "critical"]
}
}
pub struct RepairTupleGenerationTest;
impl ConformanceTest for RepairTupleGenerationTest {
fn rfc_clause(&self) -> &str {
"RFC6330-5.3.2"
}
fn section(&self) -> &str {
"5.3"
}
fn requirement_level(&self) -> RequirementLevel {
RequirementLevel::Must
}
fn category(&self) -> TestCategory {
TestCategory::Differential
}
fn description(&self) -> &str {
"Repair symbol tuples (d1, a1, b1) MUST be generated using RFC algorithm"
}
fn run(&self, ctx: &ConformanceContext) -> ConformanceResult {
if !ctx.enable_differential {
return ConformanceResult::Skipped {
reason: "Differential testing disabled - no reference implementation available"
.to_string(),
};
}
ConformanceResult::Skipped {
reason: "Repair tuple generation differential testing not yet implemented".to_string(),
}
}
fn dependencies(&self) -> Vec<&str> {
vec!["RFC6330-5.5.1", "RFC6330-5.1.1"] }
fn tags(&self) -> Vec<&str> {
vec![
"p0",
"tuple-generation",
"differential",
"repair-symbols",
"critical",
]
}
}
pub struct KParameterDerivationTest;
impl ConformanceTest for KParameterDerivationTest {
fn rfc_clause(&self) -> &str {
"RFC6330-4.1.2"
}
fn section(&self) -> &str {
"4.1"
}
fn requirement_level(&self) -> RequirementLevel {
RequirementLevel::Must
}
fn category(&self) -> TestCategory {
TestCategory::Unit
}
fn description(&self) -> &str {
"K source symbols MUST be correctly derived from object size and symbol size"
}
fn run(&self, _ctx: &ConformanceContext) -> ConformanceResult {
ConformanceResult::Skipped {
reason: "K parameter derivation validation not yet implemented".to_string(),
}
}
fn tags(&self) -> Vec<&str> {
vec!["p1", "parameters", "k-derivation"]
}
}
pub fn get_all_example_tests() -> Vec<Box<dyn ConformanceTest>> {
vec![
Box::new(LookupTableV0Test),
Box::new(LookupTableV1Test),
Box::new(SystematicIndexTest),
Box::new(SystematicTupleGenerationTest),
Box::new(RepairTupleGenerationTest),
Box::new(KParameterDerivationTest),
]
}
pub fn get_p0_tests() -> Vec<Box<dyn ConformanceTest>> {
vec![
Box::new(LookupTableV0Test),
Box::new(LookupTableV1Test),
Box::new(SystematicIndexTest),
Box::new(SystematicTupleGenerationTest),
Box::new(RepairTupleGenerationTest),
]
}
pub fn get_section_tests(section: &str) -> Vec<Box<dyn ConformanceTest>> {
let all_tests = get_all_example_tests();
all_tests
.into_iter()
.filter(|test| test.section() == section)
.collect()
}
pub fn get_level_tests(level: RequirementLevel) -> Vec<Box<dyn ConformanceTest>> {
let all_tests = get_all_example_tests();
all_tests
.into_iter()
.filter(|test| test.requirement_level() == level)
.collect()
}