use repr::wrappers::seq;
macro_rules! assert_regex_eq {
($expr:expr, $rhs:literal) => {
assert_eq!($expr.to_regex_string(), $rhs)
};
}
#[test]
fn to_regex_string() {
assert_regex_eq!(seq(['a']), "a");
assert_regex_eq!(seq(['a']).mul(seq(['b'])), "ab");
assert_regex_eq!(seq(['a']).mul(seq(['b'])).mul(seq(['c'])), "abc");
assert_regex_eq!(seq(['a', 'b']), "ab");
assert_regex_eq!(seq(['a', 'b', 'c']), "abc");
assert_regex_eq!(seq(['a']).or(seq(['b'])), "(a|b)");
assert_regex_eq!(seq(['a']).or(seq(['b'])).or(seq(['c'])), "(a|(b|c))");
assert_regex_eq!(seq(['a']).mul(seq(['b', 'c'])), "abc");
assert_regex_eq!(seq(['a']).mul(seq(['b', 'c', 'd'])), "abcd");
assert_regex_eq!(seq(['a', 'b']).mul(seq(['c'])), "abc");
assert_regex_eq!(seq(['a', 'b', 'c']).mul(seq(['d'])), "abcd");
assert_regex_eq!(seq(['a']).inf(), "a*");
assert_regex_eq!(seq(['a']).cap(), "(a)");
assert_regex_eq!(seq(['a']).mul(seq(['b'])).cap(), "(ab)");
assert_regex_eq!(seq(['a']).inf().cap(), "(a*)");
}
#[test]
fn escape() {
assert_regex_eq!(seq(['+']), "\\+");
assert_regex_eq!(seq(['*']), "\\*");
assert_regex_eq!(seq(['?']), "\\?");
assert_regex_eq!(seq(['.']), "\\.");
assert_regex_eq!(seq(['(']), "\\(");
assert_regex_eq!(seq([')']), "\\)");
assert_regex_eq!(seq(['[']), "\\[");
assert_regex_eq!(seq([']']), "\\]");
assert_regex_eq!(seq(['{']), "\\{");
assert_regex_eq!(seq(['}']), "\\}");
assert_regex_eq!(seq(['^']), "\\^");
assert_regex_eq!(seq(['$']), "\\$");
assert_regex_eq!(seq(['|']), "\\|");
assert_regex_eq!(seq(['\\']), "\\\\");
}
macro_rules! assert_captures {
($expr:expr, $rhs:literal) => {
assert!($expr.captures($rhs).is_some());
};
}
macro_rules! assert_not_captures {
($expr:expr, $rhs:literal) => {
assert!($expr.captures($rhs).is_none());
};
}
#[test]
fn captures() {
assert_captures!(seq(['a']), "a");
assert_not_captures!(seq(['a']), "aa");
assert_captures!(seq(['a']).mul(seq(['b'])), "ab");
assert_captures!(seq(['a']).mul(seq(['b'])).mul(seq(['c'])), "abc");
assert_captures!(seq(['a', 'b']), "ab");
assert_captures!(seq(['a', 'b', 'c']), "abc");
assert_captures!(seq(['a']).or(seq(['b'])), "a");
assert_captures!(seq(['a']).or(seq(['b'])), "b");
assert_captures!(seq(['a']).or(seq(['b'])).or(seq(['c'])), "a");
assert_captures!(seq(['a']).or(seq(['b'])).or(seq(['c'])), "b");
assert_captures!(seq(['a']).or(seq(['b'])).or(seq(['c'])), "c");
assert_captures!(seq(['a']).mul(seq(['b', 'c'])), "abc");
assert_captures!(seq(['a']).mul(seq(['b', 'c', 'd'])), "abcd");
assert_captures!(seq(['a', 'b']).mul(seq(['c'])), "abc");
assert_captures!(seq(['a', 'b', 'c']).mul(seq(['d'])), "abcd");
assert_captures!(seq(['a']).inf(), "");
assert_captures!(seq(['a']).inf(), "a");
assert_captures!(seq(['a']).inf(), "aa");
assert_captures!(seq(['a']).inf(), "aaa");
assert_captures!(seq(['a']).cap(), "a");
assert_captures!(seq(['a']).mul(seq(['b'])).cap(), "ab");
assert_captures!(seq(['a']).inf().cap(), "a");
}