#![allow(
unused_qualifications,
missing_docs,
reason = "upstream layout assertions intentionally spell out trait paths and these test \
fixtures are not a published surface"
)]
use pinapod::PinaPod;
#[derive(PinaPod, Debug, PartialEq)]
#[repr(u8)]
enum Status {
Active = 0,
Paused = 1,
Closed = 2,
}
#[test]
fn enum_size() {
assert_eq!(Status::SIZE, 1);
}
#[test]
fn enum_from_bytes_valid() {
let buf = [1u8];
let zc = Status::read_exact(&buf).unwrap();
assert_eq!(zc.get(), 1u8);
}
#[test]
fn enum_validate_rejects_invalid() {
let buf = [5u8];
assert!(Status::read_exact(&buf).is_err());
}
#[test]
fn enum_from_into() {
let pod: u8 = Status::Paused.into();
assert_eq!(pod, 1u8);
}
#[derive(PinaPod, Debug, PartialEq)]
#[repr(u16)]
enum LargeEnum {
A = 0,
B = 256,
C = 1000,
}
#[test]
fn enum_u16_size() {
assert_eq!(LargeEnum::SIZE, 2);
}
#[test]
fn enum_u16_from_bytes() {
let buf = 256u16.to_le_bytes();
let zc = LargeEnum::read_exact(&buf).unwrap();
assert_eq!(zc.get(), 256u16);
}
#[test]
fn enum_u16_rejects_invalid() {
let buf = 999u16.to_le_bytes();
assert!(LargeEnum::read_exact(&buf).is_err());
}
#[test]
fn enum_zc_is() {
let buf = [1u8]; let zc = Status::read_exact(&buf).unwrap();
assert!(zc.is(Status::Paused));
assert!(!zc.is(Status::Active));
}
#[test]
fn enum_zc_display() {
let buf = [0u8]; let zc = Status::read_exact(&buf).unwrap();
let s = format!("{zc}");
assert_eq!(s, "Active");
}
#[test]
fn enum_zc_debug() {
let buf = [2u8]; let zc = Status::read_exact(&buf).unwrap();
let s = format!("{zc:?}");
assert!(s.contains("Closed"));
}
#[test]
fn enum_zc_eq_repr() {
let buf = [1u8];
let zc = Status::read_exact(&buf).unwrap();
assert_eq!(*zc, 1u8); }
#[test]
fn error_invalid_discriminant_variant() {
let buf = [99u8]; let err = Status::validate_exact(&buf);
assert_eq!(err, Err(pinapod::PinaPodError::InvalidDiscriminant));
}
#[test]
fn enum_zc_is_zc_elem() {
fn assert_zc_elem<T: pinapod::ZcElem>() {}
assert_zc_elem::<StatusZc>();
assert_zc_elem::<LargeEnumZc>();
}