regex-engine/tests/fsa_tests.c

113 lines
2.2 KiB
C

/*
* Copyright (c) Camden Dixie O'Brien
* SPDX-License-Identifier: AGPL-3.0-only
*/
#include "fsa.h"
#include "testing.h"
static void new_fsa_has_single_state_with_no_rules(void)
{
fsa_t fsa;
fsa_init(&fsa);
ASSERT_EQ(1, fsa.count);
fsa_free(&fsa);
}
static void new_fsa_has_initial_state_zero(void)
{
fsa_t fsa;
fsa_init(&fsa);
ASSERT_EQ(0, fsa.initial);
fsa_free(&fsa);
}
static void new_fsa_initial_state_has_no_rules(void)
{
fsa_t fsa;
fsa_init(&fsa);
ASSERT_EQ(0, fsa.states[fsa.initial].count);
fsa_free(&fsa);
}
static void new_fsa_initial_state_is_not_final(void)
{
fsa_t fsa;
fsa_init(&fsa);
ASSERT_FALSE(fsa.states[fsa.initial].final);
fsa_free(&fsa);
}
static void adding_state_increases_count(void)
{
fsa_t fsa;
fsa_init(&fsa);
fsa_add_state(&fsa);
ASSERT_EQ(2, fsa.count);
fsa_free(&fsa);
}
static void added_state_is_not_final(void)
{
fsa_t fsa;
fsa_init(&fsa);
const int id = fsa_add_state(&fsa);
ASSERT_FALSE(fsa.states[id].final);
fsa_free(&fsa);
}
static void added_state_has_no_rules(void)
{
fsa_t fsa;
fsa_init(&fsa);
const int id = fsa_add_state(&fsa);
ASSERT_EQ(0, fsa.states[id].count);
fsa_free(&fsa);
}
static void adding_rule_increases_count_of_state(void)
{
fsa_t fsa;
fsa_init(&fsa);
const int id = fsa_add_state(&fsa);
fsa_add_rule(&fsa, id, 0, 'a');
ASSERT_EQ(1, fsa.states[id].count);
fsa_free(&fsa);
}
static void added_rule_has_correct_input(void)
{
fsa_t fsa;
fsa_init(&fsa);
const int id = fsa_add_state(&fsa);
fsa_add_rule(&fsa, id, 0, 'a');
ASSERT_EQ('a', fsa.states[id].rules[0].input);
fsa_free(&fsa);
}
static void added_rule_has_correct_next(void)
{
fsa_t fsa;
fsa_init(&fsa);
const int id = fsa_add_state(&fsa);
fsa_add_rule(&fsa, id, 0, 'a');
ASSERT_EQ(0, fsa.states[id].rules[0].next);
fsa_free(&fsa);
}
int main(void)
{
TESTING_BEGIN();
new_fsa_has_single_state_with_no_rules();
new_fsa_has_initial_state_zero();
new_fsa_initial_state_has_no_rules();
new_fsa_initial_state_is_not_final();
adding_state_increases_count();
added_state_is_not_final();
added_state_has_no_rules();
adding_rule_increases_count_of_state();
added_rule_has_correct_input();
added_rule_has_correct_next();
return TESTING_END();
}