diff --git a/lib/construct.c b/lib/construct.c index f3fcaef..b4f86e1 100644 --- a/lib/construct.c +++ b/lib/construct.c @@ -118,6 +118,7 @@ static void construct_base(fsa_t *out, int symbol) const int id = fsa_add_state(out); fsa_add_rule(out, id, out->initial, symbol); out->initial = id; + out->states[0].final = true; } static void construct_star(fsa_t *out) @@ -186,6 +187,7 @@ static void construct_union(fsa_t *f, const fsa_t *o) memcpy(&g, f, sizeof(fsa_t)); fsa_init(f); + f->states[0].final = true; f->initial = fsa_add_state(f); int init, final; diff --git a/lib/fsa.c b/lib/fsa.c index a4611aa..dc5800d 100644 --- a/lib/fsa.c +++ b/lib/fsa.c @@ -19,7 +19,7 @@ void fsa_init(fsa_t *fsa) assert(NULL != fsa->states); fsa->initial = fsa_add_state(fsa); - fsa->states[fsa->initial].final = true; + fsa->states[fsa->initial].final = false; } void fsa_free(const fsa_t *fsa) diff --git a/tests/fsa_tests.c b/tests/fsa_tests.c index 89206c8..3cbbbf1 100644 --- a/tests/fsa_tests.c +++ b/tests/fsa_tests.c @@ -30,11 +30,11 @@ static void new_fsa_initial_state_has_no_rules(void) fsa_free(&fsa); } -static void new_fsa_initial_state_is_final(void) +static void new_fsa_initial_state_is_not_final(void) { fsa_t fsa; fsa_init(&fsa); - ASSERT_TRUE(fsa.states[fsa.initial].final); + ASSERT_FALSE(fsa.states[fsa.initial].final); fsa_free(&fsa); } @@ -101,7 +101,7 @@ int main(void) 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(); + new_fsa_initial_state_is_not_final(); adding_state_increases_count(); added_state_is_not_final(); added_state_has_no_rules();