use serde::Serialize;
#[derive(Clone, Copy)]
#[repr(C)]
struct TooWide {
re: f32,
im: f32,
extra: f32,
}
unsafe impl beve::ComplexElement for TooWide {
type Component = f32;
}
#[derive(Clone, Copy)]
#[repr(C, packed)]
struct Packed {
re: f32,
im: f32,
}
unsafe impl beve::ComplexElement for Packed {
type Component = f32;
}
impl Serialize for Packed {
fn serialize<S: serde::Serializer>(&self, s: S) -> Result<S::Ok, S::Error> {
let (re, im) = (self.re, self.im);
(re, im).serialize(s)
}
}
#[derive(Serialize)]
struct TooWideFrame {
#[serde(serialize_with = "beve::complex::f32_array")]
iq: Vec<TooWide>,
}
#[derive(Serialize)]
struct PackedFrame {
#[serde(serialize_with = "beve::complex::f32_array")]
iq: Vec<Packed>,
}
#[derive(Serialize)]
struct PackedWithFrame {
#[serde(with = "beve::complex_array::f32")]
iq: Vec<Packed>,
}
#[test]
#[should_panic(expected = "wrong element size")]
fn encode_helper_refuses_an_impl_of_the_wrong_width() {
let frame = TooWideFrame {
iq: vec![TooWide {
re: 1.0,
im: 2.0,
extra: 3.0,
}],
};
let _ = beve::to_vec(&frame);
}
#[test]
#[should_panic(expected = "wrong element alignment")]
fn encode_helper_refuses_an_underaligned_impl() {
let frame = PackedFrame {
iq: vec![Packed { re: 1.0, im: 2.0 }],
};
let _ = beve::to_vec(&frame);
}
#[test]
#[should_panic(expected = "wrong element alignment")]
fn serde_with_family_refuses_an_underaligned_impl() {
let frame = PackedWithFrame {
iq: vec![Packed { re: 1.0, im: 2.0 }],
};
let _ = beve::to_vec(&frame);
}
#[test]
#[should_panic(expected = "wrong element alignment")]
fn an_empty_slice_is_checked_too() {
let frame = PackedFrame { iq: Vec::new() };
let _ = beve::to_vec(&frame);
}