macro_rules! test_enum {
($e:ident, $mem_size:expr) => {
const CONST_SET: EnumSet<$e> = enum_set!($e::A | $e::C);
+ const CONST_1_SET: EnumSet<$e> = enum_set!($e::A);
const EMPTY_SET: EnumSet<$e> = enum_set!();
#[test]
fn const_set() {
assert_eq!(CONST_SET.len(), 2);
+ assert_eq!(CONST_1_SET.len(), 1);
assert!(CONST_SET.contains($e::A));
assert!(CONST_SET.contains($e::C));
assert!(EMPTY_SET.is_empty());
let mut itr = set.iter();
for idx in 0 .. count {
assert_eq!(itr.size_hint(), (count-idx, Some(count-idx)));
+ assert_eq!(itr.len(), count-idx);
assert!(itr.next().is_some());
}
assert_eq!(itr.size_hint(), (0, Some(0)));
+ assert_eq!(itr.len(), 0);
}
#[test]
fn test_iter_size_hint() {
test_set!(tree_set);
}
+ #[test]
+ fn sum_test() {
+ let target = $e::A | $e::B | $e::D | $e::E | $e::G | $e::H;
+
+ let list_a = [$e::A | $e::B, $e::D | $e::E, $e::G | $e::H];
+ let sum_a: EnumSet<$e> = list_a.iter().map(|x| *x).sum();
+ assert_eq!(target, sum_a);
+ let sum_b: EnumSet<$e> = list_a.iter().sum();
+ assert_eq!(target, sum_b);
+
+ let list_b = [$e::A, $e::B, $e::D, $e::E, $e::G, $e::H];
+ let sum_c: EnumSet<$e> = list_b.iter().map(|x| *x).sum();
+ assert_eq!(target, sum_c);
+ let sum_d: EnumSet<$e> = list_b.iter().sum();
+ assert_eq!(target, sum_d);
+ }
+
#[test]
fn check_size() {
assert_eq!(::std::mem::size_of::<EnumSet<$e>>(), $mem_size);