feat: complete first MITC4 FEAST eigen implementation validation

This commit is contained in:
KOKO\Mimi
2026-09-10 02:24:04 +09:00
parent 7ebdce373c
commit d5e08f868b
26 changed files with 1452 additions and 82 deletions
@@ -115,4 +115,59 @@ TEST(ReferenceTolerancePolicy,
EXPECT_TRUE(evaluation.families.empty());
}
TEST(ReferenceTolerancePolicy,
EigenFirstImplementationDoesNotRelaxCommonPolicy) {
const std::vector<ReferenceToleranceFamily> families{
MakeFamily("mode-1", {"Value"}, true, {{105.0, 100.0}})};
const auto common = ReferenceTolerancePolicy::Evaluate(families);
const auto eigen =
ReferenceTolerancePolicy::EvaluateMitc4EigenFirstImplementation(families);
ASSERT_TRUE(common.valid);
ASSERT_TRUE(eigen.valid);
EXPECT_FALSE(common.passed);
EXPECT_TRUE(eigen.passed);
EXPECT_DOUBLE_EQ(eigen.families[0].relative_rms, 0.05);
EXPECT_DOUBLE_EQ(common.families[0].relative_rms,
eigen.families[0].relative_rms);
}
TEST(ReferenceTolerancePolicy,
EigenFirstImplementationPreservesZeroAndFiniteChecks) {
for (const auto& row : std::vector<ReferenceToleranceRow>{
{0.0, 0.0}, {1.0, 0.0},
{std::numeric_limits<double>::quiet_NaN(), 1.0}}) {
const auto result =
ReferenceTolerancePolicy::EvaluateMitc4EigenFirstImplementation(
{MakeFamily("mode-1", {"Value"}, true, {row})});
if (!std::isfinite(row.fesa_value)) {
EXPECT_FALSE(result.valid);
EXPECT_FALSE(result.passed);
} else {
ASSERT_TRUE(result.valid);
EXPECT_EQ(result.passed, row.fesa_value == 0.0);
if (row.fesa_value != 0.0) {
EXPECT_EQ(result.families[0].diagnostic_code,
"zero-reference-scale-nonzero-error");
}
}
}
}
TEST(ReferenceTolerancePolicy,
EigenFirstImplementationRejectsNonmodalFamilies) {
for (const auto& families :
std::vector<std::vector<ReferenceToleranceFamily>>{
{},
{MakeFamily("mode-1", {"U1"}, true, {{100.0, 100.0}})},
{MakeFamily("mode-1", {"Value"}, false, {{100.0, 100.0}})},
{MakeFamily("modes", {"Value"}, true,
{{100.0, 100.0}, {100.0, 100.0}})}}) {
const auto result =
ReferenceTolerancePolicy::EvaluateMitc4EigenFirstImplementation(families);
EXPECT_FALSE(result.valid);
EXPECT_FALSE(result.passed);
EXPECT_EQ(result.diagnostic_code, "invalid-eigen-tolerance-family");
}
}
}