Add ASSERT_ACCEPTS and ASSERT_REJECTS testing macros

This commit is contained in:
Camden Dixie O'Brien 2024-11-02 16:38:32 +00:00
parent c6f0cf6381
commit 5dbcaaaf40
2 changed files with 63 additions and 62 deletions

View File

@ -6,8 +6,6 @@
#include "convert.h"
#include "testing.h"
#define ACCEPTS(dfa, s) fsa_accepts(dfa, s, strlen(s))
static bool is_deterministic(const fsa_t *fsa)
{
for (int i = 0; i < fsa->count; ++i) {
@ -38,9 +36,9 @@ static void test_trivial_case(void)
convert_to_dfa(&nfa, &dfa);
ASSERT_TRUE(is_deterministic(&dfa));
ASSERT_TRUE(ACCEPTS(&dfa, "a"));
ASSERT_FALSE(ACCEPTS(&dfa, "aa"));
ASSERT_FALSE(ACCEPTS(&dfa, "b"));
ASSERT_ACCEPTS(&dfa, "a");
ASSERT_REJECTS(&dfa, "aa");
ASSERT_REJECTS(&dfa, "b");
fsa_free(&nfa);
fsa_free(&dfa);
@ -62,13 +60,13 @@ static void test_epsilon_move(void)
convert_to_dfa(&nfa, &dfa);
ASSERT_TRUE(is_deterministic(&dfa));
ASSERT_TRUE(ACCEPTS(&dfa, "a"));
ASSERT_TRUE(ACCEPTS(&dfa, "b"));
ASSERT_FALSE(ACCEPTS(&dfa, "aa"));
ASSERT_FALSE(ACCEPTS(&dfa, "bb"));
ASSERT_FALSE(ACCEPTS(&dfa, "ab"));
ASSERT_FALSE(ACCEPTS(&dfa, "ba"));
ASSERT_FALSE(ACCEPTS(&dfa, "c"));
ASSERT_ACCEPTS(&dfa, "a");
ASSERT_ACCEPTS(&dfa, "b");
ASSERT_REJECTS(&dfa, "aa");
ASSERT_REJECTS(&dfa, "bb");
ASSERT_REJECTS(&dfa, "ab");
ASSERT_REJECTS(&dfa, "ba");
ASSERT_REJECTS(&dfa, "c");
fsa_free(&nfa);
fsa_free(&dfa);
@ -92,13 +90,13 @@ static void test_branch(void)
convert_to_dfa(&nfa, &dfa);
ASSERT_TRUE(is_deterministic(&dfa));
ASSERT_TRUE(ACCEPTS(&dfa, "aa"));
ASSERT_TRUE(ACCEPTS(&dfa, "ab"));
ASSERT_FALSE(ACCEPTS(&dfa, "a"));
ASSERT_FALSE(ACCEPTS(&dfa, "aaa"));
ASSERT_FALSE(ACCEPTS(&dfa, "abb"));
ASSERT_FALSE(ACCEPTS(&dfa, "c"));
ASSERT_FALSE(ACCEPTS(&dfa, "ac"));
ASSERT_ACCEPTS(&dfa, "aa");
ASSERT_ACCEPTS(&dfa, "ab");
ASSERT_REJECTS(&dfa, "a");
ASSERT_REJECTS(&dfa, "aaa");
ASSERT_REJECTS(&dfa, "abb");
ASSERT_REJECTS(&dfa, "c");
ASSERT_REJECTS(&dfa, "ac");
fsa_free(&nfa);
fsa_free(&dfa);
@ -127,19 +125,19 @@ static void test_nfa_a(void)
ASSERT_TRUE(is_deterministic(&dfa));
ASSERT_TRUE(ACCEPTS(&dfa, ""));
ASSERT_TRUE(ACCEPTS(&dfa, "a"));
ASSERT_TRUE(ACCEPTS(&dfa, "b"));
ASSERT_TRUE(ACCEPTS(&dfa, "ab"));
ASSERT_TRUE(ACCEPTS(&dfa, "ba"));
ASSERT_TRUE(ACCEPTS(&dfa, "aaaab"));
ASSERT_ACCEPTS(&dfa, "");
ASSERT_ACCEPTS(&dfa, "a");
ASSERT_ACCEPTS(&dfa, "b");
ASSERT_ACCEPTS(&dfa, "ab");
ASSERT_ACCEPTS(&dfa, "ba");
ASSERT_ACCEPTS(&dfa, "aaaab");
ASSERT_FALSE(ACCEPTS(&dfa, "aaab"));
ASSERT_FALSE(ACCEPTS(&dfa, "aaaba"));
ASSERT_FALSE(ACCEPTS(&dfa, "aaabb"));
ASSERT_FALSE(ACCEPTS(&dfa, "aaaaab"));
ASSERT_FALSE(ACCEPTS(&dfa, "aaaaaba"));
ASSERT_FALSE(ACCEPTS(&dfa, "aaaaabb"));
ASSERT_REJECTS(&dfa, "aaab");
ASSERT_REJECTS(&dfa, "aaaba");
ASSERT_REJECTS(&dfa, "aaabb");
ASSERT_REJECTS(&dfa, "aaaaab");
ASSERT_REJECTS(&dfa, "aaaaaba");
ASSERT_REJECTS(&dfa, "aaaaabb");
fsa_free(&nfa);
fsa_free(&dfa);
@ -166,21 +164,21 @@ static void test_nfa_b(void)
ASSERT_TRUE(is_deterministic(&dfa));
ASSERT_TRUE(ACCEPTS(&dfa, ""));
ASSERT_TRUE(ACCEPTS(&dfa, "a"));
ASSERT_TRUE(ACCEPTS(&dfa, "aaaaaa"));
ASSERT_TRUE(ACCEPTS(&dfa, "b"));
ASSERT_TRUE(ACCEPTS(&dfa, "bbbbb"));
ASSERT_TRUE(ACCEPTS(&dfa, "aaaaaa"));
ASSERT_TRUE(ACCEPTS(&dfa, "aaaaabaa"));
ASSERT_TRUE(ACCEPTS(&dfa, "aaaaabaab"));
ASSERT_ACCEPTS(&dfa, "");
ASSERT_ACCEPTS(&dfa, "a");
ASSERT_ACCEPTS(&dfa, "aaaaaa");
ASSERT_ACCEPTS(&dfa, "b");
ASSERT_ACCEPTS(&dfa, "bbbbb");
ASSERT_ACCEPTS(&dfa, "aaaaaa");
ASSERT_ACCEPTS(&dfa, "aaaaabaa");
ASSERT_ACCEPTS(&dfa, "aaaaabaab");
ASSERT_FALSE(ACCEPTS(&dfa, "ba"));
ASSERT_FALSE(ACCEPTS(&dfa, "aba"));
ASSERT_FALSE(ACCEPTS(&dfa, "abab"));
ASSERT_FALSE(ACCEPTS(&dfa, "aaaaaba"));
ASSERT_FALSE(ACCEPTS(&dfa, "aaaaabaaa"));
ASSERT_FALSE(ACCEPTS(&dfa, "aaaaabbaabbaaa"));
ASSERT_REJECTS(&dfa, "ba");
ASSERT_REJECTS(&dfa, "aba");
ASSERT_REJECTS(&dfa, "abab");
ASSERT_REJECTS(&dfa, "aaaaaba");
ASSERT_REJECTS(&dfa, "aaaaabaaa");
ASSERT_REJECTS(&dfa, "aaaaabbaabbaaa");
fsa_free(&nfa);
fsa_free(&dfa);
@ -212,24 +210,24 @@ static void test_nfa_c(void)
ASSERT_TRUE(is_deterministic(&dfa));
ASSERT_TRUE(ACCEPTS(&dfa, "a"));
ASSERT_TRUE(ACCEPTS(&dfa, "aba"));
ASSERT_TRUE(ACCEPTS(&dfa, "aaba"));
ASSERT_TRUE(ACCEPTS(&dfa, "abaaba"));
ASSERT_TRUE(ACCEPTS(&dfa, "ba"));
ASSERT_TRUE(ACCEPTS(&dfa, "babba"));
ASSERT_TRUE(ACCEPTS(&dfa, "baaa"));
ASSERT_TRUE(ACCEPTS(&dfa, "baba"));
ASSERT_TRUE(ACCEPTS(&dfa, "babaa"));
ASSERT_ACCEPTS(&dfa, "a");
ASSERT_ACCEPTS(&dfa, "aba");
ASSERT_ACCEPTS(&dfa, "aaba");
ASSERT_ACCEPTS(&dfa, "abaaba");
ASSERT_ACCEPTS(&dfa, "ba");
ASSERT_ACCEPTS(&dfa, "babba");
ASSERT_ACCEPTS(&dfa, "baaa");
ASSERT_ACCEPTS(&dfa, "baba");
ASSERT_ACCEPTS(&dfa, "babaa");
ASSERT_FALSE(ACCEPTS(&dfa, ""));
ASSERT_FALSE(ACCEPTS(&dfa, "ab"));
ASSERT_FALSE(ACCEPTS(&dfa, "aab"));
ASSERT_FALSE(ACCEPTS(&dfa, "abbab"));
ASSERT_FALSE(ACCEPTS(&dfa, "b"));
ASSERT_FALSE(ACCEPTS(&dfa, "bb"));
ASSERT_FALSE(ACCEPTS(&dfa, "baaabab"));
ASSERT_FALSE(ACCEPTS(&dfa, "aabababab"));
ASSERT_REJECTS(&dfa, "");
ASSERT_REJECTS(&dfa, "ab");
ASSERT_REJECTS(&dfa, "aab");
ASSERT_REJECTS(&dfa, "abbab");
ASSERT_REJECTS(&dfa, "b");
ASSERT_REJECTS(&dfa, "bb");
ASSERT_REJECTS(&dfa, "baaabab");
ASSERT_REJECTS(&dfa, "aabababab");
fsa_free(&nfa);
fsa_free(&dfa);

View File

@ -34,6 +34,9 @@
#define ASSERT_NOT_NULL(p) ASSERT_FALSE(NULL == (p))
#define ASSERT_MEM_EQ(p, q, n) ASSERT_FALSE(memcmp(p, q, n) != 0)
#define ASSERT_ACCEPTS(dfa, s) ASSERT_TRUE(fsa_accepts(dfa, s, strlen(s)))
#define ASSERT_REJECTS(dfa, s) ASSERT_FALSE(fsa_accepts(dfa, s, strlen(s)))
extern int fail_count;
#endif