Fix bug in construct_nfa

Intermediate final states were being left in by add_fsa(); we always
want to mark the added FSA's final state as non-final.
This commit is contained in:
2024-11-02 21:54:30 +00:00
parent 074b174d0f
commit 34fee99232
3 changed files with 62 additions and 0 deletions

View File

@@ -47,11 +47,28 @@ static void test_arbitrary_regex_1(void)
fsa_free(&dfa);
}
static void test_arbitrary_regex_2(void)
{
fsa_t dfa;
const char *regex = "(l|wh)?[aeiou]+";
const bool success = compile(regex, strlen(regex), &dfa);
ASSERT_TRUE(success);
ASSERT_ACCEPTS(&dfa, "laaaa");
ASSERT_ACCEPTS(&dfa, "eeeee");
ASSERT_ACCEPTS(&dfa, "iii");
ASSERT_ACCEPTS(&dfa, "whooo");
ASSERT_ACCEPTS(&dfa, "u");
ASSERT_REJECTS(&dfa, "wh");
ASSERT_REJECTS(&dfa, "lxxx");
fsa_free(&dfa);
}
int main(void)
{
TESTING_BEGIN();
test_foo_or_bar_regex();
test_even_number_of_Is_regex();
test_arbitrary_regex_1();
test_arbitrary_regex_2();
return TESTING_END();
}