public void MinimizeIncompleteIssue() { var dfa = new Dfa <string, char>(); dfa.InitialState = "q0"; dfa.AcceptingStates.Add("q3"); dfa.AcceptingStates.Add("q4"); dfa.AddTransition("q0", '0', "q1"); dfa.AddTransition("q1", 'x', "q2"); dfa.AddTransition("q2", '0', "q3"); dfa.AddTransition("q3", '0', "q4"); dfa.AddTransition("q4", '0', "q4"); var minDfa = dfa.Minimize(); var expectedStates = new[] { "q0", "q1", "q2", "q3, q4" }.Select(ParseStateSet); var gotStates = minDfa.States.ToHashSet(); var expectedAcceptingStates = new[] { "q3, q4" }.Select(ParseStateSet); var gotAcceptingStates = minDfa.AcceptingStates.ToHashSet(); Assert.True(gotStates.SetEquals(expectedStates)); Assert.True(gotAcceptingStates.SetEquals(expectedAcceptingStates)); Assert.Equal(4, minDfa.Transitions.Count); AssertTransition(minDfa, "q0", '0', "q1"); AssertTransition(minDfa, "q1", 'x', "q2"); AssertTransition(minDfa, "q2", '0', "q3, q4"); AssertTransition(minDfa, "q3, q4", '0', "q3, q4"); }
public void MinimizeIncomplete() { // We build a simple, incomplete DFA var dfa = new Dfa <string, char>(); dfa.InitialState = "A"; dfa.AcceptingStates.Add("D"); dfa.AddTransition("A", '0', "B"); dfa.AddTransition("A", '1', "C"); dfa.AddTransition("B", '0', "C"); dfa.AddTransition("C", '0', "B"); dfa.AddTransition("C", '1', "D"); // Minimize it var minDfa = dfa.Minimize(); var expectedStates = new[] { "A", "B", "C", "D" }.Select(ParseStateSet); var gotStates = minDfa.States.ToHashSet(); var expectedAcceptingStates = new[] { "D" }.Select(ParseStateSet); var gotAcceptingStates = minDfa.AcceptingStates.ToHashSet(); Assert.True(gotStates.SetEquals(expectedStates)); Assert.True(gotAcceptingStates.SetEquals(expectedAcceptingStates)); Assert.Equal(5, minDfa.Transitions.Count); AssertTransition(minDfa, "A", '0', "B"); AssertTransition(minDfa, "A", '1', "C"); AssertTransition(minDfa, "B", '0', "C"); AssertTransition(minDfa, "C", '0', "B"); AssertTransition(minDfa, "C", '1', "D"); }