Skip to content

Commit d5d45c4

Browse files
test: add serialization/deserialization tests for int types
1 parent e4d5dc3 commit d5d45c4

File tree

3 files changed

+88
-0
lines changed

3 files changed

+88
-0
lines changed

Cargo.lock

Lines changed: 10 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

benzina/Cargo.toml

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,9 @@ utoipa = { version = "5", optional = true }
1919
benzina-derive = { path = "../benzina-derive", version = "=0.3.2", optional = true }
2020
uuid = { version = ">=0.7.0, <2.0.0", default-features = false, optional = true }
2121

22+
[dev-dependencies]
23+
serde_test = "1"
24+
2225
[features]
2326
default = ["derive"]
2427
derive = ["dep:benzina-derive"]

benzina/src/serde.rs

Lines changed: 75 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -68,3 +68,78 @@ impl_serde_numbers! {
6868
U31 => u32, deserialize_u32,
6969
U63 => u64, deserialize_u64
7070
}
71+
72+
#[cfg(test)]
73+
mod tests {
74+
use serde_test::{Token, assert_de_tokens, assert_ser_tokens};
75+
76+
use crate::{U15, U31, U63};
77+
78+
macro_rules! int_ser_tests {
79+
($($type:ident, $inner:ident, $token_type:ident, $test_name:ident),*) => {
80+
$(
81+
#[test]
82+
fn $test_name() {
83+
const VALUE: $inner = $inner::MAX / 2;
84+
let v = $type::new(VALUE).unwrap();
85+
assert_ser_tokens(
86+
&v,
87+
&[
88+
Token::$token_type(VALUE),
89+
],
90+
);
91+
}
92+
)*
93+
}
94+
}
95+
96+
macro_rules! int_de_tests {
97+
($($type:ident, $inner:ident, $token_type:ident, $token_type_inner:ident, $test_name:ident),*) => {
98+
$(
99+
#[test]
100+
fn $test_name() {
101+
const VALUE: $inner = if ($token_type_inner::MAX as u128) < $inner::MAX as u128 {
102+
$token_type_inner::MAX as $inner
103+
} else {
104+
$inner::MAX
105+
} / 2;
106+
let v = $type::new(VALUE).unwrap();
107+
assert_de_tokens(&v, &[Token::$token_type(VALUE as _)]);
108+
}
109+
)*
110+
}
111+
}
112+
113+
int_ser_tests! {
114+
U15, u16, U16, int_ser_u15,
115+
U31, u32, U32, int_ser_u31,
116+
U63, u64, U64, int_ser_u63
117+
}
118+
119+
int_de_tests! {
120+
U15, u16, U8, u8, int_de_u15_from_u8,
121+
U15, u16, U16, u16, int_de_u15_from_u16,
122+
U15, u16, U32, u32, int_de_u15_from_u32,
123+
U15, u16, U64, u64, int_de_u15_from_u64,
124+
U15, u16, I8, i8, int_de_u15_from_i8,
125+
U15, u16, I16, i16, int_de_u15_from_i16,
126+
U15, u16, I32, i32, int_de_u15_from_i32,
127+
U15, u16, I64, i64, int_de_u15_from_i64,
128+
U31, u32, U8, u8, int_de_u31_from_u8,
129+
U31, u32, U16, u16, int_de_u31_from_u16,
130+
U31, u32, U32, u32, int_de_u31_from_u32,
131+
U31, u32, U64, u64, int_de_u31_from_u64,
132+
U31, u32, I8, i8, int_de_u31_from_i8,
133+
U31, u32, I16, i16, int_de_u31_from_i16,
134+
U31, u32, I32, i32, int_de_u31_from_i32,
135+
U31, u32, I64, i64, int_de_u31_from_i64,
136+
U63, u64, U8, u8, int_de_u63_from_u8,
137+
U63, u64, U16, u16, int_de_u63_from_u16,
138+
U63, u64, U32, u32, int_de_u63_from_u32,
139+
U63, u64, U64, u64, int_de_u63_from_u64,
140+
U63, u64, I8, i8, int_de_u63_from_i8,
141+
U63, u64, I16, i16, int_de_u63_from_i16,
142+
U63, u64, I32, i32, int_de_u63_from_i32,
143+
U63, u64, I64, i64, int_de_u63_from_i64
144+
}
145+
}

0 commit comments

Comments
 (0)