Exemplo n.º 1
0
TEST_F(TestDFA, DeadStateRemoval) {
    instance << "q0";
    instance << "q1";
    instance << "q2";
    instance << "q3";
    instance.addTransition("q0", "q1", 'a');
    instance.addTransition("q1", "q2", 'b');
    instance.addTransition("q2", "q2", 'c');
    instance.addTransition("q3", "q3", 'd');
    EXPECT_EQ(4, instance.size());
    DFA other = instance.withoutDeadStates();
    EXPECT_EQ(0, other.size());

    instance.accept("q1");
    other = instance.withoutDeadStates();
    EXPECT_EQ(2, other.size());
    EXPECT_EQ(other.initialState(), instance.initialState());

    instance.accept("q3");
    other = instance.withoutDeadStates();
    EXPECT_EQ(3, other.size());
    EXPECT_EQ(other.initialState(), instance.initialState());

    DFA empty;
    ASSERT_NO_THROW(empty.withoutDeadStates());
    EXPECT_EQ(0, empty.withoutDeadStates().size());
}
Exemplo n.º 2
0
TEST_F(TestDFA, EquivalentStateRemoval) {
    instance << "q0";
    instance << "q1";
    instance << "q2";
    instance << "q3";
    instance << "q4";
    instance << "q5";
    instance.addTransition("q0", "q1", 'a');
    instance.addTransition("q1", "q2", 'b');
    instance.addTransition("q2", "q2", 'c');
    instance.addTransition("q3", "q3", 'd');
    instance.addTransition("q3", "q4", 'a');
    instance.addTransition("q4", "q5", 'a');
    instance.addTransition("q5", "q3", 'a');
    instance.accept("q2");
    EXPECT_EQ(6, instance.size());
    instance.read("abc");
    EXPECT_TRUE(instance.accepts());
    instance.read("d");
    EXPECT_FALSE(instance.accepts());

    DFA other = instance.withoutDeadStates();
    EXPECT_EQ(3, other.size());
    EXPECT_EQ(other.initialState(), instance.initialState());

    other.read("abc");
    EXPECT_TRUE(other.accepts());
    other.read("d");
    EXPECT_FALSE(other.accepts());
}
Exemplo n.º 3
0
TEST_F(TestDFA, UselessStateRemoval) {
    instance << "q0";
    instance << "q1";
    instance << "q2";
    instance << "q3";
    instance.accept("q1");
    instance.addTransition("q0", "q1", 'a');
    instance.addTransition("q1", "q2", 'b');
    instance.addTransition("q2", "q2", 'c');
    instance.addTransition("q3", "q3", 'd');
    EXPECT_EQ(4, instance.size());
    
    DFA other = instance.withoutUselessStates();
    EXPECT_EQ(2, other.size());
    EXPECT_EQ(other.initialState(), instance.initialState());
}
Exemplo n.º 4
0
TEST_F(TestDFA, Minimization) {
    instance << "q0";
    instance << "q1";
    instance << "q2";
    instance << "q3";
    instance << "q4";
    instance << "q5";
    instance.accept("q3");
    instance.addTransition("q0", "q1", 'a');
    instance.addTransition("q0", "q2", 'b');
    instance.addTransition("q1", "q2", 'b');
    instance.addTransition("q2", "q1", 'b');
    instance.addTransition("q1", "q3", 'c');
    instance.addTransition("q2", "q3", 'c');
    instance.addTransition("q3", "q4", 'a');
    instance.addTransition("q4", "q4", 'b');
    instance.addTransition("q5", "q2", 'a');

    DFA minimized;
    ASSERT_NO_THROW(minimized = instance.minimized());
    EXPECT_EQ(3, minimized.size());
    EXPECT_EQ(minimized.initialState().getName(), instance.initialState().getName());
}