Exemplo n.º 1
0
TEST_F(TestDFA, Complement) {
    instance << "q0";
    instance << "q1";
    instance << "q2";
    instance.addTransition("q0", "q1", 'a');
    instance.addTransition("q1", "q2", 'a');
    instance.addTransition("q2", "q0", 'a');
    instance.accept("q0");

    DFA complement;
    ASSERT_NO_THROW(complement = ~instance);

    EXPECT_EQ(3, instance.size());
    EXPECT_EQ(3, complement.size());

    EXPECT_TRUE(instance.accepts());
    EXPECT_FALSE(complement.accepts());

    instance.read("a");
    complement.read("a");
    EXPECT_FALSE(instance.accepts());
    EXPECT_TRUE(complement.accepts());

    instance.read("a");
    complement.read("a");
    EXPECT_FALSE(instance.accepts());
    EXPECT_TRUE(complement.accepts());

    instance.read("a");
    complement.read("a");
    EXPECT_TRUE(instance.accepts());
    EXPECT_FALSE(complement.accepts());
}
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, Acceptance) {
    instance << "q0";
    instance << "q1";
    instance << "q2";
    instance.addTransition("q0", "q1", 'a');
    instance.addTransition("q1", "q2", 'b');
    instance.addTransition("q2", "q1", 'b');
    instance.accept("q2");

    instance.read("ab");
    EXPECT_TRUE(instance.accepts());
    instance.reset();
    instance.read("abb");
    EXPECT_FALSE(instance.accepts());

    DFA other;
    other << "q0";
    other.accept("q0");

    EXPECT_TRUE(other.accepts());
    other.read("a");
    EXPECT_FALSE(other.accepts());
    other.reset();
    EXPECT_TRUE(other.accepts());
}
Exemplo n.º 4
0
TEST_F(TestDFA, Union) {
    instance << "q0";
    instance << "q1";
    instance << "q2";
    instance.addTransition("q0", "q1", 'a');
    instance.addTransition("q1", "q2", 'a');
    instance.addTransition("q2", "q0", 'a');
    instance.accept("q0");

    DFA second;
    second << "q0";
    second << "q1";
    second.addTransition("q0", "q1", 'a');
    second.addTransition("q1", "q0", 'a');
    second.accept("q0");

    DFA unionDFA = instance | second;
    EXPECT_EQ(3, instance.size());
    EXPECT_EQ(2, second.size());
    EXPECT_EQ(6, unionDFA.size());
    EXPECT_TRUE(unionDFA.accepts());
    unionDFA.read("a");
    EXPECT_FALSE(unionDFA.accepts());
    unionDFA.read("a");
    EXPECT_TRUE(unionDFA.accepts());
    unionDFA.read("a");
    EXPECT_TRUE(unionDFA.accepts());
    unionDFA.read("a");
    EXPECT_TRUE(unionDFA.accepts());
    unionDFA.read("a");
    EXPECT_FALSE(unionDFA.accepts());
    unionDFA.read("a");
    EXPECT_TRUE(unionDFA.accepts());
}
Exemplo n.º 5
0
TEST_F(TestDFA, Intersection) {
    instance << "q0";
    instance << "q1";
    instance << "q2";
    instance.addTransition("q0", "q1", 'a');
    instance.addTransition("q1", "q2", 'a');
    instance.addTransition("q2", "q0", 'a');
    instance.accept("q0");

    DFA second;
    second << "q0";
    second << "q1";
    second.addTransition("q0", "q1", 'a');
    second.addTransition("q1", "q0", 'a');
    second.accept("q0");

    DFA intersection = instance & second;
    EXPECT_EQ(3, instance.size());
    EXPECT_EQ(2, second.size());
    EXPECT_EQ(6, intersection.size());
    EXPECT_TRUE(intersection.accepts());
    intersection.read("a");
    EXPECT_FALSE(intersection.accepts());
    intersection.read("a");
    EXPECT_FALSE(intersection.accepts());
    intersection.read("a");
    EXPECT_FALSE(intersection.accepts());
    intersection.read("a");
    EXPECT_FALSE(intersection.accepts());
    intersection.read("a");
    EXPECT_FALSE(intersection.accepts());
    intersection.read("a");
    EXPECT_TRUE(intersection.accepts());
}