/* * 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_final(void) { fsa_t fsa; fsa_init(&fsa); ASSERT_TRUE(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_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(); }