TEST_F(TestDFA, Containment) { instance << "q0"; instance << "q1"; instance << "q2"; instance << "q3"; instance.addTransition("q0", "q1", 'a'); instance.addTransition("q0", "q1", 'b'); instance.addTransition("q1", "q2", 'a'); instance.addTransition("q1", "q2", 'b'); instance.addTransition("q2", "q3", 'a'); instance.addTransition("q2", "q3", 'b'); instance.addTransition("q3", "q0", 'a'); instance.addTransition("q3", "q0", 'b'); instance.accept("q0"); instance.accept("q2"); DFA second; second << "q0"; second << "q1"; second.addTransition("q0", "q1", 'a'); second.addTransition("q1", "q0", 'a'); second.accept("q0"); bool r1, r2; ASSERT_NO_THROW(r1 = instance.contains(second)); ASSERT_NO_THROW(r2 = second.contains(instance)); EXPECT_TRUE(r1); EXPECT_FALSE(r2); EXPECT_EQ(4, instance.size()); EXPECT_EQ(2, second.size()); }
TEST_F(TestDFA, RValueOperations) { DFA first; first << "q0" << "q1" << "q2"; first.addTransition("q0", "q1", 'a'); first.addTransition("q1", "q2", 'a'); first.addTransition("q2", "q0", 'a'); first.accept("q0"); DFA second; second << "q0" << "q1"; second.addTransition("q0", "q1", 'a'); second.addTransition("q1", "q0", 'a'); second.accept("q1"); EXPECT_NO_THROW(first & ~second); EXPECT_NO_THROW(first | ~second); EXPECT_NO_THROW(first == ~second); EXPECT_NO_THROW(first.contains(~second)); EXPECT_NO_THROW(second.contains(~first)); }