Skip to content

Commit 5f84ac3

Browse files
committed
Add tests for NonZero types
1 parent 82f3567 commit 5f84ac3

File tree

3 files changed

+87
-0
lines changed

3 files changed

+87
-0
lines changed

Cargo.lock

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

packages/std/Cargo.toml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -86,4 +86,5 @@ chrono = { version = "0.4", default-features = false, features = [
8686
] }
8787
crc32fast = "1.3.2"
8888
hex-literal = "0.4.1"
89+
paste = "1.0.15"
8990
serde_json = "1.0.81"

packages/std/src/serde.rs

Lines changed: 85 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -70,8 +70,14 @@ where
7070
#[cfg(test)]
7171
mod tests {
7272
use super::*;
73+
use core::num::{
74+
NonZeroI16, NonZeroI32, NonZeroI64, NonZeroI8, NonZeroU16, NonZeroU32, NonZeroU64,
75+
NonZeroU8,
76+
};
7377
use serde::Deserialize;
7478

79+
use crate::msgpack::{from_msgpack, to_msgpack_vec};
80+
7581
#[derive(Serialize, Deserialize, Debug, PartialEq)]
7682
#[serde(rename_all = "snake_case")]
7783
enum SomeMsg {
@@ -182,4 +188,83 @@ mod tests {
182188
r#"{"release_all":{"image":"foo","amount":42,"time":9007199254740999,"karma":-17}}"#
183189
);
184190
}
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+
}
185270
}

0 commit comments

Comments
 (0)