pets 0.1.2

Predicate existential types.
Documentation
std_prelude!();
use crate::prelude::*;

#[test]
fn true_accept() {
    use crate::preds::True;

    assert_eq!(True::pet(()).expect("Must be Some(..)").value(), ());
    assert_eq!(True::petref(&()).expect("Must be Some(..)").value(), &());
}

#[test]
fn false_reject() {
    use crate::preds::False;

    assert_eq!(False::pet(()), None);
    assert_eq!(False::petref(&()), None);
}

#[cfg(feature = "num-integer")]
#[test]
fn even_accept() {
    use crate::preds::Even;
    let accept: &[usize] = &[0, 2, 4, 6, 8, 10, 12, 14, 16, 18, 20];

    for &x in accept {
        assert_eq!(Even::pet(x).expect("Must be Some(..)").value(), x);
        assert_eq!(Even::petref(&x).expect("Must be Some(..)").value(), &x);
    }
}

#[cfg(feature = "num-integer")]
#[test]
fn even_reject() {
    use crate::preds::Even;
    let reject: &[usize] = &[1, 3, 5, 7, 9, 11, 13, 15, 17, 19, 21];

    for &x in reject {
        assert_eq!(Even::pet(x), None);
        assert_eq!(Even::petref(&x), None);
    }
}

#[cfg(feature = "num-integer")]
#[test]
fn odd_accept() {
    use crate::preds::Odd;
    let accept: &[usize] = &[1, 3, 5, 7, 9, 11, 13, 15, 17, 19, 21];

    for &x in accept {
        assert_eq!(Odd::pet(x).expect("Must be Some(..)").value(), x);
        assert_eq!(Odd::petref(&x).expect("Must be Some(..)").value(), &x);
    }
}

#[cfg(feature = "num-integer")]
#[test]
fn odd_reject() {
    use crate::preds::Odd;
    let reject: &[usize] = &[0, 2, 4, 6, 8, 10, 12, 14, 16, 18, 20];

    for &x in reject {
        assert_eq!(Odd::pet(x), None);
        assert_eq!(Odd::petref(&x), None);
    }
}