@@ -171,6 +171,37 @@ TEST(TestEkfDiagnostics, check_measurement_mahalanobis_gate)
171171 EXPECT_TRUE (found_invalid);
172172}
173173
174+ TEST (TestEkfDiagnostics, check_covariance_ellipse)
175+ {
176+ diagnostic_msgs::msg::DiagnosticStatus stat;
177+
178+ const std::string name = " cov_ellipse" ;
179+ const double curr_size = 0.5 ;
180+ const double warn_threshold = 1.0 ;
181+ const double error_threshold = 2.0 ;
182+
183+ // Normal case
184+ stat = check_covariance_ellipse (name, curr_size, warn_threshold, error_threshold, false );
185+ EXPECT_EQ (stat.level , diagnostic_msgs::msg::DiagnosticStatus::OK);
186+
187+ // Warn case
188+ stat = check_covariance_ellipse (name, 1.5 , warn_threshold, error_threshold, false );
189+ EXPECT_EQ (stat.level , diagnostic_msgs::msg::DiagnosticStatus::WARN);
190+
191+ // Error case
192+ stat = check_covariance_ellipse (name, 2.5 , warn_threshold, error_threshold, false );
193+ EXPECT_EQ (stat.level , diagnostic_msgs::msg::DiagnosticStatus::ERROR);
194+
195+ // is_invalid true
196+ stat = check_covariance_ellipse (name, curr_size, warn_threshold, error_threshold, true );
197+ EXPECT_EQ (stat.level , diagnostic_msgs::msg::DiagnosticStatus::WARN);
198+ bool found_invalid = false ;
199+ for (const auto & kv : stat.values ) {
200+ if (kv.key == " cov_ellipse_is_invalid" && kv.value == " True" ) found_invalid = true ;
201+ }
202+ EXPECT_TRUE (found_invalid);
203+ }
204+
174205TEST (TestLocalizationErrorMonitorDiagnostics, merge_diagnostic_status)
175206{
176207 diagnostic_msgs::msg::DiagnosticStatus merged_stat;
0 commit comments