#![allow(clippy::unwrap_used)]
use super::*;
mod bincode_ {
use super::*;
mod ser {
use pretty_assertions::assert_eq;
fn serialize<T>(val: T) -> Vec<u8>
where
T: serde::Serialize,
{
let config = bincode::config::standard().with_big_endian().with_fixed_int_encoding();
bincode::serde::encode_to_vec(val, config).unwrap()
}
#[test]
fn enum_named_field() {
use super::r#enum::NamedField;
let val = NamedField::Array {
inner: [12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1],
};
let result = serialize(val);
assert_eq!(
result,
[
0, 0, 0, 12, 0, 11, 0, 10, 0, 9, 0, 8, 0, 7, 0, 6, 0, 5, 0, 4, 0, 3, 0, 2, 0, 1,
]
);
}
#[test]
fn enum_unnamed_field() {
use super::r#enum::UnnamedField;
let val = UnnamedField::Array([1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12]);
let result = serialize(val);
assert_eq!(
result,
[
0, 0, 1, 0, 2, 0, 3, 0, 4, 0, 5, 0, 6, 0, 7, 0, 8, 0, 9, 0, 10, 0, 11, 0, 12,
]
);
}
#[test]
fn enum_variant_types_unit() {
use super::r#enum::VariantTypes;
let val = VariantTypes::Unit;
let result = serialize(val);
assert_eq!(
result,
[
0,
]
);
}
#[test]
fn enum_variant_types_newtype() {
use super::r#enum::VariantTypes;
let val = VariantTypes::Newtype(42);
let result = serialize(val);
assert_eq!(
result,
[
1, 42
]
);
}
#[test]
fn enum_variant_types_unnamed() {
use super::r#enum::VariantTypes;
let val = VariantTypes::Unnamed(42, 168);
let result = serialize(val);
assert_eq!(
result,
[
2, 42, 0, 168
]
);
}
#[test]
fn enum_variant_types_field() {
use super::r#enum::VariantTypes;
let val = VariantTypes::Field { a: 42, b: 168 };
let result = serialize(val);
assert_eq!(
result,
[
3, 42, 0, 168
]
);
}
#[test]
fn struct_named_field() {
use super::r#struct::NamedField;
let val = NamedField {
array: [12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1],
number: 16,
};
let result = serialize(val);
assert_eq!(
result,
[
0, 12, 0, 11, 0, 10, 0, 9, 0, 8, 0, 7, 0, 6, 0, 5, 0, 4, 0, 3, 0, 2, 0, 1, 0, 0, 0, 16,
]
);
}
#[test]
fn struct_unnamed_field() {
use super::r#struct::UnnamedField;
let val = UnnamedField([1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12], 16);
let result = serialize(val);
assert_eq!(
result,
[
0, 1, 0, 2, 0, 3, 0, 4, 0, 5, 0, 6, 0, 7, 0, 8, 0, 9, 0, 10, 0, 11, 0, 12, 0, 0, 0, 16,
]
);
}
}
mod de {
use assert_matches::assert_matches;
use pretty_assertions::assert_eq;
fn deserialize<T>(data: &[u8]) -> (T, usize)
where
T: serde::de::DeserializeOwned,
{
let config = bincode::config::standard().with_big_endian().with_fixed_int_encoding();
bincode::serde::decode_from_slice(data, config).unwrap()
}
#[test]
fn enum_named_field() {
use super::r#enum::NamedField;
let data = [
0, 0, 0, 12, 0, 11, 0, 10, 0, 9, 0, 8, 0, 7, 0, 6, 0, 5, 0, 4, 0, 3, 0, 2, 0, 1,
];
let (result, bytes_used) = deserialize::<NamedField>(&data);
assert_eq!(bytes_used, data.len());
assert_matches!(
result,
NamedField::Array { inner } if inner == [12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1]
);
}
#[test]
fn enum_unnamed_field() {
use super::r#enum::UnnamedField;
let data = [
0, 0, 1, 0, 2, 0, 3, 0, 4, 0, 5, 0, 6, 0, 7, 0, 8, 0, 9, 0, 10, 0, 11, 0, 12,
];
let (result, bytes_used) = deserialize::<UnnamedField>(&data);
assert_eq!(bytes_used, data.len());
assert_matches!(
result,
UnnamedField::Array(inner) if inner == [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12]
);
}
#[test]
fn enum_variant_types_unit() {
use super::r#enum::VariantTypes;
let data = [
0,
];
let (result, bytes_used) = deserialize::<VariantTypes>(&data);
assert_eq!(bytes_used, data.len());
assert_matches!(result, VariantTypes::Unit);
}
#[test]
fn enum_variant_types_newtype() {
use super::r#enum::VariantTypes;
let data = [
1, 42,
];
let (result, bytes_used) = deserialize::<VariantTypes>(&data);
assert_eq!(bytes_used, data.len());
assert_matches!(result, VariantTypes::Newtype(a) if a == 42);
}
#[test]
fn enum_variant_types_unnamed() {
use super::r#enum::VariantTypes;
let data = [
2, 42, 0, 168,
];
let (result, bytes_used) = deserialize::<VariantTypes>(&data);
assert_eq!(bytes_used, data.len());
assert_matches!(result, VariantTypes::Unnamed(a, b) if a == 42 && b == 168);
}
#[test]
fn enum_variant_types_field() {
use super::r#enum::VariantTypes;
let data = [
3, 42, 0, 168,
];
let (result, bytes_used) = deserialize::<VariantTypes>(&data);
assert_eq!(bytes_used, data.len());
assert_matches!(result, VariantTypes::Field{ a, b } if a == 42 && b == 168);
}
#[test]
fn struct_named_field() {
use super::r#struct::NamedField;
let data = [
0, 12, 0, 11, 0, 10, 0, 9, 0, 8, 0, 7, 0, 6, 0, 5, 0, 4, 0, 3, 0, 2, 0, 1, 0, 0, 0, 16,
];
let (result, bytes_used) = deserialize::<NamedField>(&data);
assert_eq!(bytes_used, data.len());
assert_eq!(result.array, [12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1]);
assert_eq!(result.number, 16);
}
#[test]
fn struct_unnamed_field() {
use super::r#struct::UnnamedField;
let data = [
0, 1, 0, 2, 0, 3, 0, 4, 0, 5, 0, 6, 0, 7, 0, 8, 0, 9, 0, 10, 0, 11, 0, 12, 0, 0, 0, 16,
];
let (result, bytes_used) = deserialize::<UnnamedField>(&data);
assert_eq!(bytes_used, data.len());
assert_eq!(result.0, [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12]);
assert_eq!(result.1, 16);
}
}
}