Files @ 1790bcb433e3
Branch filter:

Location: Regular-Expresso/tests/test_regexp.rs - annotation

1790bcb433e3 4.0 KiB application/rls-services+xml Show Source Show as Raw Download as Raw
Laman
fixes: never create an empty automaton, removed the erroneous early fail
e93b264ec5cc
7e640b0cffa7
e93b264ec5cc
e93b264ec5cc
9ddf4beb947b
7e640b0cffa7
9ddf4beb947b
9ddf4beb947b
9ddf4beb947b
9ddf4beb947b
9ddf4beb947b
9ddf4beb947b
9ddf4beb947b
4f7b6352013d
9ddf4beb947b
9ddf4beb947b
9ddf4beb947b
9ddf4beb947b
9ddf4beb947b
9ddf4beb947b
9ddf4beb947b
7e640b0cffa7
7e640b0cffa7
7e640b0cffa7
7e640b0cffa7
9ddf4beb947b
9ddf4beb947b
9ddf4beb947b
9ddf4beb947b
4f7b6352013d
4f7b6352013d
4f7b6352013d
9ddf4beb947b
9ddf4beb947b
9ddf4beb947b
9ddf4beb947b
7e640b0cffa7
9ddf4beb947b
e93b264ec5cc
9ddf4beb947b
9ddf4beb947b
e93b264ec5cc
9ddf4beb947b
9ddf4beb947b
9ddf4beb947b
4f7b6352013d
9ddf4beb947b
9ddf4beb947b
9ddf4beb947b
9ddf4beb947b
9ddf4beb947b
9ddf4beb947b
9ddf4beb947b
e9496b21cf64
e9496b21cf64
e9496b21cf64
e9496b21cf64
e9496b21cf64
e9496b21cf64
e9496b21cf64
e9496b21cf64
e9496b21cf64
e9496b21cf64
e9496b21cf64
4f7b6352013d
e9496b21cf64
e9496b21cf64
e9496b21cf64
e9496b21cf64
e9496b21cf64
e9496b21cf64
e9496b21cf64
e9496b21cf64
68c16b6d84f3
68c16b6d84f3
68c16b6d84f3
68c16b6d84f3
68c16b6d84f3
68c16b6d84f3
68c16b6d84f3
68c16b6d84f3
68c16b6d84f3
68c16b6d84f3
68c16b6d84f3
68c16b6d84f3
68c16b6d84f3
68c16b6d84f3
4f7b6352013d
68c16b6d84f3
68c16b6d84f3
68c16b6d84f3
68c16b6d84f3
4f7b6352013d
68c16b6d84f3
68c16b6d84f3
68c16b6d84f3
68c16b6d84f3
68c16b6d84f3
68c16b6d84f3
7e640b0cffa7
7e640b0cffa7
7e640b0cffa7
7e640b0cffa7
7e640b0cffa7
7e640b0cffa7
7e640b0cffa7
7e640b0cffa7
7e640b0cffa7
7e640b0cffa7
7e640b0cffa7
7e640b0cffa7
7e640b0cffa7
7e640b0cffa7
7e640b0cffa7
7e640b0cffa7
e9496b21cf64
e9496b21cf64
e9496b21cf64
e9496b21cf64
e9496b21cf64
e9496b21cf64
e9496b21cf64
e9496b21cf64
e9496b21cf64
e9496b21cf64
e9496b21cf64
e9496b21cf64
e9496b21cf64
e9496b21cf64
e9496b21cf64
e9496b21cf64
e9496b21cf64
e9496b21cf64
use regexp::Regexp;
use regexp::ParsingError;

#[test]
fn test_eval_basic_nfa() {
	let r = Regexp::new(&String::from("abc")).unwrap();
	assert!(r.eval(String::from("abc")));
	assert!(!r.eval(String::from("ab")));
	assert!(!r.eval(String::from("abcd")));
}

#[test]
fn test_eval_basic_dfa() {
	let r = Regexp::new(&String::from("abc")).unwrap().determinize().reduce().normalize();
	assert!(r.eval(String::from("abc")));
	assert!(!r.eval(String::from("ab")));
	assert!(!r.eval(String::from("abcd")));
}

