public void PopulateDFAWithXAndEpsilonTransitions_PerformanceTests(int states) { var automaton = PerformanceTestingUtility.CreateLargeAutomataWithRandomTransitions(Constants.RegularLanguage.Symbols, states); var automaton2 = automaton.Clone(); PerformanceTestingUtility.AssertAutomatonEqual(automaton, automaton2); var sw = Stopwatch.StartNew(); #pragma warning disable 612, 618 var naivePopulatedAutomaton = automaton.PopulateDFAWithXAndEpsilonTransitionsNaive(); #pragma warning restore 612, 618 sw.Stop(); var naiveTime = sw.ElapsedMilliseconds; sw = Stopwatch.StartNew(); var queuePopulatedAutomaton = automaton2.PopulateDFAWithXAndEpsilonTransitionsQueueBased(); sw.Stop(); var queueTime = sw.ElapsedMilliseconds; // Ensure that the automatons created are equal. PerformanceTestingUtility.AssertAutomatonEqual(naivePopulatedAutomaton, queuePopulatedAutomaton); _output.WriteLine($"Naive Method: {naiveTime}ms"); _output.WriteLine($"Queue Method: {queueTime}ms"); }
public void Minimize_PerformanceTests() { var automaton = PerformanceTestingUtility.CreateLargeAutomataWithRandomTransitions(_alphabet, 10000); var sw = Stopwatch.StartNew(); var minimizedAutomaton = automaton.MinimizeDFA(); sw.Stop(); _output.WriteLine($"Minimization performed in {sw.ElapsedMilliseconds}ms"); _output.WriteLine($"The minized automaton had {minimizedAutomaton.States.Count} states"); }
public void PopulateDFAWithXAndEpsilonTransitions_PerformanceTests_QueueBasedOnly() { var automaton = PerformanceTestingUtility.CreateLargeAutomataWithRandomTransitions(Constants.RegularLanguage.Symbols, 300); var sw = Stopwatch.StartNew(); var queuePopulatedAutomaton = automaton.PopulateDFAWithXAndEpsilonTransitionsQueueBased(); sw.Stop(); var queueTime = sw.ElapsedMilliseconds; _output.WriteLine($"Queue Method: {queueTime}ms"); }