@@ -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