#[test]
fn test_eval_empty_nfa() {
	assert!(Regexp::new(&String::from("a*")).unwrap().eval(String::from("")));
	assert!(Regexp::new(&String::from("")).unwrap().eval(String::from("")));
	assert!(!Regexp::new(&String::from("")).unwrap().eval(String::from("a")));
	assert!(!Regexp::new(&String::from("a")).unwrap().eval(String::from("")));
}

#[test]
fn test_eval_empty_dfa() {
	assert!(Regexp::new(&String::from("a*")).unwrap().determinize().reduce().normalize().eval(String::from("")));
	assert!(Regexp::new(&String::from("")).unwrap().determinize().reduce().normalize().eval(String::from("")));
	assert!(!Regexp::new(&String::from("")).unwrap().determinize().reduce().normalize().eval(String::from("a")));
}

#[test]
fn test_eval_asterisk_nfa() {
	let r = Regexp::new(&String::from("a*b*")).unwrap();
	assert!(r.eval(String::from("a")));
	assert!(r.eval(String::from("ab")));
	assert!(r.eval(String::from("aabb")));
	assert!(!r.eval(String::from("abab")));
}

#[test]
fn test_eval_asterisk_dfa() {
	let r = Regexp::new(&String::from("a*b*")).unwrap().determinize().normalize().reduce();
	assert!(r.eval(String::from("a")));
	assert!(r.eval(String::from("ab")));
	assert!(r.eval(String::from("aabb")));
	assert!(!r.eval(String::from("abab")));
}

#[test]
fn test_eval_alternative_nfa() {
	let r = Regexp::new(&String::from("a|b|c")).unwrap();
	assert!(r.eval(String::from("a")));
	assert!(r.eval(String::from("b")));
	assert!(r.eval(String::from("c")));
	assert!(!r.eval(String::from("")));
	assert!(!r.eval(String::from("ab")));
}

#[test]
fn test_eval_alternative_dfa() {
	let r = Regexp::new(&String::from("a|b|c")).unwrap().determinize().reduce().normalize();
	assert!(r.eval(String::from("a")));
	assert!(r.eval(String::from("b")));
	assert!(r.eval(String::from("c")));
	assert!(!r.eval(String::from("")));
	assert!(!r.eval(String::from("ab")));
}

#[test]
fn test_eval_lambda_nfa() {
	let r = Regexp::new(&String::from("a_")).unwrap();
	assert!(r.eval(String::from("a")));
	assert!(!r.eval(String::from("")));
	assert!(!r.eval(String::from("ab")));

	let r = Regexp::new(&String::from("a|_")).unwrap();
	assert!(r.eval(String::from("a")));
	assert!(r.eval(String::from("")));
	assert!(!r.eval(String::from("b")));
}

#[test]
fn test_eval_lambda_dfa() {
	let r = Regexp::new(&String::from("a_")).unwrap().determinize().reduce().normalize();
	assert!(r.eval(String::from("a")));
	assert!(!r.eval(String::from("")));
	assert!(!r.eval(String::from("ab")));

	let r = Regexp::new(&String::from("a|_")).unwrap().determinize().reduce().normalize();
	assert!(r.eval(String::from("a")));
	assert!(r.eval(String::from("")));
	assert!(!r.eval(String::from("b")));
}

#[test]
fn test_invalid_asterisk() {
	let x = Regexp::new(&String::from("*"));
	assert!(matches!(x, Err(ParsingError::Asterisk{s: _, pos: 0})));
}

#[test]
fn test_invalid_closing_parenthesis() {
	let x = Regexp::new(&String::from("(a"));
	assert!(matches!(x, Err(ParsingError::ClosingParenthesis{s: _, pos: 0})));
}

#[test]
fn test_invalid_opening_parenthesis() {
	let x = Regexp::new(&String::from("a)"));
	assert!(matches!(x, Err(ParsingError::OpeningParenthesis{s: _, pos: 1})));
}

#[test]
fn test_invalid_empty_variant_start() {
	let x = Regexp::new(&String::from("a(|b)"));
	assert!(matches!(x, Err(ParsingError::EmptyAlternativeVariant)));
}

#[test]
fn test_invalid_empty_variant_end() {
	let x = Regexp::new(&String::from("a|"));
	assert!(matches!(x, Err(ParsingError::EmptyAlternativeVariant)));
}

#[test]
fn test_invalid_empty_variant_middle() {
	let x = Regexp::new(&String::from("a||b"));
	assert!(matches!(x, Err(ParsingError::EmptyAlternativeVariant)));
}