type-sets 0.2.0

Sets implemented in the rust type-system
Documentation
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,)>();
    // superset::<(E, B, C), (A,)>();

    contains::<(A,), A>();
    contains::<(A, B), A>();
    contains::<(B, A, C), A>();
    // contains::<(E, B, C), A>();

    subset::<(A, B), (A, B)>();
    subset::<(A,), (A,)>();
    subset::<(B, A, C), (A, B, C)>();
    // subset::<(E, B, 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::<Pop<Z>, (A, B)>();
    // eq::<Pop<Y>, (A,)>();
    // eq::<Pop<X>, ()>();

    // eq::<(Last<Z>,), (C,)>();
    // eq::<(Last<Y>,), (B,)>();
    // eq::<(Last<X>,), (A,)>();

    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<(), ()>>();
}