/* * Copyright (c) Camden Dixie O'Brien * SPDX-License-Identifier: AGPL-3.0-only */ #include "compile.h" #include "testing.h" static void test_foo_or_bar_regex(void) { fsa_t dfa; const char *regex = "foo|bar"; const bool success = compile(regex, strlen(regex), &dfa); ASSERT_TRUE(success); ASSERT_ACCEPTS(&dfa, "foo"); ASSERT_ACCEPTS(&dfa, "bar"); ASSERT_REJECTS(&dfa, "baz"); fsa_free(&dfa); } static void test_even_number_of_Is_regex(void) { fsa_t dfa; const char *regex = "(II)*"; const bool success = compile(regex, strlen(regex), &dfa); ASSERT_TRUE(success); ASSERT_ACCEPTS(&dfa, ""); ASSERT_ACCEPTS(&dfa, "II"); ASSERT_ACCEPTS(&dfa, "IIII"); ASSERT_ACCEPTS(&dfa, "IIIIIIIIII"); ASSERT_REJECTS(&dfa, "III"); ASSERT_REJECTS(&dfa, "IIIII"); ASSERT_REJECTS(&dfa, "IIIIIIIII"); fsa_free(&dfa); } static void test_arbitrary_regex_1(void) { fsa_t dfa; const char *regex = "(abc!?)*|dd+"; const bool success = compile(regex, strlen(regex), &dfa); ASSERT_TRUE(success); ASSERT_ACCEPTS(&dfa, "abc!abcabc"); ASSERT_ACCEPTS(&dfa, "dddddddd"); ASSERT_REJECTS(&dfa, "d"); ASSERT_REJECTS(&dfa, "abcd"); 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); } static void test_system_header_include_regex(void) { fsa_t dfa; const char *regex = "#include <[abcdefghijklmnopqrstuvwxyz]+\\.h>"; const bool success = compile(regex, strlen(regex), &dfa); ASSERT_TRUE(success); ASSERT_ACCEPTS(&dfa, "#include "); ASSERT_REJECTS(&dfa, "#include \"foo.h\""); 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(); test_system_header_include_regex(); return TESTING_END(); }