Skip to content

Commit 1720b5b

Browse files
mat-kiestadelmanma
authored andcommitted
add test for discriminant check, fix bug if first value is invalid
1 parent 98bccd5 commit 1720b5b

File tree

1 file changed

+29
-1
lines changed

1 file changed

+29
-1
lines changed

fitparser/src/de/parser.rs

Lines changed: 29 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -38,7 +38,11 @@ impl Value {
3838
Value::UInt64(val) => *val != 0xFFFF_FFFF_FFFF_FFFF,
3939
Value::UInt64z(val) => *val != 0x0,
4040
Value::Array(vals) => {
41-
if let Some(first) = vals.first().map(discriminant) {
41+
if let Some(first) = vals
42+
.iter()
43+
.find(|&v| !matches!(v, Value::Invalid))
44+
.map(discriminant)
45+
{
4246
let mut same_type = true;
4347
let mut any_valid = false;
4448
for v in vals {
@@ -800,4 +804,28 @@ mod tests {
800804
Ok(..) | Err(..) => {}
801805
};
802806
}
807+
808+
#[test]
809+
fn value_array_is_valid() {
810+
let val = Value::Array(vec![Value::UInt8(0xFF), Value::UInt8(42u8)]);
811+
assert!(
812+
val.is_valid(),
813+
"This Value array should be valid since it contains a valid value"
814+
);
815+
let val = Value::Array(vec![Value::UInt8(0x00), Value::UInt8(42u8)]);
816+
assert!(
817+
val.is_valid(),
818+
"This Value array should be valid since it contains only valid values"
819+
);
820+
let val = Value::Array(vec![Value::Byte(0xFF), Value::Byte(0xFF)]);
821+
assert!(
822+
!val.is_valid(),
823+
"This Value array should be invalid since it contains no valid values"
824+
);
825+
let val = Value::Array(vec![Value::Byte(0x12), Value::UInt8(42u8)]);
826+
assert!(
827+
!val.is_valid(),
828+
"This Value array should be invalid since it contains differing discriminants"
829+
);
830+
}
803831
}

0 commit comments

Comments
 (0)