blob: d4aa33c58aa9177334146a891847487e93033161 [file] [log] [blame] [edit]
// 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<CanonicalValue> = 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<CanonicalValue> = 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::<u64, 0xff>(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);
}