|
70 | 70 | #[cfg(test)]
|
71 | 71 | mod tests {
|
72 | 72 | use super::*;
|
| 73 | + use core::num::{ |
| 74 | + NonZeroI16, NonZeroI32, NonZeroI64, NonZeroI8, NonZeroU16, NonZeroU32, NonZeroU64, |
| 75 | + NonZeroU8, |
| 76 | + }; |
73 | 77 | use serde::Deserialize;
|
74 | 78 |
|
| 79 | + use crate::msgpack::{from_msgpack, to_msgpack_vec}; |
| 80 | + |
75 | 81 | #[derive(Serialize, Deserialize, Debug, PartialEq)]
|
76 | 82 | #[serde(rename_all = "snake_case")]
|
77 | 83 | enum SomeMsg {
|
@@ -182,4 +188,83 @@ mod tests {
|
182 | 188 | r#"{"release_all":{"image":"foo","amount":42,"time":9007199254740999,"karma":-17}}"#
|
183 | 189 | );
|
184 | 190 | }
|
| 191 | + |
| 192 | + const MINUS_ONE_MSGPACK: &[u8] = &[0xFF]; |
| 193 | + const ONE_MSGPACK: &[u8] = &[0x01]; |
| 194 | + |
| 195 | + macro_rules! test_integer { |
| 196 | + (signed $ty:ty) => { |
| 197 | + ::paste::paste! { |
| 198 | + #[test] |
| 199 | + fn [<test_ $ty:snake:lower _encoding>]() { |
| 200 | + let minus_one = $ty::new(-1).unwrap(); |
| 201 | + let one = $ty::new(1).unwrap(); |
| 202 | + |
| 203 | + let serialized = to_json_string(&minus_one).unwrap(); |
| 204 | + assert_eq!(serialized, "-1"); |
| 205 | + |
| 206 | + let serialized = to_json_string(&one).unwrap(); |
| 207 | + assert_eq!(serialized, "1"); |
| 208 | + |
| 209 | + let deserialized: $ty = from_json("-1").unwrap(); |
| 210 | + assert_eq!(deserialized, minus_one); |
| 211 | + |
| 212 | + let deserialized: $ty = from_json("1").unwrap(); |
| 213 | + assert_eq!(deserialized, one); |
| 214 | + |
| 215 | + assert!(from_json::<$ty>("0").is_err()); |
| 216 | + |
| 217 | + let serialized = to_msgpack_vec(&one).unwrap(); |
| 218 | + assert_eq!(serialized, ONE_MSGPACK); |
| 219 | + |
| 220 | + let serialized = to_msgpack_vec(&minus_one).unwrap(); |
| 221 | + assert_eq!(serialized, MINUS_ONE_MSGPACK); |
| 222 | + |
| 223 | + let deserialized: $ty = from_msgpack(ONE_MSGPACK).unwrap(); |
| 224 | + assert_eq!(deserialized, one); |
| 225 | + } |
| 226 | + } |
| 227 | + }; |
| 228 | + |
| 229 | + (unsigned $ty:ty) => { |
| 230 | + ::paste::paste! { |
| 231 | + #[test] |
| 232 | + fn [<test_ $ty:snake:lower _encoding>]() { |
| 233 | + let one = $ty::new(1).unwrap(); |
| 234 | + |
| 235 | + let serialized = to_json_string(&one).unwrap(); |
| 236 | + assert_eq!(serialized, "1"); |
| 237 | + |
| 238 | + let deserialized: $ty = from_json("1").unwrap(); |
| 239 | + assert_eq!(deserialized, one); |
| 240 | + |
| 241 | + assert!(from_json::<$ty>("0").is_err()); |
| 242 | + |
| 243 | + let serialized = to_msgpack_vec(&one).unwrap(); |
| 244 | + assert_eq!(serialized, ONE_MSGPACK); |
| 245 | + |
| 246 | + let deserialized: $ty = from_msgpack(ONE_MSGPACK).unwrap(); |
| 247 | + assert_eq!(deserialized, one); |
| 248 | + } |
| 249 | + } |
| 250 | + }; |
| 251 | + |
| 252 | + ($($disc:ident $ty:ty),+$(,)?) => { |
| 253 | + $( |
| 254 | + test_integer!($disc $ty); |
| 255 | + )+ |
| 256 | + }; |
| 257 | + } |
| 258 | + |
| 259 | + test_integer! { |
| 260 | + unsigned NonZeroU8, |
| 261 | + unsigned NonZeroU16, |
| 262 | + unsigned NonZeroU32, |
| 263 | + unsigned NonZeroU64, |
| 264 | + |
| 265 | + signed NonZeroI8, |
| 266 | + signed NonZeroI16, |
| 267 | + signed NonZeroI32, |
| 268 | + signed NonZeroI64, |
| 269 | + } |
185 | 270 | }
|
0 commit comments