#![cfg(feature = "musli-zerocopy01")]
use fixed_map::{Key, Set};
use musli_zerocopy01 as musli_zerocopy;
use musli_zerocopy::{OwnedBuf, ZeroCopy};
#[derive(Debug, Clone, Copy, PartialEq, Eq, Key)]
#[key(bitset)]
enum Form {
A,
B,
C,
D,
E,
F,
G,
H,
I,
}
#[derive(Debug, PartialEq, ZeroCopy)]
#[repr(transparent)]
struct Inflection {
form: Set<Form>,
}
#[derive(Debug, PartialEq, ZeroCopy)]
#[repr(C)]
struct Entry {
id: u32,
inflection: Inflection,
forms: Set<Form>,
}
#[test]
fn store_load() {
let entry = Entry {
id: 42,
inflection: Inflection {
form: Set::from([Form::A, Form::I]),
},
forms: Set::from([Form::C]),
};
let mut buf = OwnedBuf::new();
let set = buf.store(&Set::from([Form::B, Form::H])).unwrap();
let entry_ref = buf.store(&entry).unwrap();
assert_eq!(buf.load(set).unwrap(), &Set::from([Form::B, Form::H]));
assert_eq!(buf.load(entry_ref).unwrap(), &entry);
}
#[test]
fn swap_bytes() {
let set = Set::from([Form::A, Form::I]);
let swapped = set.swap_bytes::<musli_zerocopy::endian::Other>();
assert_eq!(swapped.as_raw(), set.as_raw().swap_bytes());
assert_eq!(swapped.swap_bytes::<musli_zerocopy::endian::Other>(), set);
}