1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
/// Macro similar to vec!
#[macro_export]
macro_rules! bvec {
	() => {
		BoundedVec::new()
	};

	($elem:expr; $n:expr) => {
		BoundedVec::from_elem($elem, $n)
	};

	($($x:expr),+ $(,)?) => {
        BoundedVec::try_from(<[_]>::into_vec(Box::new([$($x),+])))
	};
}

#[cfg(test)]
mod tests {
	use crate::*;

	#[test]
	fn empty() {
		let vec_from_macro: BoundedVec<i32, 0, 0> = bvec![].unwrap();
		let vec = BoundedVec::<i32, 0, 0>::new().unwrap();
		assert_eq!(vec_from_macro, vec);
		let vec_from_macro: Result<BoundedVec<i32, 1, 1>, _> = bvec!();
		assert_eq!(vec_from_macro, Err(Error::OutOfBoundsVec))
	}

	#[test]
	fn from_elements() {
		let vec_from_macro: BoundedVec<_, 3, 3> = bvec![1, 2, 3].unwrap();
		assert_eq!(vec_from_macro.to_vec(), vec![1, 2, 3]);

		let vec_from_macro: Result<BoundedVec<_, 0, 0>, _> = bvec![1, 2, 3];
		assert_eq!(vec_from_macro, Err(Error::OutOfBoundsVec));
	}

	#[test]
	fn n_elements() {
		let vec_from_macro: BoundedVec<_, 3, 3> = bvec![2u8; 3].unwrap();
		assert_eq!(vec_from_macro.to_vec(), vec![2, 2, 2]);

		let vec_from_macro: Result<BoundedVec<_, 0, 0>, _> = bvec![2u8; 3];
		assert_eq!(vec_from_macro, Err(Error::OutOfBoundsVec));
	}
}