use px4::px4_message;
use px4::uorb::Message;
use std::mem::size_of;
#[px4_message("tests/message_macro/test.msg")]
struct test_message;
macro_rules! offset_of {
($t:ty, $field:ident) => {{
let val: $t = unsafe { std::mem::uninitialized() };
let result = &val.$field as *const _ as usize - &val as *const _ as usize;
std::mem::forget(val);
result
}};
}
#[test]
fn generated_message() {
let m = test_message::metadata();
assert_eq!(m.name(), "test_message");
assert_eq!(m.fields(), "\
uint64_t value;\
int16_t[12] array;\
bool[2] array2;\
int8_t value2;\
char ch;\
uint8_t[4] _padding0;\
");
assert_eq!(m.size(), 40);
assert_eq!(m.size_no_padding(), 36);
let _ = test_message {
array: [1i16, -2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12],
array2: [true, false],
value: 123u64,
value2: 99i8,
ch: b'a',
};
assert_eq!(size_of::<test_message>(), 40);
assert_eq!(offset_of!(test_message, value), 0);
assert_eq!(offset_of!(test_message, array), 8);
assert_eq!(offset_of!(test_message, array2), 32);
assert_eq!(offset_of!(test_message, value2), 34);
assert_eq!(offset_of!(test_message, ch), 35);
}