vregex 0.7.0

Regular Expression engine
Documentation
pub use crate::types::error::*;
pub use crate::types::re::*;

#[cfg(test)]
mod tests {
    use super::*;

    #[test]
    fn basic_regex() {
        let re = RegEx::from_pattern("aabbaa|b").unwrap();

        assert_eq!(re.search("aabbab"), Some(0));
        assert_eq!(re.search("ac"), None);
    }

    #[test]
    fn exact_match_only() {
        let re = RegEx::from_pattern("abc").unwrap();

        assert_eq!(re.search("abc"), Some(0));
        assert_eq!(re.search("xabcx"), Some(1));
        assert_eq!(re.search("ab"), None);
        assert_eq!(re.search("xyz"), None);
    }

    #[test]
    fn class() {
        let re = RegEx::from_pattern("a[ab]").unwrap();

        assert_eq!(re.search("aa"), Some(0));
        assert_eq!(re.search("ab"), Some(0));
    }

    #[test]
    fn class_2() {
        let re = RegEx::from_pattern("a[bc]a").unwrap();
        println!("{:#?}", re);
        assert_eq!(re.search("aba"), Some(0));
        assert_eq!(re.search("ab"), None);
        assert_eq!(re.search("ba"), None);
    }

    #[test]
    fn empty() {
        let re = RegEx::from_pattern("a[bc]").unwrap();

        assert_eq!(re.search(""), None);
    }

    #[test]
    fn any_char() {
        let re = RegEx::from_pattern("a.b").unwrap();

        assert_eq!(re.search("axb"), Some(0));
        assert_eq!(re.search("ayb"), Some(0));
        assert_eq!(re.search("a.b"), Some(0));
        assert_eq!(re.search("aaxb"), Some(1));
        assert_eq!(re.search("ab"), None);
    }

    #[test]
    fn any_char_2() {
        let re = RegEx::from_pattern(".").unwrap();

        assert_eq!(re.search("a"), Some(0));
        assert_eq!(re.search(" "), Some(0));
        assert_eq!(re.search("aa"), Some(0));
        assert_eq!(re.search(""), None);
    }

    #[test]
    fn digit() {
        let re = RegEx::from_pattern(r"\d").unwrap();

        assert_eq!(re.search(""), None);
        assert_eq!(re.search("11"), Some(0));
        assert_eq!(re.search("a"), None);
        assert_eq!(re.search("123abc7123abc"), Some(0));
        assert_eq!(re.search("++123abc7123abc++"), Some(2));
    }

    #[test]
    fn digit_2() {
        let re = RegEx::from_pattern(r"123abc\d123abc").unwrap();

        assert_eq!(re.search(""), None);
        assert_eq!(re.search("123abc7123abc"), Some(0));
        assert_eq!(re.search("++123abc7123abc++"), Some(2));
        assert_eq!(re.search("++123abc+123abc++"), None);
    }

    #[test]
    fn digit_exclusive() {
        let re = RegEx::from_pattern(r"\D").unwrap();

        assert_eq!(re.search(""), None);
        assert_eq!(re.search("11"), None);
        assert_eq!(re.search("a"), Some(0));
        assert_eq!(re.search("123abc7123abc"), Some(3));
        assert_eq!(re.search("++123abc7123abc++"), Some(0));
    }

    #[test]
    fn digit_exclusive_2() {
        let re = RegEx::from_pattern(r"123abc\D123abc").unwrap();

        assert_eq!(re.search(""), None);
        assert_eq!(re.search("123abc7123abc"), None);
        assert_eq!(re.search("123abcX123abc"), Some(0));
        assert_eq!(re.search("++123abcX123abc++"), Some(2));
        assert_eq!(re.search("++123abc7123abc++"), None);
    }

    #[test]
    fn digit_alternate() {
        let re = RegEx::from_pattern(r"a|\d").unwrap();

        assert_eq!(re.search(""), None);
        assert_eq!(re.search("a"), Some(0));
        assert_eq!(re.search("1"), Some(0));
        assert_eq!(re.search("x73ax"), Some(1));

        let re = RegEx::from_pattern(r"\d|a").unwrap();

        assert_eq!(re.search(""), None);
        assert_eq!(re.search("a"), Some(0));
        assert_eq!(re.search("1"), Some(0));
        assert_eq!(re.search("x73ax"), Some(1));
    }

    #[test]
    fn misc_classes() {
        let re = RegEx::from_pattern(r"+\s+\l+\u+\S+\L+\U+").unwrap();

        assert_eq!(re.search(""), None);
        assert_eq!(re.search("+ + + + + + +"), None);
        assert_eq!(re.search("+ +v+V+x+V+v+"), Some(0));
    }
}