File tree Expand file tree Collapse file tree 1 file changed +29
-1
lines changed Expand file tree Collapse file tree 1 file changed +29
-1
lines changed Original file line number Diff line number Diff line change @@ -38,7 +38,11 @@ impl Value {
38
38
Value :: UInt64 ( val) => * val != 0xFFFF_FFFF_FFFF_FFFF ,
39
39
Value :: UInt64z ( val) => * val != 0x0 ,
40
40
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
+ {
42
46
let mut same_type = true ;
43
47
let mut any_valid = false ;
44
48
for v in vals {
@@ -800,4 +804,28 @@ mod tests {
800
804
Ok ( ..) | Err ( ..) => { }
801
805
} ;
802
806
}
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
+ }
803
831
}
You can’t perform that action at this time.
0 commit comments