1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
#[cfg(test)]
mod test_get {
bitrange! {
IpHeader: u32, // struct name
[aaaa_bbbb_cccccccc_dddddddddddddddd], // pattern that we're matching against
a: version, // map character 'a' to field 'version'
b: ihl, // map character 'b' to field 'ihl'
c: type_of_service, // map character 'c' to field 'type_of_service'
d: total_length // map character 'd' to field 'total_length'
}
#[test]
fn test() {
let header = IpHeader::from(0b0001_0010_00000011_0000000000000100).unwrap();
assert_eq!(header.version(), 0b0001);
assert_eq!(header.ihl(), 0b0010);
assert_eq!(header.type_of_service(), 0b0011);
assert_eq!(header.total_length(), 0b0100);
}
}
#[cfg(test)]
mod test_set {
bitrange! {
IpHeader: u32, // struct name
[aaaa_bbbb_cccccccc_dddddddddddddddd], // pattern that we're matching against
a: version set_version, // map character 'a' to field 'version', and create setter 'set_version'
b: ihl, // map character 'b' to field 'ihl'
c: type_of_service, // map character 'c' to field 'type_of_service'
d: total_length // map character 'd' to field 'total_length'
}
#[test]
fn test() {
let mut header = IpHeader::from(0b0001_0010_00000011_0000000000000100).unwrap();
assert_eq!(header.version(), 0b0001);
assert_eq!(header.ihl(), 0b0010);
assert_eq!(header.type_of_service(), 0b0011);
assert_eq!(header.total_length(), 0b0100);
header.set_version(0b0100);
assert_eq!(header.version(), 0b0100);
}
}