@@ -67,8 +67,8 @@ fn test_csv_field_count_consistency() {
6767}
6868
6969#[ test]
70- fn test_flag_fields_are_numeric ( ) {
71- // Test that flag fields output numeric values, not text strings
70+ fn test_flag_fields_are_formatted ( ) {
71+ // Test that flag fields output formatted text values, not raw numeric values
7272 let output_dir = "/tmp/csv_flag_test" ;
7373 let input_file = "input/BTFL_BLACKBOX_LOG_20250512_021116_MAMBAF722_2022B.BBL" ;
7474
@@ -116,44 +116,76 @@ fn test_flag_fields_are_numeric() {
116116
117117 assert ! ( !flag_indices. is_empty( ) , "No flag fields found" ) ;
118118
119- // Check first few data rows for numeric flag values
119+ // Check first few data rows for formatted flag values
120120 for ( row_num, line) in lines. iter ( ) . enumerate ( ) . skip ( 1 ) . take ( 10 ) {
121121 let fields: Vec < & str > = line. split ( ',' ) . map ( |s| s. trim ( ) ) . collect ( ) ;
122122
123123 for & flag_idx in & flag_indices {
124124 if flag_idx < fields. len ( ) {
125125 let flag_value = fields[ flag_idx] ;
126-
127- // Flag should be numeric (parse as integer)
128- let is_numeric = flag_value. parse :: < i32 > ( ) . is_ok ( ) ;
129- assert ! (
130- is_numeric,
131- "Row {} field {} ({}) should be numeric but got: '{}'" ,
132- row_num + 1 ,
133- flag_idx,
134- field_names[ flag_idx] ,
135- flag_value
136- ) ;
137-
138- // Flag should not contain text like "ARM", "SERVO1", etc.
139- let has_text_flags = flag_value. contains ( "ARM" )
140- || flag_value. contains ( "SERVO" )
141- || flag_value. contains ( "IDLE" )
142- || flag_value. contains ( "ANGLE" ) ;
143-
144- assert ! (
145- !has_text_flags,
146- "Row {} field {} ({}) contains text flags: '{}'" ,
147- row_num + 1 ,
148- flag_idx,
149- field_names[ flag_idx] ,
150- flag_value
151- ) ;
126+ let field_name = field_names[ flag_idx] ;
127+
128+ // Flag should contain expected formatted values, not raw numbers
129+ if field_name == "failsafePhase (flags)" {
130+ // Should contain failsafe phase names like "IDLE", "RX_LOSS_DETECTED", etc.
131+ let is_valid_failsafe = flag_value == "IDLE"
132+ || flag_value == "RX_LOSS_DETECTED"
133+ || flag_value == "LANDING"
134+ || flag_value == "LANDED"
135+ || flag_value == "RX_LOSS_MONITORING"
136+ || flag_value == "RX_LOSS_RECOVERED"
137+ || flag_value == "GPS_RESCUE"
138+ || flag_value. parse :: < i32 > ( ) . is_ok ( ) ; // Allow numeric fallback for unknown values
139+
140+ assert ! (
141+ is_valid_failsafe,
142+ "Row {} field {} should contain valid failsafe phase but got: '{}'" ,
143+ row_num + 1 ,
144+ field_name,
145+ flag_value
146+ ) ;
147+ } else if field_name == "flightModeFlags (flags)" {
148+ // Should contain flight mode names or "0" for no flags
149+ let is_valid_flight_mode = flag_value == "0"
150+ || flag_value. contains ( "ANGLE_MODE" )
151+ || flag_value. contains ( "HORIZON_MODE" )
152+ || flag_value. contains ( "MAG" )
153+ || flag_value. contains ( "BARO" )
154+ || flag_value. contains ( "GPS_HOLD" )
155+ || flag_value. contains ( "HEADFREE" )
156+ || flag_value. contains ( "PASSTHRU" )
157+ || flag_value. contains ( "FAILSAFE_MODE" )
158+ || flag_value. contains ( "GPS_RESCUE_MODE" ) ;
159+
160+ assert ! (
161+ is_valid_flight_mode,
162+ "Row {} field {} should contain valid flight modes but got: '{}'" ,
163+ row_num + 1 ,
164+ field_name,
165+ flag_value
166+ ) ;
167+ } else if field_name == "stateFlags (flags)" {
168+ // Should contain state flag names or "0" for no flags
169+ let is_valid_state = flag_value == "0"
170+ || flag_value. contains ( "GPS_FIX_HOME" )
171+ || flag_value. contains ( "GPS_FIX" )
172+ || flag_value. contains ( "CALIBRATE_MAG" )
173+ || flag_value. contains ( "SMALL_ANGLE" )
174+ || flag_value. contains ( "FIXED_WING" ) ;
175+
176+ assert ! (
177+ is_valid_state,
178+ "Row {} field {} should contain valid state flags but got: '{}'" ,
179+ row_num + 1 ,
180+ field_name,
181+ flag_value
182+ ) ;
183+ }
152184 }
153185 }
154186 }
155187
156- println ! ( "✅ All flag fields contain numeric values (no text strings) " ) ;
188+ println ! ( "✅ All flag fields contain properly formatted text values " ) ;
157189}
158190
159191#[ test]
0 commit comments