lilliput_core/header/
bool.rs1#[cfg(any(test, feature = "testing"))]
2use proptest::prelude::*;
3#[cfg(any(test, feature = "testing"))]
4use proptest_derive::Arbitrary;
5
6#[cfg_attr(any(test, feature = "testing"), derive(Arbitrary))]
8#[derive(Copy, Clone, Eq, PartialEq, Debug)]
9pub struct BoolHeader {
10 value: bool,
11}
12
13impl BoolHeader {
14 #[inline]
16 pub fn new(value: bool) -> Self {
17 Self { value }
18 }
19
20 #[inline]
22 pub fn value(&self) -> bool {
23 self.value
24 }
25}
26
27impl BoolHeader {
28 pub(crate) const MASK: u8 = 0b0000011;
29 pub(crate) const TYPE_BITS: u8 = 0b0000010;
30
31 pub(crate) const VALUE_BIT: u8 = 0b0000001;
32}
33
34#[cfg(test)]
35mod tests {
36 use proptest::prelude::*;
37 use test_log::test;
38
39 use crate::{
40 config::EncoderConfig,
41 decoder::Decoder,
42 encoder::Encoder,
43 io::{SliceReader, VecWriter},
44 };
45
46 use super::*;
47
48 proptest! {
49 #[test]
50 fn encode_decode_roundtrip(header in BoolHeader::arbitrary(), config in EncoderConfig::arbitrary()) {
51 let mut encoded: Vec<u8> = Vec::new();
52 let writer = VecWriter::new(&mut encoded);
53 let mut encoder = Encoder::new(writer, config);
54 encoder.encode_bool_header(&header).unwrap();
55
56 prop_assert!(encoded.len() == 1);
57
58 let reader = SliceReader::new(&encoded);
59 let mut decoder = Decoder::from_reader(reader);
60 let decoded = decoder.decode_bool_header().unwrap();
61 prop_assert_eq!(&decoded, &header);
62 }
63 }
64}