pattern-3 0.5.0

Needle API (née Pattern API 3.0), generalization of `std::str::pattern`
Documentation
extern crate pattern_3;

use pattern_3::ext::{trim, trim_start};

#[test]
fn test_trim_slice_fn() {
    #[inline(never)]
    fn sw1(a: &[u64], b: u64) -> &[u64] {
        trim(a, |c: &u64| *c == b)
    }

    const E: &[u64] = &[];
    assert_eq!(&[2,3,4], sw1(&[1,2,3,4], 1));
    assert_eq!(&[4,3,2], sw1(&[4,3,2,1,1], 1));
    assert_eq!(&[1,5,2,8], sw1(&[1,5,2,8], 4));
    assert_eq!(E, sw1(&[6,6,6,6], 6));
    assert_eq!(E, sw1(E, 23));
    assert_eq!(E, sw1(&[24], 24));
    assert_eq!(&[5], sw1(&[5], 25));
    assert_eq!(&[75,6,77], sw1(&[6,6,75,6,77,6,6,6], 6));
}

#[test]
fn test_trim_string_char() {
    #[inline(never)]
    fn trim_string_char(s: &str, c: char) -> &str {
        trim(s, c)
    }

    assert_eq!("", trim_string_char("aaaaaaaa", 'a'));
    assert_eq!("bbaabb", trim_string_char("abbaabbaaa", 'a'));
    assert_eq!("baaab", trim_string_char("baaab", 'a'));
    assert_eq!("颫颫", trim_string_char("風風風颫颫風", ''));
    assert_eq!("風風風颫颫風", trim_string_char("風風風颫颫風", ''));
    assert_eq!("", trim_string_char("風風風", ''));
    assert_eq!("風風風", trim_string_char("風風風", ''));
    assert_eq!("", trim_string_char("", 'a'));
    assert_eq!("", trim_string_char("", ''));
}

#[test]
fn test_trim_string_fn() {
    assert_eq!("", trim("abcdefg", |c: char| c.is_ascii()));
    assert_eq!("αbβcγdδeε", trim_start("aαbβcγdδeε", |c: char| c.is_ascii()));
    assert_eq!("abcdefg", trim("abcdefg", |c: char| !c.is_ascii()));
    assert_eq!("aαbβcγdδe", trim("aαbβcγdδeε", |c: char| !c.is_ascii()));
}