Nothing to see here, move along meow
1use lancer_core::ring::*;
2use zerocopy::{FromBytes, IntoBytes};
3
4#[test]
5fn submission_entry_size_32() {
6 assert_eq!(core::mem::size_of::<SubmissionEntry>(), 32);
7}
8
9#[test]
10fn completion_entry_size_24() {
11 assert_eq!(core::mem::size_of::<CompletionEntry>(), 24);
12}
13
14#[test]
15fn ring_total_fits_in_page() {
16 assert!(ring_total_size() <= 4096);
17}
18
19#[test]
20fn sq_offset_after_header() {
21 assert_eq!(ring_sq_offset(), core::mem::size_of::<RingHeader>());
22}
23
24#[test]
25fn cq_offset_after_sq() {
26 let expected =
27 ring_sq_offset() + (MAX_SQ_ENTRIES as usize) * core::mem::size_of::<SubmissionEntry>();
28 assert_eq!(ring_cq_offset(), expected);
29}
30
31#[test]
32fn zeroed_entries_all_zero() {
33 let sq = SubmissionEntry::zeroed();
34 assert_eq!(sq.arg0, 0);
35 assert_eq!(sq.arg1, 0);
36 assert_eq!(sq.arg2, 0);
37 assert_eq!(sq.user_data, 0);
38 assert_eq!(sq.cap_slot, 0);
39 assert_eq!(sq.opcode, 0);
40 assert_eq!(sq.flags, 0);
41
42 let cq = CompletionEntry::zeroed();
43 assert_eq!(cq.result, 0);
44 assert_eq!(cq.user_data, 0);
45 assert_eq!(cq.extra, 0);
46}
47
48mod zerocopy_roundtrip {
49 use super::*;
50 use proptest::prelude::*;
51
52 proptest! {
53 #[test]
54 fn submission_entry_from_bytes_roundtrip(bytes in proptest::collection::vec(any::<u8>(), 32)) {
55 let entry = SubmissionEntry::read_from_bytes(&bytes).expect("32 bytes must parse");
56 let out = entry.as_bytes();
57 prop_assert_eq!(out, &bytes[..]);
58 }
59
60 #[test]
61 fn completion_entry_from_bytes_roundtrip(bytes in proptest::collection::vec(any::<u8>(), 24)) {
62 let entry = CompletionEntry::read_from_bytes(&bytes).expect("24 bytes must parse");
63 let out = entry.as_bytes();
64 prop_assert_eq!(out, &bytes[..]);
65 }
66
67 #[test]
68 fn submission_entry_short_buffer_fails(len in 0..32usize) {
69 let bytes: Vec<u8> = (0..len).map(|i| i as u8).collect();
70 prop_assert!(SubmissionEntry::read_from_bytes(&bytes).is_err());
71 }
72
73 #[test]
74 fn completion_entry_short_buffer_fails(len in 0..24usize) {
75 let bytes: Vec<u8> = (0..len).map(|i| i as u8).collect();
76 prop_assert!(CompletionEntry::read_from_bytes(&bytes).is_err());
77 }
78 }
79}