mirror of
https://github.com/gonum/gonum.git
synced 2025-10-27 01:00:26 +08:00
graph/path: add benchmarks for Dominators
The initial test cases are from Robin Eklind's decomp project, the DOT
files were generated using his instructions:
git clone https://github.com/decomp/testdata
go get github.com/decomp/decomp/cmd/ll2dot
cd testdata/pathological/testdata
ll2dot *.ll
This commit is contained in:
258
graph/path/control_flow_bench_test.go
Normal file
258
graph/path/control_flow_bench_test.go
Normal file
@@ -0,0 +1,258 @@
|
||||
// Copyright ©2017 The gonum Authors. All rights reserved.
|
||||
// Use of this source code is governed by a BSD-style
|
||||
// license that can be found in the LICENSE file.
|
||||
|
||||
// +build go1.7
|
||||
|
||||
package path
|
||||
|
||||
import (
|
||||
"fmt"
|
||||
"io/ioutil"
|
||||
"math"
|
||||
"math/rand"
|
||||
"path/filepath"
|
||||
"strings"
|
||||
"testing"
|
||||
|
||||
"gonum.org/v1/gonum/graph"
|
||||
"gonum.org/v1/gonum/graph/encoding"
|
||||
"gonum.org/v1/gonum/graph/encoding/dot"
|
||||
"gonum.org/v1/gonum/graph/graphs/gen"
|
||||
"gonum.org/v1/gonum/graph/simple"
|
||||
"gonum.org/v1/gonum/graph/topo"
|
||||
)
|
||||
|
||||
func BenchmarkDominators(b *testing.B) {
|
||||
testdata := filepath.FromSlash("./testdata/flow")
|
||||
|
||||
fis, err := ioutil.ReadDir(testdata)
|
||||
if err != nil {
|
||||
b.Fatalf("failed to open control flow testdata: %v", err)
|
||||
}
|
||||
for _, fi := range fis {
|
||||
name := fi.Name()
|
||||
ext := filepath.Ext(name)
|
||||
if ext != ".dot" {
|
||||
continue
|
||||
}
|
||||
test := name[:len(name)-len(ext)]
|
||||
|
||||
data, err := ioutil.ReadFile(filepath.Join(testdata, name))
|
||||
if err != nil {
|
||||
b.Errorf("failed to open control flow case: %v", err)
|
||||
continue
|
||||
}
|
||||
g := &labeled{DirectedGraph: simple.NewDirectedGraph()}
|
||||
err = dot.Unmarshal(data, g)
|
||||
if err != nil {
|
||||
b.Errorf("failed to unmarshal graph data: %v", err)
|
||||
continue
|
||||
}
|
||||
want := g.root
|
||||
if want == nil {
|
||||
b.Error("no entry node label for graph")
|
||||
continue
|
||||
}
|
||||
|
||||
b.Run(test, func(b *testing.B) {
|
||||
for i := 0; i < b.N; i++ {
|
||||
d := Dominators(g.root, g)
|
||||
if got := d.Root(); got.ID() != want.ID() {
|
||||
b.Fatalf("unexpected root node: got:%d want:%d", got.ID(), want.ID())
|
||||
}
|
||||
}
|
||||
})
|
||||
}
|
||||
}
|
||||
|
||||
type labeled struct {
|
||||
*simple.DirectedGraph
|
||||
|
||||
root *node
|
||||
}
|
||||
|
||||
func (g *labeled) NewNode() graph.Node {
|
||||
return &node{Node: g.DirectedGraph.NewNode(), g: g}
|
||||
}
|
||||
|
||||
func (g *labeled) SetEdge(e graph.Edge) {
|
||||
if e.To().ID() == e.From().ID() {
|
||||
// Do not attempt to add self edges.
|
||||
return
|
||||
}
|
||||
g.DirectedGraph.SetEdge(e)
|
||||
}
|
||||
|
||||
type node struct {
|
||||
graph.Node
|
||||
name string
|
||||
g *labeled
|
||||
}
|
||||
|
||||
func (n *node) SetDOTID(id string) {
|
||||
n.name = id
|
||||
}
|
||||
|
||||
func (n *node) SetAttribute(attr encoding.Attribute) error {
|
||||
if attr.Key != "label" {
|
||||
return nil
|
||||
}
|
||||
switch attr.Value {
|
||||
default:
|
||||
if attr.Value != `"{%0}"` && !strings.HasPrefix(attr.Value, `"{%0|`) {
|
||||
return nil
|
||||
}
|
||||
fallthrough
|
||||
case "entry", "root":
|
||||
if n.g.root != nil {
|
||||
return fmt.Errorf("set root for graph with existing root: old=%q new=%q", n.g.root.name, n.name)
|
||||
}
|
||||
n.g.root = n
|
||||
}
|
||||
return nil
|
||||
}
|
||||
|
||||
func BenchmarkRandomGraphDominators(b *testing.B) {
|
||||
tests := []struct {
|
||||
name string
|
||||
g func() *simple.DirectedGraph
|
||||
}{
|
||||
{name: "gnm-n=1e3-m=1e3", g: gnm(1e3, 1e3)},
|
||||
{name: "gnm-n=1e3-m=3e3", g: gnm(1e3, 3e3)},
|
||||
{name: "gnm-n=1e3-m=1e4", g: gnm(1e3, 1e4)},
|
||||
{name: "gnm-n=1e3-m=3e4", g: gnm(1e3, 3e4)},
|
||||
|
||||
{name: "gnm-n=1e4-m=1e4", g: gnm(1e4, 1e4)},
|
||||
{name: "gnm-n=1e4-m=3e4", g: gnm(1e4, 3e4)},
|
||||
{name: "gnm-n=1e4-m=1e5", g: gnm(1e4, 1e5)},
|
||||
{name: "gnm-n=1e4-m=3e5", g: gnm(1e4, 3e5)},
|
||||
|
||||
{name: "gnm-n=1e5-m=1e5", g: gnm(1e5, 1e5)},
|
||||
{name: "gnm-n=1e5-m=3e5", g: gnm(1e5, 3e5)},
|
||||
{name: "gnm-n=1e5-m=1e6", g: gnm(1e5, 1e6)},
|
||||
{name: "gnm-n=1e5-m=3e6", g: gnm(1e5, 3e6)},
|
||||
|
||||
{name: "gnm-n=1e6-m=1e6", g: gnm(1e6, 1e6)},
|
||||
{name: "gnm-n=1e6-m=3e6", g: gnm(1e6, 3e6)},
|
||||
{name: "gnm-n=1e6-m=1e7", g: gnm(1e6, 1e7)},
|
||||
{name: "gnm-n=1e6-m=3e7", g: gnm(1e6, 3e7)},
|
||||
|
||||
{name: "dup-n=1e3-d=0.8-a=0.1", g: duplication(1e3, 0.8, 0.1, math.NaN())},
|
||||
{name: "dup-n=1e3-d=0.5-a=0.2", g: duplication(1e3, 0.5, 0.2, math.NaN())},
|
||||
|
||||
{name: "dup-n=1e4-d=0.8-a=0.1", g: duplication(1e4, 0.8, 0.1, math.NaN())},
|
||||
{name: "dup-n=1e4-d=0.5-a=0.2", g: duplication(1e4, 0.5, 0.2, math.NaN())},
|
||||
|
||||
{name: "dup-n=1e5-d=0.8-a=0.1", g: duplication(1e5, 0.8, 0.1, math.NaN())},
|
||||
{name: "dup-n=1e5-d=0.5-a=0.2", g: duplication(1e5, 0.5, 0.2, math.NaN())},
|
||||
}
|
||||
|
||||
for _, test := range tests {
|
||||
rnd := rand.New(rand.NewSource(1))
|
||||
g := test.g()
|
||||
|
||||
// Guess a maximally expensive entry to the graph.
|
||||
sort, err := topo.Sort(g)
|
||||
root := sort[0]
|
||||
if root == nil {
|
||||
// If we did not get a node in the first position
|
||||
// then there must be an unorderable set of nodes
|
||||
// in the first position of the error. Pick one
|
||||
// of the nodes at random.
|
||||
unordered := err.(topo.Unorderable)
|
||||
root = unordered[0][rnd.Intn(len(unordered[0]))]
|
||||
}
|
||||
if root == nil {
|
||||
b.Error("no entry node label for graph")
|
||||
continue
|
||||
}
|
||||
|
||||
if len(sort) > 1 {
|
||||
// Ensure that the graph has a complete path
|
||||
// through the sorted nodes.
|
||||
|
||||
// unordered will only be accessed if there is
|
||||
// a sort element that is nil, in which case
|
||||
// unordered will contain a set of nodes from
|
||||
// an SCC.
|
||||
unordered, _ := err.(topo.Unorderable)
|
||||
|
||||
var ui int
|
||||
for i, v := range sort[1:] {
|
||||
u := sort[i]
|
||||
if u == nil {
|
||||
u = unordered[ui][rnd.Intn(len(unordered[ui]))]
|
||||
ui++
|
||||
}
|
||||
if v == nil {
|
||||
v = unordered[ui][rnd.Intn(len(unordered[ui]))]
|
||||
}
|
||||
if !g.HasEdgeFromTo(u, v) {
|
||||
g.SetEdge(g.NewEdge(u, v))
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
b.Run(test.name, func(b *testing.B) {
|
||||
for i := 0; i < b.N; i++ {
|
||||
d := Dominators(root, g)
|
||||
if got := d.Root(); got.ID() != root.ID() {
|
||||
b.Fatalf("unexpected root node: got:%d want:%d", got.ID(), root.ID())
|
||||
}
|
||||
}
|
||||
})
|
||||
}
|
||||
}
|
||||
|
||||
// gnm returns a directed G(n,m) Erdõs-Rényi graph.
|
||||
func gnm(n, m int) func() *simple.DirectedGraph {
|
||||
return func() *simple.DirectedGraph {
|
||||
dg := simple.NewDirectedGraph()
|
||||
err := gen.Gnm(dg, n, m, rand.New(rand.NewSource(1)))
|
||||
if err != nil {
|
||||
panic(err)
|
||||
}
|
||||
return dg
|
||||
}
|
||||
}
|
||||
|
||||
// duplication returns an edge-induced directed subgraph of a
|
||||
// duplication graph.
|
||||
func duplication(n int, delta, alpha, sigma float64) func() *simple.DirectedGraph {
|
||||
return func() *simple.DirectedGraph {
|
||||
g := undirected{simple.NewDirectedGraph()}
|
||||
rnd := rand.New(rand.NewSource(1))
|
||||
err := gen.Duplication(g, n, delta, alpha, sigma, rnd)
|
||||
if err != nil {
|
||||
panic(err)
|
||||
}
|
||||
for _, e := range g.Edges() {
|
||||
if rnd.Intn(2) == 0 {
|
||||
g.RemoveEdge(e)
|
||||
}
|
||||
}
|
||||
return g.DirectedGraph
|
||||
}
|
||||
}
|
||||
|
||||
type undirected struct {
|
||||
*simple.DirectedGraph
|
||||
}
|
||||
|
||||
func (g undirected) From(n graph.Node) []graph.Node {
|
||||
return append(g.DirectedGraph.From(n), g.DirectedGraph.To(n)...)
|
||||
}
|
||||
|
||||
func (g undirected) HasEdgeBetween(x, y graph.Node) bool {
|
||||
return g.DirectedGraph.HasEdgeFromTo(x, y)
|
||||
}
|
||||
|
||||
func (g undirected) EdgeBetween(x, y graph.Node) graph.Edge {
|
||||
return g.DirectedGraph.Edge(x, y)
|
||||
}
|
||||
|
||||
func (g undirected) SetEdge(e graph.Edge) {
|
||||
g.DirectedGraph.SetEdge(e)
|
||||
g.DirectedGraph.SetEdge(g.DirectedGraph.NewEdge(e.To(), e.From()))
|
||||
}
|
||||
5
graph/path/testdata/flow/README
vendored
Normal file
5
graph/path/testdata/flow/README
vendored
Normal file
@@ -0,0 +1,5 @@
|
||||
DOT files placed in this directory will be used to run benchmarks on the
|
||||
path.Dominators function. The DOT files included should contain one node
|
||||
that has the label "entry" or "root". This node will be used as the control
|
||||
flow entry point to the graph.
|
||||
|
||||
5126
graph/path/testdata/flow/nested_if_n1024.dot
vendored
Normal file
5126
graph/path/testdata/flow/nested_if_n1024.dot
vendored
Normal file
File diff suppressed because it is too large
Load Diff
646
graph/path/testdata/flow/nested_if_n128.dot
vendored
Normal file
646
graph/path/testdata/flow/nested_if_n128.dot
vendored
Normal file
@@ -0,0 +1,646 @@
|
||||
digraph main {
|
||||
// Node definitions.
|
||||
2 [label=entry];
|
||||
9;
|
||||
774;
|
||||
14;
|
||||
773;
|
||||
19;
|
||||
772;
|
||||
24;
|
||||
771;
|
||||
29;
|
||||
770;
|
||||
34;
|
||||
769;
|
||||
39;
|
||||
768;
|
||||
44;
|
||||
767;
|
||||
49;
|
||||
766;
|
||||
54;
|
||||
765;
|
||||
59;
|
||||
764;
|
||||
64;
|
||||
763;
|
||||
69;
|
||||
762;
|
||||
74;
|
||||
761;
|
||||
79;
|
||||
760;
|
||||
84;
|
||||
759;
|
||||
89;
|
||||
758;
|
||||
94;
|
||||
757;
|
||||
99;
|
||||
756;
|
||||
104;
|
||||
755;
|
||||
109;
|
||||
754;
|
||||
114;
|
||||
753;
|
||||
119;
|
||||
752;
|
||||
124;
|
||||
751;
|
||||
129;
|
||||
750;
|
||||
134;
|
||||
749;
|
||||
139;
|
||||
748;
|
||||
144;
|
||||
747;
|
||||
149;
|
||||
746;
|
||||
154;
|
||||
745;
|
||||
159;
|
||||
744;
|
||||
164;
|
||||
743;
|
||||
169;
|
||||
742;
|
||||
174;
|
||||
741;
|
||||
179;
|
||||
740;
|
||||
184;
|
||||
739;
|
||||
189;
|
||||
738;
|
||||
194;
|
||||
737;
|
||||
199;
|
||||
736;
|
||||
204;
|
||||
735;
|
||||
209;
|
||||
734;
|
||||
214;
|
||||
733;
|
||||
219;
|
||||
732;
|
||||
224;
|
||||
731;
|
||||
229;
|
||||
730;
|
||||
234;
|
||||
729;
|
||||
239;
|
||||
728;
|
||||
244;
|
||||
727;
|
||||
249;
|
||||
726;
|
||||
254;
|
||||
725;
|
||||
259;
|
||||
724;
|
||||
264;
|
||||
723;
|
||||
269;
|
||||
722;
|
||||
274;
|
||||
721;
|
||||
279;
|
||||
720;
|
||||
284;
|
||||
719;
|
||||
289;
|
||||
718;
|
||||
294;
|
||||
717;
|
||||
299;
|
||||
716;
|
||||
304;
|
||||
715;
|
||||
309;
|
||||
714;
|
||||
314;
|
||||
713;
|
||||
319;
|
||||
712;
|
||||
324;
|
||||
711;
|
||||
329;
|
||||
710;
|
||||
334;
|
||||
709;
|
||||
339;
|
||||
708;
|
||||
344;
|
||||
707;
|
||||
349;
|
||||
706;
|
||||
354;
|
||||
705;
|
||||
359;
|
||||
704;
|
||||
364;
|
||||
703;
|
||||
369;
|
||||
702;
|
||||
374;
|
||||
701;
|
||||
379;
|
||||
700;
|
||||
384;
|
||||
699;
|
||||
389;
|
||||
698;
|
||||
394;
|
||||
697;
|
||||
399;
|
||||
696;
|
||||
404;
|
||||
695;
|
||||
409;
|
||||
694;
|
||||
414;
|
||||
693;
|
||||
419;
|
||||
692;
|
||||
424;
|
||||
691;
|
||||
429;
|
||||
690;
|
||||
434;
|
||||
689;
|
||||
439;
|
||||
688;
|
||||
444;
|
||||
687;
|
||||
449;
|
||||
686;
|
||||
454;
|
||||
685;
|
||||
459;
|
||||
684;
|
||||
464;
|
||||
683;
|
||||
469;
|
||||
682;
|
||||
474;
|
||||
681;
|
||||
479;
|
||||
680;
|
||||
484;
|
||||
679;
|
||||
489;
|
||||
678;
|
||||
494;
|
||||
677;
|
||||
499;
|
||||
676;
|
||||
504;
|
||||
675;
|
||||
509;
|
||||
674;
|
||||
514;
|
||||
673;
|
||||
519;
|
||||
672;
|
||||
524;
|
||||
671;
|
||||
529;
|
||||
670;
|
||||
534;
|
||||
669;
|
||||
539;
|
||||
668;
|
||||
544;
|
||||
667;
|
||||
549;
|
||||
666;
|
||||
554;
|
||||
665;
|
||||
559;
|
||||
664;
|
||||
564;
|
||||
663;
|
||||
569;
|
||||
662;
|
||||
574;
|
||||
661;
|
||||
579;
|
||||
660;
|
||||
584;
|
||||
659;
|
||||
589;
|
||||
658;
|
||||
594;
|
||||
657;
|
||||
599;
|
||||
656;
|
||||
604;
|
||||
655;
|
||||
609;
|
||||
654;
|
||||
614;
|
||||
653;
|
||||
619;
|
||||
652;
|
||||
624;
|
||||
651;
|
||||
629;
|
||||
650;
|
||||
634;
|
||||
649;
|
||||
639;
|
||||
648;
|
||||
644;
|
||||
647;
|
||||
|
||||
// Edge definitions.
|
||||
2 -> 9 [label=true];
|
||||
2 -> 774 [label=false];
|
||||
9 -> 14 [label=true];
|
||||
9 -> 773 [label=false];
|
||||
14 -> 19 [label=true];
|
||||
14 -> 772 [label=false];
|
||||
773 -> 774;
|
||||
19 -> 24 [label=true];
|
||||
19 -> 771 [label=false];
|
||||
772 -> 773;
|
||||
24 -> 29 [label=true];
|
||||
24 -> 770 [label=false];
|
||||
771 -> 772;
|
||||
29 -> 34 [label=true];
|
||||
29 -> 769 [label=false];
|
||||
770 -> 771;
|
||||
34 -> 39 [label=true];
|
||||
34 -> 768 [label=false];
|
||||
769 -> 770;
|
||||
39 -> 44 [label=true];
|
||||
39 -> 767 [label=false];
|
||||
768 -> 769;
|
||||
44 -> 49 [label=true];
|
||||
44 -> 766 [label=false];
|
||||
767 -> 768;
|
||||
49 -> 54 [label=true];
|
||||
49 -> 765 [label=false];
|
||||
766 -> 767;
|
||||
54 -> 59 [label=true];
|
||||
54 -> 764 [label=false];
|
||||
765 -> 766;
|
||||
59 -> 64 [label=true];
|
||||
59 -> 763 [label=false];
|
||||
764 -> 765;
|
||||
64 -> 69 [label=true];
|
||||
64 -> 762 [label=false];
|
||||
763 -> 764;
|
||||
69 -> 74 [label=true];
|
||||
69 -> 761 [label=false];
|
||||
762 -> 763;
|
||||
74 -> 79 [label=true];
|
||||
74 -> 760 [label=false];
|
||||
761 -> 762;
|
||||
79 -> 84 [label=true];
|
||||
79 -> 759 [label=false];
|
||||
760 -> 761;
|
||||
84 -> 89 [label=true];
|
||||
84 -> 758 [label=false];
|
||||
759 -> 760;
|
||||
89 -> 94 [label=true];
|
||||
89 -> 757 [label=false];
|
||||
758 -> 759;
|
||||
94 -> 99 [label=true];
|
||||
94 -> 756 [label=false];
|
||||
757 -> 758;
|
||||
99 -> 104 [label=true];
|
||||
99 -> 755 [label=false];
|
||||
756 -> 757;
|
||||
104 -> 109 [label=true];
|
||||
104 -> 754 [label=false];
|
||||
755 -> 756;
|
||||
109 -> 114 [label=true];
|
||||
109 -> 753 [label=false];
|
||||
754 -> 755;
|
||||
114 -> 119 [label=true];
|
||||
114 -> 752 [label=false];
|
||||
753 -> 754;
|
||||
119 -> 124 [label=true];
|
||||
119 -> 751 [label=false];
|
||||
752 -> 753;
|
||||
124 -> 129 [label=true];
|
||||
124 -> 750 [label=false];
|
||||
751 -> 752;
|
||||
129 -> 134 [label=true];
|
||||
129 -> 749 [label=false];
|
||||
750 -> 751;
|
||||
134 -> 139 [label=true];
|
||||
134 -> 748 [label=false];
|
||||
749 -> 750;
|
||||
139 -> 144 [label=true];
|
||||
139 -> 747 [label=false];
|
||||
748 -> 749;
|
||||
144 -> 149 [label=true];
|
||||
144 -> 746 [label=false];
|
||||
747 -> 748;
|
||||
149 -> 154 [label=true];
|
||||
149 -> 745 [label=false];
|
||||
746 -> 747;
|
||||
154 -> 159 [label=true];
|
||||
154 -> 744 [label=false];
|
||||
745 -> 746;
|
||||
159 -> 164 [label=true];
|
||||
159 -> 743 [label=false];
|
||||
744 -> 745;
|
||||
164 -> 169 [label=true];
|
||||
164 -> 742 [label=false];
|
||||
743 -> 744;
|
||||
169 -> 174 [label=true];
|
||||
169 -> 741 [label=false];
|
||||
742 -> 743;
|
||||
174 -> 179 [label=true];
|
||||
174 -> 740 [label=false];
|
||||
741 -> 742;
|
||||
179 -> 184 [label=true];
|
||||
179 -> 739 [label=false];
|
||||
740 -> 741;
|
||||
184 -> 189 [label=true];
|
||||
184 -> 738 [label=false];
|
||||
739 -> 740;
|
||||
189 -> 194 [label=true];
|
||||
189 -> 737 [label=false];
|
||||
738 -> 739;
|
||||
194 -> 199 [label=true];
|
||||
194 -> 736 [label=false];
|
||||
737 -> 738;
|
||||
199 -> 204 [label=true];
|
||||
199 -> 735 [label=false];
|
||||
736 -> 737;
|
||||
204 -> 209 [label=true];
|
||||
204 -> 734 [label=false];
|
||||
735 -> 736;
|
||||
209 -> 214 [label=true];
|
||||
209 -> 733 [label=false];
|
||||
734 -> 735;
|
||||
214 -> 219 [label=true];
|
||||
214 -> 732 [label=false];
|
||||
733 -> 734;
|
||||
219 -> 224 [label=true];
|
||||
219 -> 731 [label=false];
|
||||
732 -> 733;
|
||||
224 -> 229 [label=true];
|
||||
224 -> 730 [label=false];
|
||||
731 -> 732;
|
||||
229 -> 234 [label=true];
|
||||
229 -> 729 [label=false];
|
||||
730 -> 731;
|
||||
234 -> 239 [label=true];
|
||||
234 -> 728 [label=false];
|
||||
729 -> 730;
|
||||
239 -> 244 [label=true];
|
||||
239 -> 727 [label=false];
|
||||
728 -> 729;
|
||||
244 -> 249 [label=true];
|
||||
244 -> 726 [label=false];
|
||||
727 -> 728;
|
||||
249 -> 254 [label=true];
|
||||
249 -> 725 [label=false];
|
||||
726 -> 727;
|
||||
254 -> 259 [label=true];
|
||||
254 -> 724 [label=false];
|
||||
725 -> 726;
|
||||
259 -> 264 [label=true];
|
||||
259 -> 723 [label=false];
|
||||
724 -> 725;
|
||||
264 -> 269 [label=true];
|
||||
264 -> 722 [label=false];
|
||||
723 -> 724;
|
||||
269 -> 274 [label=true];
|
||||
269 -> 721 [label=false];
|
||||
722 -> 723;
|
||||
274 -> 279 [label=true];
|
||||
274 -> 720 [label=false];
|
||||
721 -> 722;
|
||||
279 -> 284 [label=true];
|
||||
279 -> 719 [label=false];
|
||||
720 -> 721;
|
||||
284 -> 289 [label=true];
|
||||
284 -> 718 [label=false];
|
||||
719 -> 720;
|
||||
289 -> 294 [label=true];
|
||||
289 -> 717 [label=false];
|
||||
718 -> 719;
|
||||
294 -> 299 [label=true];
|
||||
294 -> 716 [label=false];
|
||||
717 -> 718;
|
||||
299 -> 304 [label=true];
|
||||
299 -> 715 [label=false];
|
||||
716 -> 717;
|
||||
304 -> 309 [label=true];
|
||||
304 -> 714 [label=false];
|
||||
715 -> 716;
|
||||
309 -> 314 [label=true];
|
||||
309 -> 713 [label=false];
|
||||
714 -> 715;
|
||||
314 -> 319 [label=true];
|
||||
314 -> 712 [label=false];
|
||||
713 -> 714;
|
||||
319 -> 324 [label=true];
|
||||
319 -> 711 [label=false];
|
||||
712 -> 713;
|
||||
324 -> 329 [label=true];
|
||||
324 -> 710 [label=false];
|
||||
711 -> 712;
|
||||
329 -> 334 [label=true];
|
||||
329 -> 709 [label=false];
|
||||
710 -> 711;
|
||||
334 -> 339 [label=true];
|
||||
334 -> 708 [label=false];
|
||||
709 -> 710;
|
||||
339 -> 344 [label=true];
|
||||
339 -> 707 [label=false];
|
||||
708 -> 709;
|
||||
344 -> 349 [label=true];
|
||||
344 -> 706 [label=false];
|
||||
707 -> 708;
|
||||
349 -> 354 [label=true];
|
||||
349 -> 705 [label=false];
|
||||
706 -> 707;
|
||||
354 -> 359 [label=true];
|
||||
354 -> 704 [label=false];
|
||||
705 -> 706;
|
||||
359 -> 364 [label=true];
|
||||
359 -> 703 [label=false];
|
||||
704 -> 705;
|
||||
364 -> 369 [label=true];
|
||||
364 -> 702 [label=false];
|
||||
703 -> 704;
|
||||
369 -> 374 [label=true];
|
||||
369 -> 701 [label=false];
|
||||
702 -> 703;
|
||||
374 -> 379 [label=true];
|
||||
374 -> 700 [label=false];
|
||||
701 -> 702;
|
||||
379 -> 384 [label=true];
|
||||
379 -> 699 [label=false];
|
||||
700 -> 701;
|
||||
384 -> 389 [label=true];
|
||||
384 -> 698 [label=false];
|
||||
699 -> 700;
|
||||
389 -> 394 [label=true];
|
||||
389 -> 697 [label=false];
|
||||
698 -> 699;
|
||||
394 -> 399 [label=true];
|
||||
394 -> 696 [label=false];
|
||||
697 -> 698;
|
||||
399 -> 404 [label=true];
|
||||
399 -> 695 [label=false];
|
||||
696 -> 697;
|
||||
404 -> 409 [label=true];
|
||||
404 -> 694 [label=false];
|
||||
695 -> 696;
|
||||
409 -> 414 [label=true];
|
||||
409 -> 693 [label=false];
|
||||
694 -> 695;
|
||||
414 -> 419 [label=true];
|
||||
414 -> 692 [label=false];
|
||||
693 -> 694;
|
||||
419 -> 424 [label=true];
|
||||
419 -> 691 [label=false];
|
||||
692 -> 693;
|
||||
424 -> 429 [label=true];
|
||||
424 -> 690 [label=false];
|
||||
691 -> 692;
|
||||
429 -> 434 [label=true];
|
||||
429 -> 689 [label=false];
|
||||
690 -> 691;
|
||||
434 -> 439 [label=true];
|
||||
434 -> 688 [label=false];
|
||||
689 -> 690;
|
||||
439 -> 444 [label=true];
|
||||
439 -> 687 [label=false];
|
||||
688 -> 689;
|
||||
444 -> 449 [label=true];
|
||||
444 -> 686 [label=false];
|
||||
687 -> 688;
|
||||
449 -> 454 [label=true];
|
||||
449 -> 685 [label=false];
|
||||
686 -> 687;
|
||||
454 -> 459 [label=true];
|
||||
454 -> 684 [label=false];
|
||||
685 -> 686;
|
||||
459 -> 464 [label=true];
|
||||
459 -> 683 [label=false];
|
||||
684 -> 685;
|
||||
464 -> 469 [label=true];
|
||||
464 -> 682 [label=false];
|
||||
683 -> 684;
|
||||
469 -> 474 [label=true];
|
||||
469 -> 681 [label=false];
|
||||
682 -> 683;
|
||||
474 -> 479 [label=true];
|
||||
474 -> 680 [label=false];
|
||||
681 -> 682;
|
||||
479 -> 484 [label=true];
|
||||
479 -> 679 [label=false];
|
||||
680 -> 681;
|
||||
484 -> 489 [label=true];
|
||||
484 -> 678 [label=false];
|
||||
679 -> 680;
|
||||
489 -> 494 [label=true];
|
||||
489 -> 677 [label=false];
|
||||
678 -> 679;
|
||||
494 -> 499 [label=true];
|
||||
494 -> 676 [label=false];
|
||||
677 -> 678;
|
||||
499 -> 504 [label=true];
|
||||
499 -> 675 [label=false];
|
||||
676 -> 677;
|
||||
504 -> 509 [label=true];
|
||||
504 -> 674 [label=false];
|
||||
675 -> 676;
|
||||
509 -> 514 [label=true];
|
||||
509 -> 673 [label=false];
|
||||
674 -> 675;
|
||||
514 -> 519 [label=true];
|
||||
514 -> 672 [label=false];
|
||||
673 -> 674;
|
||||
519 -> 524 [label=true];
|
||||
519 -> 671 [label=false];
|
||||
672 -> 673;
|
||||
524 -> 529 [label=true];
|
||||
524 -> 670 [label=false];
|
||||
671 -> 672;
|
||||
529 -> 534 [label=true];
|
||||
529 -> 669 [label=false];
|
||||
670 -> 671;
|
||||
534 -> 539 [label=true];
|
||||
534 -> 668 [label=false];
|
||||
669 -> 670;
|
||||
539 -> 544 [label=true];
|
||||
539 -> 667 [label=false];
|
||||
668 -> 669;
|
||||
544 -> 549 [label=true];
|
||||
544 -> 666 [label=false];
|
||||
667 -> 668;
|
||||
549 -> 554 [label=true];
|
||||
549 -> 665 [label=false];
|
||||
666 -> 667;
|
||||
554 -> 559 [label=true];
|
||||
554 -> 664 [label=false];
|
||||
665 -> 666;
|
||||
559 -> 564 [label=true];
|
||||
559 -> 663 [label=false];
|
||||
664 -> 665;
|
||||
564 -> 569 [label=true];
|
||||
564 -> 662 [label=false];
|
||||
663 -> 664;
|
||||
569 -> 574 [label=true];
|
||||
569 -> 661 [label=false];
|
||||
662 -> 663;
|
||||
574 -> 579 [label=true];
|
||||
574 -> 660 [label=false];
|
||||
661 -> 662;
|
||||
579 -> 584 [label=true];
|
||||
579 -> 659 [label=false];
|
||||
660 -> 661;
|
||||
584 -> 589 [label=true];
|
||||
584 -> 658 [label=false];
|
||||
659 -> 660;
|
||||
589 -> 594 [label=true];
|
||||
589 -> 657 [label=false];
|
||||
658 -> 659;
|
||||
594 -> 599 [label=true];
|
||||
594 -> 656 [label=false];
|
||||
657 -> 658;
|
||||
599 -> 604 [label=true];
|
||||
599 -> 655 [label=false];
|
||||
656 -> 657;
|
||||
604 -> 609 [label=true];
|
||||
604 -> 654 [label=false];
|
||||
655 -> 656;
|
||||
609 -> 614 [label=true];
|
||||
609 -> 653 [label=false];
|
||||
654 -> 655;
|
||||
614 -> 619 [label=true];
|
||||
614 -> 652 [label=false];
|
||||
653 -> 654;
|
||||
619 -> 624 [label=true];
|
||||
619 -> 651 [label=false];
|
||||
652 -> 653;
|
||||
624 -> 629 [label=true];
|
||||
624 -> 650 [label=false];
|
||||
651 -> 652;
|
||||
629 -> 634 [label=true];
|
||||
629 -> 649 [label=false];
|
||||
650 -> 651;
|
||||
634 -> 639 [label=true];
|
||||
634 -> 648 [label=false];
|
||||
649 -> 650;
|
||||
639 -> 644 [label=true];
|
||||
639 -> 647 [label=false];
|
||||
648 -> 649;
|
||||
644 -> 647;
|
||||
647 -> 648;
|
||||
}
|
||||
86
graph/path/testdata/flow/nested_if_n16.dot
vendored
Normal file
86
graph/path/testdata/flow/nested_if_n16.dot
vendored
Normal file
@@ -0,0 +1,86 @@
|
||||
digraph main {
|
||||
// Node definitions.
|
||||
2 [label=entry];
|
||||
9;
|
||||
102;
|
||||
14;
|
||||
101;
|
||||
19;
|
||||
100;
|
||||
24;
|
||||
99;
|
||||
29;
|
||||
98;
|
||||
34;
|
||||
97;
|
||||
39;
|
||||
96;
|
||||
44;
|
||||
95;
|
||||
49;
|
||||
94;
|
||||
54;
|
||||
93;
|
||||
59;
|
||||
92;
|
||||
64;
|
||||
91;
|
||||
69;
|
||||
90;
|
||||
74;
|
||||
89;
|
||||
79;
|
||||
88;
|
||||
84;
|
||||
87;
|
||||
|
||||
// Edge definitions.
|
||||
2 -> 9 [label=true];
|
||||
2 -> 102 [label=false];
|
||||
9 -> 14 [label=true];
|
||||
9 -> 101 [label=false];
|
||||
14 -> 19 [label=true];
|
||||
14 -> 100 [label=false];
|
||||
101 -> 102;
|
||||
19 -> 24 [label=true];
|
||||
19 -> 99 [label=false];
|
||||
100 -> 101;
|
||||
24 -> 29 [label=true];
|
||||
24 -> 98 [label=false];
|
||||
99 -> 100;
|
||||
29 -> 34 [label=true];
|
||||
29 -> 97 [label=false];
|
||||
98 -> 99;
|
||||
34 -> 39 [label=true];
|
||||
34 -> 96 [label=false];
|
||||
97 -> 98;
|
||||
39 -> 44 [label=true];
|
||||
39 -> 95 [label=false];
|
||||
96 -> 97;
|
||||
44 -> 49 [label=true];
|
||||
44 -> 94 [label=false];
|
||||
95 -> 96;
|
||||
49 -> 54 [label=true];
|
||||
49 -> 93 [label=false];
|
||||
94 -> 95;
|
||||
54 -> 59 [label=true];
|
||||
54 -> 92 [label=false];
|
||||
93 -> 94;
|
||||
59 -> 64 [label=true];
|
||||
59 -> 91 [label=false];
|
||||
92 -> 93;
|
||||
64 -> 69 [label=true];
|
||||
64 -> 90 [label=false];
|
||||
91 -> 92;
|
||||
69 -> 74 [label=true];
|
||||
69 -> 89 [label=false];
|
||||
90 -> 91;
|
||||
74 -> 79 [label=true];
|
||||
74 -> 88 [label=false];
|
||||
89 -> 90;
|
||||
79 -> 84 [label=true];
|
||||
79 -> 87 [label=false];
|
||||
88 -> 89;
|
||||
84 -> 87;
|
||||
87 -> 88;
|
||||
}
|
||||
10246
graph/path/testdata/flow/nested_if_n2048.dot
vendored
Normal file
10246
graph/path/testdata/flow/nested_if_n2048.dot
vendored
Normal file
File diff suppressed because it is too large
Load Diff
1286
graph/path/testdata/flow/nested_if_n256.dot
vendored
Normal file
1286
graph/path/testdata/flow/nested_if_n256.dot
vendored
Normal file
File diff suppressed because it is too large
Load Diff
166
graph/path/testdata/flow/nested_if_n32.dot
vendored
Normal file
166
graph/path/testdata/flow/nested_if_n32.dot
vendored
Normal file
@@ -0,0 +1,166 @@
|
||||
digraph main {
|
||||
// Node definitions.
|
||||
2 [label=entry];
|
||||
9;
|
||||
198;
|
||||
14;
|
||||
197;
|
||||
19;
|
||||
196;
|
||||
24;
|
||||
195;
|
||||
29;
|
||||
194;
|
||||
34;
|
||||
193;
|
||||
39;
|
||||
192;
|
||||
44;
|
||||
191;
|
||||
49;
|
||||
190;
|
||||
54;
|
||||
189;
|
||||
59;
|
||||
188;
|
||||
64;
|
||||
187;
|
||||
69;
|
||||
186;
|
||||
74;
|
||||
185;
|
||||
79;
|
||||
184;
|
||||
84;
|
||||
183;
|
||||
89;
|
||||
182;
|
||||
94;
|
||||
181;
|
||||
99;
|
||||
180;
|
||||
104;
|
||||
179;
|
||||
109;
|
||||
178;
|
||||
114;
|
||||
177;
|
||||
119;
|
||||
176;
|
||||
124;
|
||||
175;
|
||||
129;
|
||||
174;
|
||||
134;
|
||||
173;
|
||||
139;
|
||||
172;
|
||||
144;
|
||||
171;
|
||||
149;
|
||||
170;
|
||||
154;
|
||||
169;
|
||||
159;
|
||||
168;
|
||||
164;
|
||||
167;
|
||||
|
||||
// Edge definitions.
|
||||
2 -> 9 [label=true];
|
||||
2 -> 198 [label=false];
|
||||
9 -> 14 [label=true];
|
||||
9 -> 197 [label=false];
|
||||
14 -> 19 [label=true];
|
||||
14 -> 196 [label=false];
|
||||
197 -> 198;
|
||||
19 -> 24 [label=true];
|
||||
19 -> 195 [label=false];
|
||||
196 -> 197;
|
||||
24 -> 29 [label=true];
|
||||
24 -> 194 [label=false];
|
||||
195 -> 196;
|
||||
29 -> 34 [label=true];
|
||||
29 -> 193 [label=false];
|
||||
194 -> 195;
|
||||
34 -> 39 [label=true];
|
||||
34 -> 192 [label=false];
|
||||
193 -> 194;
|
||||
39 -> 44 [label=true];
|
||||
39 -> 191 [label=false];
|
||||
192 -> 193;
|
||||
44 -> 49 [label=true];
|
||||
44 -> 190 [label=false];
|
||||
191 -> 192;
|
||||
49 -> 54 [label=true];
|
||||
49 -> 189 [label=false];
|
||||
190 -> 191;
|
||||
54 -> 59 [label=true];
|
||||
54 -> 188 [label=false];
|
||||
189 -> 190;
|
||||
59 -> 64 [label=true];
|
||||
59 -> 187 [label=false];
|
||||
188 -> 189;
|
||||
64 -> 69 [label=true];
|
||||
64 -> 186 [label=false];
|
||||
187 -> 188;
|
||||
69 -> 74 [label=true];
|
||||
69 -> 185 [label=false];
|
||||
186 -> 187;
|
||||
74 -> 79 [label=true];
|
||||
74 -> 184 [label=false];
|
||||
185 -> 186;
|
||||
79 -> 84 [label=true];
|
||||
79 -> 183 [label=false];
|
||||
184 -> 185;
|
||||
84 -> 89 [label=true];
|
||||
84 -> 182 [label=false];
|
||||
183 -> 184;
|
||||
89 -> 94 [label=true];
|
||||
89 -> 181 [label=false];
|
||||
182 -> 183;
|
||||
94 -> 99 [label=true];
|
||||
94 -> 180 [label=false];
|
||||
181 -> 182;
|
||||
99 -> 104 [label=true];
|
||||
99 -> 179 [label=false];
|
||||
180 -> 181;
|
||||
104 -> 109 [label=true];
|
||||
104 -> 178 [label=false];
|
||||
179 -> 180;
|
||||
109 -> 114 [label=true];
|
||||
109 -> 177 [label=false];
|
||||
178 -> 179;
|
||||
114 -> 119 [label=true];
|
||||
114 -> 176 [label=false];
|
||||
177 -> 178;
|
||||
119 -> 124 [label=true];
|
||||
119 -> 175 [label=false];
|
||||
176 -> 177;
|
||||
124 -> 129 [label=true];
|
||||
124 -> 174 [label=false];
|
||||
175 -> 176;
|
||||
129 -> 134 [label=true];
|
||||
129 -> 173 [label=false];
|
||||
174 -> 175;
|
||||
134 -> 139 [label=true];
|
||||
134 -> 172 [label=false];
|
||||
173 -> 174;
|
||||
139 -> 144 [label=true];
|
||||
139 -> 171 [label=false];
|
||||
172 -> 173;
|
||||
144 -> 149 [label=true];
|
||||
144 -> 170 [label=false];
|
||||
171 -> 172;
|
||||
149 -> 154 [label=true];
|
||||
149 -> 169 [label=false];
|
||||
170 -> 171;
|
||||
154 -> 159 [label=true];
|
||||
154 -> 168 [label=false];
|
||||
169 -> 170;
|
||||
159 -> 164 [label=true];
|
||||
159 -> 167 [label=false];
|
||||
168 -> 169;
|
||||
164 -> 167;
|
||||
167 -> 168;
|
||||
}
|
||||
2566
graph/path/testdata/flow/nested_if_n512.dot
vendored
Normal file
2566
graph/path/testdata/flow/nested_if_n512.dot
vendored
Normal file
File diff suppressed because it is too large
Load Diff
326
graph/path/testdata/flow/nested_if_n64.dot
vendored
Normal file
326
graph/path/testdata/flow/nested_if_n64.dot
vendored
Normal file
@@ -0,0 +1,326 @@
|
||||
digraph main {
|
||||
// Node definitions.
|
||||
2 [label=entry];
|
||||
9;
|
||||
390;
|
||||
14;
|
||||
389;
|
||||
19;
|
||||
388;
|
||||
24;
|
||||
387;
|
||||
29;
|
||||
386;
|
||||
34;
|
||||
385;
|
||||
39;
|
||||
384;
|
||||
44;
|
||||
383;
|
||||
49;
|
||||
382;
|
||||
54;
|
||||
381;
|
||||
59;
|
||||
380;
|
||||
64;
|
||||
379;
|
||||
69;
|
||||
378;
|
||||
74;
|
||||
377;
|
||||
79;
|
||||
376;
|
||||
84;
|
||||
375;
|
||||
89;
|
||||
374;
|
||||
94;
|
||||
373;
|
||||
99;
|
||||
372;
|
||||
104;
|
||||
371;
|
||||
109;
|
||||
370;
|
||||
114;
|
||||
369;
|
||||
119;
|
||||
368;
|
||||
124;
|
||||
367;
|
||||
129;
|
||||
366;
|
||||
134;
|
||||
365;
|
||||
139;
|
||||
364;
|
||||
144;
|
||||
363;
|
||||
149;
|
||||
362;
|
||||
154;
|
||||
361;
|
||||
159;
|
||||
360;
|
||||
164;
|
||||
359;
|
||||
169;
|
||||
358;
|
||||
174;
|
||||
357;
|
||||
179;
|
||||
356;
|
||||
184;
|
||||
355;
|
||||
189;
|
||||
354;
|
||||
194;
|
||||
353;
|
||||
199;
|
||||
352;
|
||||
204;
|
||||
351;
|
||||
209;
|
||||
350;
|
||||
214;
|
||||
349;
|
||||
219;
|
||||
348;
|
||||
224;
|
||||
347;
|
||||
229;
|
||||
346;
|
||||
234;
|
||||
345;
|
||||
239;
|
||||
344;
|
||||
244;
|
||||
343;
|
||||
249;
|
||||
342;
|
||||
254;
|
||||
341;
|
||||
259;
|
||||
340;
|
||||
264;
|
||||
339;
|
||||
269;
|
||||
338;
|
||||
274;
|
||||
337;
|
||||
279;
|
||||
336;
|
||||
284;
|
||||
335;
|
||||
289;
|
||||
334;
|
||||
294;
|
||||
333;
|
||||
299;
|
||||
332;
|
||||
304;
|
||||
331;
|
||||
309;
|
||||
330;
|
||||
314;
|
||||
329;
|
||||
319;
|
||||
328;
|
||||
324;
|
||||
327;
|
||||
|
||||
// Edge definitions.
|
||||
2 -> 9 [label=true];
|
||||
2 -> 390 [label=false];
|
||||
9 -> 14 [label=true];
|
||||
9 -> 389 [label=false];
|
||||
14 -> 19 [label=true];
|
||||
14 -> 388 [label=false];
|
||||
389 -> 390;
|
||||
19 -> 24 [label=true];
|
||||
19 -> 387 [label=false];
|
||||
388 -> 389;
|
||||
24 -> 29 [label=true];
|
||||
24 -> 386 [label=false];
|
||||
387 -> 388;
|
||||
29 -> 34 [label=true];
|
||||
29 -> 385 [label=false];
|
||||
386 -> 387;
|
||||
34 -> 39 [label=true];
|
||||
34 -> 384 [label=false];
|
||||
385 -> 386;
|
||||
39 -> 44 [label=true];
|
||||
39 -> 383 [label=false];
|
||||
384 -> 385;
|
||||
44 -> 49 [label=true];
|
||||
44 -> 382 [label=false];
|
||||
383 -> 384;
|
||||
49 -> 54 [label=true];
|
||||
49 -> 381 [label=false];
|
||||
382 -> 383;
|
||||
54 -> 59 [label=true];
|
||||
54 -> 380 [label=false];
|
||||
381 -> 382;
|
||||
59 -> 64 [label=true];
|
||||
59 -> 379 [label=false];
|
||||
380 -> 381;
|
||||
64 -> 69 [label=true];
|
||||
64 -> 378 [label=false];
|
||||
379 -> 380;
|
||||
69 -> 74 [label=true];
|
||||
69 -> 377 [label=false];
|
||||
378 -> 379;
|
||||
74 -> 79 [label=true];
|
||||
74 -> 376 [label=false];
|
||||
377 -> 378;
|
||||
79 -> 84 [label=true];
|
||||
79 -> 375 [label=false];
|
||||
376 -> 377;
|
||||
84 -> 89 [label=true];
|
||||
84 -> 374 [label=false];
|
||||
375 -> 376;
|
||||
89 -> 94 [label=true];
|
||||
89 -> 373 [label=false];
|
||||
374 -> 375;
|
||||
94 -> 99 [label=true];
|
||||
94 -> 372 [label=false];
|
||||
373 -> 374;
|
||||
99 -> 104 [label=true];
|
||||
99 -> 371 [label=false];
|
||||
372 -> 373;
|
||||
104 -> 109 [label=true];
|
||||
104 -> 370 [label=false];
|
||||
371 -> 372;
|
||||
109 -> 114 [label=true];
|
||||
109 -> 369 [label=false];
|
||||
370 -> 371;
|
||||
114 -> 119 [label=true];
|
||||
114 -> 368 [label=false];
|
||||
369 -> 370;
|
||||
119 -> 124 [label=true];
|
||||
119 -> 367 [label=false];
|
||||
368 -> 369;
|
||||
124 -> 129 [label=true];
|
||||
124 -> 366 [label=false];
|
||||
367 -> 368;
|
||||
129 -> 134 [label=true];
|
||||
129 -> 365 [label=false];
|
||||
366 -> 367;
|
||||
134 -> 139 [label=true];
|
||||
134 -> 364 [label=false];
|
||||
365 -> 366;
|
||||
139 -> 144 [label=true];
|
||||
139 -> 363 [label=false];
|
||||
364 -> 365;
|
||||
144 -> 149 [label=true];
|
||||
144 -> 362 [label=false];
|
||||
363 -> 364;
|
||||
149 -> 154 [label=true];
|
||||
149 -> 361 [label=false];
|
||||
362 -> 363;
|
||||
154 -> 159 [label=true];
|
||||
154 -> 360 [label=false];
|
||||
361 -> 362;
|
||||
159 -> 164 [label=true];
|
||||
159 -> 359 [label=false];
|
||||
360 -> 361;
|
||||
164 -> 169 [label=true];
|
||||
164 -> 358 [label=false];
|
||||
359 -> 360;
|
||||
169 -> 174 [label=true];
|
||||
169 -> 357 [label=false];
|
||||
358 -> 359;
|
||||
174 -> 179 [label=true];
|
||||
174 -> 356 [label=false];
|
||||
357 -> 358;
|
||||
179 -> 184 [label=true];
|
||||
179 -> 355 [label=false];
|
||||
356 -> 357;
|
||||
184 -> 189 [label=true];
|
||||
184 -> 354 [label=false];
|
||||
355 -> 356;
|
||||
189 -> 194 [label=true];
|
||||
189 -> 353 [label=false];
|
||||
354 -> 355;
|
||||
194 -> 199 [label=true];
|
||||
194 -> 352 [label=false];
|
||||
353 -> 354;
|
||||
199 -> 204 [label=true];
|
||||
199 -> 351 [label=false];
|
||||
352 -> 353;
|
||||
204 -> 209 [label=true];
|
||||
204 -> 350 [label=false];
|
||||
351 -> 352;
|
||||
209 -> 214 [label=true];
|
||||
209 -> 349 [label=false];
|
||||
350 -> 351;
|
||||
214 -> 219 [label=true];
|
||||
214 -> 348 [label=false];
|
||||
349 -> 350;
|
||||
219 -> 224 [label=true];
|
||||
219 -> 347 [label=false];
|
||||
348 -> 349;
|
||||
224 -> 229 [label=true];
|
||||
224 -> 346 [label=false];
|
||||
347 -> 348;
|
||||
229 -> 234 [label=true];
|
||||
229 -> 345 [label=false];
|
||||
346 -> 347;
|
||||
234 -> 239 [label=true];
|
||||
234 -> 344 [label=false];
|
||||
345 -> 346;
|
||||
239 -> 244 [label=true];
|
||||
239 -> 343 [label=false];
|
||||
344 -> 345;
|
||||
244 -> 249 [label=true];
|
||||
244 -> 342 [label=false];
|
||||
343 -> 344;
|
||||
249 -> 254 [label=true];
|
||||
249 -> 341 [label=false];
|
||||
342 -> 343;
|
||||
254 -> 259 [label=true];
|
||||
254 -> 340 [label=false];
|
||||
341 -> 342;
|
||||
259 -> 264 [label=true];
|
||||
259 -> 339 [label=false];
|
||||
340 -> 341;
|
||||
264 -> 269 [label=true];
|
||||
264 -> 338 [label=false];
|
||||
339 -> 340;
|
||||
269 -> 274 [label=true];
|
||||
269 -> 337 [label=false];
|
||||
338 -> 339;
|
||||
274 -> 279 [label=true];
|
||||
274 -> 336 [label=false];
|
||||
337 -> 338;
|
||||
279 -> 284 [label=true];
|
||||
279 -> 335 [label=false];
|
||||
336 -> 337;
|
||||
284 -> 289 [label=true];
|
||||
284 -> 334 [label=false];
|
||||
335 -> 336;
|
||||
289 -> 294 [label=true];
|
||||
289 -> 333 [label=false];
|
||||
334 -> 335;
|
||||
294 -> 299 [label=true];
|
||||
294 -> 332 [label=false];
|
||||
333 -> 334;
|
||||
299 -> 304 [label=true];
|
||||
299 -> 331 [label=false];
|
||||
332 -> 333;
|
||||
304 -> 309 [label=true];
|
||||
304 -> 330 [label=false];
|
||||
331 -> 332;
|
||||
309 -> 314 [label=true];
|
||||
309 -> 329 [label=false];
|
||||
330 -> 331;
|
||||
314 -> 319 [label=true];
|
||||
314 -> 328 [label=false];
|
||||
329 -> 330;
|
||||
319 -> 324 [label=true];
|
||||
319 -> 327 [label=false];
|
||||
328 -> 329;
|
||||
324 -> 327;
|
||||
327 -> 328;
|
||||
}
|
||||
Reference in New Issue
Block a user