Nothing to see here, move along meow
1use lancer_core::pci::*;
2use zerocopy::{FromBytes, IntoBytes};
3
4#[test]
5fn bar_info_wire_size_24() {
6 assert_eq!(core::mem::size_of::<BarInfoWire>(), 24);
7}
8
9#[test]
10fn blocked_range_wire_size_4() {
11 assert_eq!(core::mem::size_of::<BlockedRangeWire>(), 4);
12}
13
14#[test]
15fn pci_device_info_wire_size_176() {
16 assert_eq!(core::mem::size_of::<PciDeviceInfoWire>(), 176);
17}
18
19#[test]
20fn bar_info_wire_zeroed_all_zero() {
21 let bar = BarInfoWire::zeroed();
22 assert_eq!(bar.tag, BAR_TAG_NONE);
23 assert_eq!(bar.flags, 0);
24 assert_eq!(bar.io_port_base, 0);
25 assert_eq!(bar.io_size, 0);
26 assert_eq!(bar._reserved, [0; 2]);
27 assert_eq!(bar.mem_phys_base, 0);
28 assert_eq!(bar.mem_size, 0);
29}
30
31mod zerocopy_roundtrip {
32 use super::*;
33 use proptest::prelude::*;
34
35 proptest! {
36 #[test]
37 fn bar_info_wire_roundtrip(bytes in proptest::collection::vec(any::<u8>(), 24)) {
38 let entry = BarInfoWire::read_from_bytes(&bytes).expect("24 bytes must parse");
39 let out = entry.as_bytes();
40 prop_assert_eq!(out, &bytes[..]);
41 }
42
43 #[test]
44 fn pci_device_info_wire_roundtrip(bytes in proptest::collection::vec(any::<u8>(), 176)) {
45 let entry = PciDeviceInfoWire::read_from_bytes(&bytes).expect("176 bytes must parse");
46 let out = entry.as_bytes();
47 prop_assert_eq!(out, &bytes[..]);
48 }
49
50 #[test]
51 fn bar_info_wire_short_buffer_fails(len in 0..24usize) {
52 let bytes: Vec<u8> = (0..len).map(|i| i as u8).collect();
53 prop_assert!(BarInfoWire::read_from_bytes(&bytes).is_err());
54 }
55
56 #[test]
57 fn pci_device_info_wire_short_buffer_fails(len in 0..176usize) {
58 let bytes: Vec<u8> = (0..len).map(|i| i as u8).collect();
59 prop_assert!(PciDeviceInfoWire::read_from_bytes(&bytes).is_err());
60 }
61 }
62}