Add ASSERT_ACCEPTS and ASSERT_REJECTS testing macros
This commit is contained in:
parent
c6f0cf6381
commit
5dbcaaaf40
@ -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);
|
||||
|
@ -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
|
||||
|
Loading…
x
Reference in New Issue
Block a user