// SPDX-License-Identifier: Apache-2.0 extern crate std; use ciborium::cbor; use ciborium::tag::Required; use ciborium::value::CanonicalValue; use rand::prelude::*; use std::collections::BTreeMap; macro_rules! cval { ($x:expr) => { CanonicalValue::from(val!($x)) }; } macro_rules! val { ($x:expr) => { cbor!($x).unwrap() }; } #[test] fn rfc8949_example() { let mut array: Vec = vec![ cval!(10), cval!(-1), cval!(false), cval!(100), cval!("z"), cval!([-1]), cval!("aa"), cval!([100]), ]; let golden = array.clone(); // Shuffle the array. array.shuffle(&mut rand::thread_rng()); array.sort(); assert_eq!(array, golden); } #[test] fn map() { let mut map = BTreeMap::new(); map.insert(cval!(false), val!(2)); map.insert(cval!([-1]), val!(5)); map.insert(cval!(-1), val!(1)); map.insert(cval!(10), val!(0)); map.insert(cval!(100), val!(3)); map.insert(cval!([100]), val!(7)); map.insert(cval!("z"), val!(4)); map.insert(cval!("aa"), val!(6)); let mut bytes1 = Vec::new(); ciborium::ser::into_writer(&map, &mut bytes1).unwrap(); assert_eq!( hex::encode(&bytes1), "a80a002001f402186403617a048120056261610681186407" ); } #[test] fn negative_numbers() { let mut array: Vec = vec![ cval!(10), cval!(-1), cval!(-2), cval!(-3), cval!(-4), cval!(false), cval!(100), cval!(-100), cval!(-200), cval!("z"), cval!([-1]), cval!(-300), cval!("aa"), cval!([100]), ]; let golden = array.clone(); // Shuffle the array. array.shuffle(&mut rand::thread_rng()); array.sort(); assert_eq!(array, golden); } #[test] fn tagged_option() { let mut opt = Some(Required::(2u32.into())); let mut bytes = Vec::new(); ciborium::ser::into_writer(&opt, &mut bytes).unwrap(); let output = ciborium::de::from_reader(&bytes[..]).unwrap(); assert_eq!(opt, output); opt = None; let mut bytes = Vec::new(); ciborium::ser::into_writer(&opt, &mut bytes).unwrap(); let output = ciborium::de::from_reader(&bytes[..]).unwrap(); assert_eq!(opt, output); }