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

View File

@ -34,6 +34,9 @@
#define ASSERT_NOT_NULL(p) ASSERT_FALSE(NULL == (p)) #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_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; extern int fail_count;
#endif #endif