private int PrepareSkippedBottleneckTest( TestDPDA dpda, TestGraph graph) { dpda.AddTransition((1, new [] { -1, 0, 1, 2 }, "a"), new PushTransition <int, int>(1, 0)); dpda.AddTransition((1, new [] { -1, 0, 1, 2 }, "c"), new PushTransition <int, int>(1, 1)); dpda.AddTransition((1, new [] { -1, 0, 1, 2 }, "e"), new PushTransition <int, int>(1, 2)); dpda.AddTransition((1, new [] { -1, 0, 1, 2 }, "s"), new SkipTransition <int>(1)); dpda.AddTransition((1, 0, "b"), new PopTransition <int>(1)); dpda.AddTransition((1, 1, "d"), new PopTransition <int>(1)); dpda.AddTransition((1, 2, "f"), new PopTransition <int>(1)); dpda.AddFinal((1, -1)); graph.AddVerticesAndEdge(new TaggedEdge <int, string>(0, 1, "a")); graph.AddVerticesAndEdge(new TaggedEdge <int, string>(0, 2, "c")); graph.AddVerticesAndEdge(new TaggedEdge <int, string>(1, 3, "e")); graph.AddVerticesAndEdge(new TaggedEdge <int, string>(2, 3, "e")); graph.AddVerticesAndEdge(new TaggedEdge <int, string>(3, 7, "s")); graph.AddVerticesAndEdge(new TaggedEdge <int, string>(7, 8, "s")); graph.AddVerticesAndEdge(new TaggedEdge <int, string>(8, 4, "f")); graph.AddVerticesAndEdge(new TaggedEdge <int, string>(4, 5, "b")); graph.AddVerticesAndEdge(new TaggedEdge <int, string>(4, 6, "d")); return(0); }
private int PrepareOnSkipBranchMergingTest( TestDPDA dpda, TestGraph graph) { dpda.AddTransition((1, new [] { -1, 0 }, "a"), new PushTransition <int, int>(1, 0)); dpda.AddTransition((1, new [] { -1, 0 }, "s"), new SkipTransition <int>(1)); dpda.AddTransition((1, 0, "b"), new PopTransition <int>(1)); dpda.AddFinal((1, -1)); void Edge(int s, int t, string l) => graph.AddVerticesAndEdge(new TaggedEdge <int, string>(s, t, l)); Edge(0, 1, "s"); Edge(1, 2, "a"); Edge(2, 3, "s"); Edge(3, 4, "s"); Edge(4, 5, "s"); Edge(5, 6, "b"); Edge(1, 7, "a"); Edge(7, 8, "s"); Edge(8, 4, "s"); Edge(0, 9, "a"); Edge(9, 10, "s"); Edge(10, 4, "s"); Edge(0, 11, "a"); Edge(11, 4, "s"); Edge(0, 12, "a"); Edge(12, 5, "s"); Edge(0, 5, "a"); return(0); }
private int PrepareSkippedCyclesTest( TestDPDA dpda, TestGraph graph) { dpda.AddTransition((1, new [] { -1, 0 }, "a"), new PushTransition <int, int>(1, 0)); dpda.AddTransition((1, new [] { -1, 0 }, "s"), new SkipTransition <int>(1)); dpda.AddTransition((1, 0, "b"), new PopTransition <int>(1)); dpda.AddFinal((1, -1)); void Edge(int s, int t, string l) => graph.AddVerticesAndEdge(new TaggedEdge <int, string>(s, t, l)); Edge(0, 0, "s"); Edge(0, 1, "a"); Edge(1, 2, "s"); Edge(2, 3, "s"); Edge(3, 4, "b"); Edge(1, 0, "s"); Edge(4, 3, "s"); return(0); }