public void SimulationRunnerComparisonTest() { var pda = new PDA <char, char>(new AcceptanceCondition.EmptyStack(), false, 'Z', false, "Z"); pda.AddState(1, false); pda.AddTransition().From(0).To(0).Read().Pop('Z').Push("ZZZZZZZZZZZZZZZZZZ"); pda.AddTransition().From(0).To(1).Read().Pop('Z').Push(); pda.AddTransition().From(1).To(1).Read('a').Pop('Z').Push(); var word = "aaaaaaaaaaaaaaaaa".ToCharArray(); var s = new Stopwatch(); s.Start(); var path1 = CFGSimulationRunner <char> .RunSimulation(pda, word); s.Stop(); Console.WriteLine(s.ElapsedMilliseconds); s.Restart(); pda.CreateRunner(); var path2 = DirectSimulationRunner <char, char> .RunSimulation(pda, word); s.Stop(); Console.WriteLine(s.ElapsedMilliseconds); }
public void RunDirectSimulationForProblemPda() { var pda = new PDA <char, char>(new AcceptanceCondition.EmptyStack(), false, 'Z', false, "Z"); pda.AddTransition().From(0).To(0).Read().Pop('Z').Push("ZZ"); pda.AddTransition().From(0).To(0).Read('a').Pop('Z').Push(); pda.CreateRunner(); var s = new Stopwatch(); s.Start(); //adding one 'a' to the word leads to a System.OutOfMemoryException for the DirectSimulationRunner var path = DirectSimulationRunner <char, char> .RunSimulation(pda, "aaaaaaaaaaaa".ToCharArray()); //var path = CFGSimulationRunner<char>.RunSimulation(pda, "aaaaaaaaaaaaaaa".ToCharArray()); s.Stop(); Console.WriteLine(s.ElapsedMilliseconds); }
public void RunSimulationTest() { var pda = new PDA <char, char>(new AcceptanceCondition.EmptyStack(), false, 'Z', false, "ZAB"); pda.AddState(1, false); pda.AddTransition().From(0).To(0).Read('a').Pop('Z').Push("AZ"); pda.AddTransition().From(0).To(0).Read('a').Pop('A').Push("AA"); pda.AddTransition().From(0).To(0).Read('a').Pop('B').Push("AB"); pda.AddTransition().From(0).To(0).Read('b').Pop('Z').Push("BZ"); pda.AddTransition().From(0).To(0).Read('b').Pop('A').Push("BA"); pda.AddTransition().From(0).To(0).Read('b').Pop('B').Push("BB"); pda.AddTransition().From(0).To(1).Read().Pop('Z').Push("Z"); pda.AddTransition().From(0).To(1).Read().Pop('A').Push("A"); pda.AddTransition().From(0).To(1).Read().Pop('B').Push("B"); pda.AddTransition().From(0).To(1).Read('a').Pop('Z').Push("Z"); pda.AddTransition().From(0).To(1).Read('a').Pop('A').Push("A"); pda.AddTransition().From(0).To(1).Read('a').Pop('B').Push("B"); pda.AddTransition().From(0).To(1).Read('b').Pop('Z').Push("Z"); pda.AddTransition().From(0).To(1).Read('b').Pop('A').Push("A"); pda.AddTransition().From(0).To(1).Read('b').Pop('B').Push("B"); pda.AddTransition().From(1).To(1).Read('a').Pop('A').Push(); pda.AddTransition().From(1).To(1).Read('b').Pop('B').Push(); pda.AddTransition().From(1).To(1).Read().Pop('Z').Push(); pda.CreateRunner(); var path = DirectSimulationRunner <char, char> .RunSimulation(pda, "abbababba".ToCharArray()); var act = path.ToXml(); var reader = new StreamReader(@"..\..\..\TestPDL\PDATest\XmlPath.xml"); XmlDocument expXmlDoc = new XmlDocument(); expXmlDoc.Load(reader); XDocument xDoc = XDocument.Load(new XmlNodeReader(expXmlDoc)); var exp = xDoc.Root; Assert.IsTrue(XNode.DeepEquals(exp, act)); }