@@ -32,7 +32,61 @@ impl<'a> From<(&'a [u8], &'a FixedDataHeader)> for DataRecords<'a> {
32
32
}
33
33
}
34
34
35
+ #[ cfg( all( test, feature = "std" ) ) ]
35
36
mod tests {
37
+ use crate :: user_data:: { data_information:: DataFieldCoding , data_record:: DataRecord } ;
38
+
39
+ #[ test]
40
+ fn test_parse_variable_data_length ( ) {
41
+ use crate :: user_data:: data_information:: DataFieldCoding ;
42
+ use crate :: user_data:: data_information:: DataType ;
43
+ use crate :: user_data:: data_information:: TextUnit ;
44
+ use crate :: user_data:: DataRecords ;
45
+
46
+ let data: & [ u8 ] = & [
47
+ 0x0D , 0x06 , 0xC1 , 0x12 , 0x0D , 0x06 , 0xD3 , 0x12 , 0x34 , 0x56 , 0x0D , 0x06 , 0x02 , 0x31 ,
48
+ 0x32 , 0x0D , 0x06 , 0xE1 , 0xFF , 0x0D , 0x06 , 0x00 ,
49
+ ] ;
50
+
51
+ let records: Vec < DataRecord < ' _ > > = DataRecords :: from ( data) . flatten ( ) . collect ( ) ;
52
+
53
+ assert_eq ! ( records. len( ) , 5 ) ;
54
+ {
55
+ let record = records. get ( 0 ) . unwrap ( ) ;
56
+ let code = get_data_field_coding ( record) ;
57
+ assert_eq ! ( code, DataFieldCoding :: VariableLength ) ;
58
+ let value = record. data . value . clone ( ) . unwrap ( ) ;
59
+ assert_eq ! ( value, DataType :: Number ( 12.0 ) )
60
+ }
61
+ {
62
+ let record = records. get ( 1 ) . unwrap ( ) ;
63
+ let code = get_data_field_coding ( record) ;
64
+ assert_eq ! ( code, DataFieldCoding :: VariableLength ) ;
65
+ let value = record. data . value . clone ( ) . unwrap ( ) ;
66
+ assert_eq ! ( value, DataType :: Number ( -563412.0 ) )
67
+ }
68
+ {
69
+ let record = records. get ( 2 ) . unwrap ( ) ;
70
+ let code = get_data_field_coding ( record) ;
71
+ assert_eq ! ( code, DataFieldCoding :: VariableLength ) ;
72
+ let value = record. data . value . clone ( ) . unwrap ( ) ;
73
+ assert_eq ! ( value, DataType :: Text ( TextUnit :: new( & [ 0x31 , 0x32 ] ) ) )
74
+ }
75
+ {
76
+ let record = records. get ( 3 ) . unwrap ( ) ;
77
+ let code = get_data_field_coding ( record) ;
78
+ assert_eq ! ( code, DataFieldCoding :: VariableLength ) ;
79
+ let value = record. data . value . clone ( ) . unwrap ( ) ;
80
+ assert_eq ! ( value, DataType :: Number ( -1.0 ) )
81
+ }
82
+ {
83
+ let record = records. get ( 4 ) . unwrap ( ) ;
84
+ let code = get_data_field_coding ( record) ;
85
+ assert_eq ! ( code, DataFieldCoding :: VariableLength ) ;
86
+ let value = record. data . value . clone ( ) . unwrap ( ) ;
87
+ assert_eq ! ( value, DataType :: Text ( TextUnit :: new( & [ ] ) ) )
88
+ }
89
+ }
36
90
37
91
#[ test]
38
92
fn test_parse_variable_data ( ) {
@@ -82,4 +136,14 @@ mod tests {
82
136
/* Data block 3: unit 1, storage No 0, tariff 2, instantaneous energy, 218,37 kWh (6 digit BCD) */
83
137
let _data = & [ 0x8B , 0x60 , 0x04 , 0x37 , 0x18 , 0x02 ] ;
84
138
}
139
+
140
+ fn get_data_field_coding ( record : & DataRecord ) -> DataFieldCoding {
141
+ record
142
+ . data_record_header
143
+ . processed_data_record_header
144
+ . data_information
145
+ . clone ( )
146
+ . unwrap ( )
147
+ . data_field_coding
148
+ }
85
149
}
0 commit comments