# HG changeset patch # User Laman # Date 2024-06-16 23:20:36 # Node ID 9ddf4beb947bef7b379bf11afd0292b5773f74cd # Parent e93b264ec5cc8411b3538281c3ea4d6b5527f023 added tests diff --git a/tests/test_regexp.rs b/tests/test_regexp.rs --- a/tests/test_regexp.rs +++ b/tests/test_regexp.rs @@ -1,7 +1,68 @@ use regexp::Regexp; #[test] -fn test_eval() { - let r = Regexp::new(&String::from("(ab)*")); +fn test_eval_basic_nfa() { + let r = Regexp::new(&String::from("abc")); + 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")).determinize(); + 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*")).eval(String::from(""))); + assert!(Regexp::new(&String::from("")).eval(String::from(""))); + assert!(!Regexp::new(&String::from("")).eval(String::from("a"))); + assert!(!Regexp::new(&String::from("a")).eval(String::from(""))); +} + +#[test] +fn test_eval_empty_dfa() { + assert!(Regexp::new(&String::from("a*")).determinize().eval(String::from(""))); + assert!(Regexp::new(&String::from("")).determinize().eval(String::from(""))); + assert!(!Regexp::new(&String::from("")).determinize().eval(String::from("a"))); +} + +#[test] +fn test_eval_asterisk_nfa() { + let r = Regexp::new(&String::from("a*b*")); + 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*")).determinize(); + 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_plus_nfa() { + let r = Regexp::new(&String::from("(ab)+")); + assert!(!r.eval(String::from("a"))); + assert!(r.eval(String::from("ab"))); + assert!(r.eval(String::from("abab"))); + assert!(!r.eval(String::from("aabb"))); +} + +#[test] +fn test_eval_plus_dfa() { + let r = Regexp::new(&String::from("(ab)+")).determinize(); + assert!(!r.eval(String::from("a"))); + assert!(r.eval(String::from("ab"))); + assert!(r.eval(String::from("abab"))); + assert!(!r.eval(String::from("aabb"))); +}