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 RunSimulationCFGTest3() { var pda = new PDA <char, char>(new AcceptanceCondition.FinalState(), false, 'Z', false, "ZXY", 'V'); pda.AddState(1, false); pda.AddState(2, true); pda.AddTransition().From(0).To(0).Read('a').Pop('Z').Push("XZ"); pda.AddTransition().From(0).To(0).Read('a').Pop('X').Push("XX"); pda.AddTransition().From(0).To(0).Read('a').Pop('Y').Push("XY"); pda.AddTransition().From(0).To(0).Read('b').Pop('Z').Push("YZ"); pda.AddTransition().From(0).To(0).Read('b').Pop('Y').Push("YY"); pda.AddTransition().From(0).To(0).Read('b').Pop('X').Push("YX"); pda.AddTransition().From(0).To(1).Read().Pop('X').Push("X"); pda.AddTransition().From(0).To(1).Read().Pop('Y').Push("Y"); pda.AddTransition().From(0).To(1).Read().Pop('Z').Push("Z"); pda.AddTransition().From(1).To(1).Read('a').Pop('X').Push(); pda.AddTransition().From(1).To(1).Read('b').Pop('Y').Push(); pda.AddTransition().From(1).To(2).Read().Pop('Z').Push("ZZ"); pda.CreateRunner(); var path = CFGSimulationRunner <char> .RunSimulation(pda, "abaabbaaba".ToCharArray()); var act = path.ToXml(); var reader = new StreamReader(@"..\..\..\TestPDL\PDATest\XmlPathCFG3.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)); }
public void DPDASimulationRunnerTest() { var dpda = new PDA <char, char>(new AcceptanceCondition.FinalStateAndEmptyStack(), true, 'Z', false, "ZXY"); dpda.AddState(1, false); dpda.AddState(2, true); dpda.AddTransition().From(0).To(0).Read('a').Pop('Z').Push("XZ"); dpda.AddTransition().From(0).To(0).Read('a').Pop('X').Push("XX"); dpda.AddTransition().From(0).To(0).Read('a').Pop('Y').Push("XY"); dpda.AddTransition().From(0).To(0).Read('b').Pop('Z').Push("YZ"); dpda.AddTransition().From(0).To(0).Read('b').Pop('X').Push("YX"); dpda.AddTransition().From(0).To(0).Read('b').Pop('Y').Push("YY"); dpda.AddTransition().From(0).To(1).Read('v').Pop('Z').Push("Z"); dpda.AddTransition().From(0).To(1).Read('v').Pop('X').Push("X"); dpda.AddTransition().From(0).To(1).Read('v').Pop('Y').Push("Y"); dpda.AddTransition().From(1).To(1).Read('a').Pop('X').Push(); dpda.AddTransition().From(1).To(1).Read('b').Pop('Y').Push(); dpda.AddTransition().From(1).To(2).Read().Pop('Z').Push(""); var word = "aababbbavabbbabaa".ToCharArray(); var watch = new Stopwatch(); watch.Start(); var path = DPDASimulationRunner <char, char> .RunSimulation(dpda, word, dpda.AcceptanceCondition); watch.Stop(); Console.WriteLine(string.Format("For DPDA runner: {0}", watch.Elapsed)); var act = path.ToXml(); var reader = new StreamReader(@"..\..\..\TestPDL\PDATest\XmlPathCFG4.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)); watch.Restart(); path = CFGSimulationRunner <char> .RunSimulation(dpda, word); watch.Stop(); Console.WriteLine(string.Format("For CFG runner: {0}", watch.Elapsed)); Assert.IsTrue(XNode.DeepEquals(exp, act)); path = DPDASimulationRunner <char, char> .RunSimulation(dpda, word.Concat("a").ToArray(), dpda.AcceptanceCondition); act = path.ToXml(); reader = new StreamReader(@"..\..\..\TestPDL\PDATest\XmlPathCFG5.xml"); expXmlDoc = new XmlDocument(); expXmlDoc.Load(reader); xDoc = XDocument.Load(new XmlNodeReader(expXmlDoc)); exp = xDoc.Root; Assert.IsTrue(XNode.DeepEquals(exp, act)); }