regex-engine/tests/integration_tests.c

101 lines
2.4 KiB
C

/*
* 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 <stdio.h>");
ASSERT_REJECTS(&dfa, "#include \"foo.h\"");
fsa_free(&dfa);
}
static void test_quoted_string_regex(void)
{
fsa_t dfa;
const char *regex = "'(\\\\'|[^'])*'";
const bool success = compile(regex, strlen(regex), &dfa);
ASSERT_TRUE(success);
ASSERT_ACCEPTS(&dfa, "''");
ASSERT_ACCEPTS(&dfa, "'foo bar baz'");
ASSERT_ACCEPTS(&dfa, "'foo \\'bar\\' baz'");
ASSERT_REJECTS(&dfa, "'foo 'bar' baz'");
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();
test_quoted_string_regex();
return TESTING_END();
}