use type_sets::{
assert::{contains, eq, is_empty, subset, superset},
*,
};
struct A;
struct B;
struct C;
struct D;
struct E;
#[test]
fn test() {
superset::<(A,), (A,)>();
superset::<(A, B), (A,)>();
superset::<(B, A, C), (A,)>();
contains::<(A,), A>();
contains::<(A, B), A>();
contains::<(B, A, C), A>();
subset::<(A, B), (A, B)>();
subset::<(A,), (A,)>();
subset::<(B, A, C), (A, B, C)>();
type X = Insert<(), A>;
type Y = Insert<X, B>;
type Z = Insert<Y, C>;
eq::<X, (A,)>();
eq::<Y, (B, A)>();
eq::<Z, (A, B, C)>();
eq::<Union<Z, (D,)>, (A, B, C, D)>();
eq::<Union<Z, (D, E)>, (A, B, C, D, E)>();
eq::<Union<Z, (D, E, A)>, (A, B, C, D, E, A)>();
eq::<Union<Z, (D, E, A)>, (A, B, C, D, E, A)>();
is_empty::<()>();
is_empty::<Union<(), ()>>();
}
fn subset_of_any<T: AsTypeSet>() {
subset::<(), T>()
}
#[test]
fn members_are_distinct_per_type() {
use std::any::TypeId;
let a1 = <(A,) as Members>::members();
let b1 = <(B,) as Members>::members();
assert_eq!(a1, &[TypeId::of::<A>()]);
assert_eq!(b1, &[TypeId::of::<B>()]);
let ab2 = <(A, B) as Members>::members();
let cd2 = <(C, D) as Members>::members();
assert_eq!(ab2, &[TypeId::of::<A>(), TypeId::of::<B>()]);
assert_eq!(cd2, &[TypeId::of::<C>(), TypeId::of::<D>()]);
}