use {
std::{
ffi::c_void,
mem::offset_of,
},
libdvb::{
ca::sys::{
CaCaps,
CaDescr,
CaDescrInfo,
CaMsg,
CaPid,
CaSlotInfo,
},
dmx::sys::DmxPesFilterParams,
fe::sys::{
DiseqcMasterCmd,
DiseqcSlaveReply,
DtvFrontendStats,
DtvPropertyBuffer,
DtvPropertyData,
DtvPropertyRaw,
DtvStats,
FeEvent,
FeInfo,
FeParameters,
},
net::sys::DvbNetIf,
},
};
const PTR_SIZE: usize = size_of::<*mut c_void>();
const DTV_PROPERTY_BUFFER_SIZE: usize = 32 + 4 + 12 + PTR_SIZE;
const DTV_PROPERTY_DATA_SIZE: usize = DTV_PROPERTY_BUFFER_SIZE;
const DTV_PROPERTY_SIZE: usize = 4 + 12 + DTV_PROPERTY_DATA_SIZE + 4;
#[test]
fn fe_info() {
assert_eq!(size_of::<FeInfo>(), 168);
assert_eq!(offset_of!(FeInfo, fe_type), 128);
assert_eq!(offset_of!(FeInfo, frequency_min), 132);
assert_eq!(offset_of!(FeInfo, symbol_rate_min), 148);
assert_eq!(offset_of!(FeInfo, caps), 164);
}
#[test]
fn fe_diseqc() {
assert_eq!(size_of::<DiseqcMasterCmd>(), 7);
assert_eq!(offset_of!(DiseqcMasterCmd, len), 6);
assert_eq!(size_of::<DiseqcSlaveReply>(), 12);
assert_eq!(offset_of!(DiseqcSlaveReply, len), 4);
assert_eq!(offset_of!(DiseqcSlaveReply, timeout), 8);
}
#[test]
fn fe_stats() {
assert_eq!(size_of::<DtvStats>(), 9);
assert_eq!(align_of::<DtvStats>(), 1);
assert_eq!(offset_of!(DtvStats, value), 1);
assert_eq!(size_of::<DtvFrontendStats>(), 37);
assert_eq!(align_of::<DtvFrontendStats>(), 1);
assert_eq!(offset_of!(DtvFrontendStats, stat), 1);
}
#[test]
fn fe_property() {
assert_eq!(size_of::<DtvPropertyBuffer>(), DTV_PROPERTY_BUFFER_SIZE);
assert_eq!(size_of::<DtvPropertyData>(), DTV_PROPERTY_DATA_SIZE);
assert_eq!(size_of::<DtvPropertyRaw>(), DTV_PROPERTY_SIZE);
assert_eq!(align_of::<DtvPropertyRaw>(), 1);
assert_eq!(offset_of!(DtvPropertyRaw, cmd), 0);
assert_eq!(offset_of!(DtvPropertyRaw, u), 16);
assert_eq!(offset_of!(DtvPropertyRaw, result), 16 + DTV_PROPERTY_DATA_SIZE);
}
#[test]
fn fe_event() {
assert_eq!(size_of::<FeParameters>(), 36);
assert_eq!(size_of::<FeEvent>(), 40);
assert_eq!(offset_of!(FeEvent, parameters), 4);
}
#[test]
fn dmx() {
assert_eq!(size_of::<DmxPesFilterParams>(), 20);
assert_eq!(offset_of!(DmxPesFilterParams, input), 4);
assert_eq!(offset_of!(DmxPesFilterParams, flags), 16);
}
#[test]
fn net() {
assert_eq!(size_of::<DvbNetIf>(), 6);
assert_eq!(offset_of!(DvbNetIf, feedtype), 4);
}
#[test]
fn auto_traits() {
fn assert_send_sync<T: Send + Sync>() {}
assert_send_sync::<DtvPropertyRaw>();
assert_send_sync::<libdvb::FeStatus>();
assert_send_sync::<libdvb::FeDevice>();
}
#[test]
fn ca() {
assert_eq!(size_of::<CaSlotInfo>(), 12);
assert_eq!(size_of::<CaDescrInfo>(), 8);
assert_eq!(size_of::<CaCaps>(), 16);
assert_eq!(size_of::<CaMsg>(), 268);
assert_eq!(offset_of!(CaMsg, msg), 12);
assert_eq!(size_of::<CaDescr>(), 16);
assert_eq!(offset_of!(CaDescr, cw), 8);
assert_eq!(size_of::<CaPid>(), 8);
}