gonum.org/v1/gonum@v0.14.0/graph/graphs/gen/gen_example_test.go (about)

     1  // Copyright ©2021 The Gonum Authors. All rights reserved.
     2  // Use of this source code is governed by a BSD-style
     3  // license that can be found in the LICENSE file.
     4  
     5  package gen_test
     6  
     7  import (
     8  	"fmt"
     9  	"log"
    10  
    11  	"gonum.org/v1/gonum/graph"
    12  	"gonum.org/v1/gonum/graph/encoding/dot"
    13  	"gonum.org/v1/gonum/graph/graphs/gen"
    14  	"gonum.org/v1/gonum/graph/simple"
    15  )
    16  
    17  func ExampleStar_undirectedRange() {
    18  	dst := simple.NewUndirectedGraph()
    19  	gen.Star(dst, 0, gen.IDRange{First: 1, Last: 6})
    20  	b, err := dot.Marshal(dst, "star", "", "\t")
    21  	if err != nil {
    22  		log.Fatal(err)
    23  	}
    24  	fmt.Printf("%s\n", b)
    25  
    26  	// Output:
    27  	// strict graph star {
    28  	// 	// Node definitions.
    29  	// 	0;
    30  	// 	1;
    31  	// 	2;
    32  	// 	3;
    33  	// 	4;
    34  	// 	5;
    35  	// 	6;
    36  	//
    37  	// 	// Edge definitions.
    38  	// 	0 -- 1;
    39  	// 	0 -- 2;
    40  	// 	0 -- 3;
    41  	// 	0 -- 4;
    42  	// 	0 -- 5;
    43  	// 	0 -- 6;
    44  	// }
    45  }
    46  
    47  func ExampleWheel_directedRange() {
    48  	dst := simple.NewDirectedGraph()
    49  	gen.Wheel(dst, 0, gen.IDRange{First: 1, Last: 6})
    50  	b, err := dot.Marshal(dst, "wheel", "", "\t")
    51  	if err != nil {
    52  		log.Fatal(err)
    53  	}
    54  	fmt.Printf("%s\n", b)
    55  
    56  	// Output:
    57  	// strict digraph wheel {
    58  	// 	// Node definitions.
    59  	// 	0;
    60  	// 	1;
    61  	// 	2;
    62  	// 	3;
    63  	// 	4;
    64  	// 	5;
    65  	// 	6;
    66  	//
    67  	// 	// Edge definitions.
    68  	// 	0 -> 1;
    69  	// 	0 -> 2;
    70  	// 	0 -> 3;
    71  	// 	0 -> 4;
    72  	// 	0 -> 5;
    73  	// 	0 -> 6;
    74  	// 	1 -> 2;
    75  	// 	2 -> 3;
    76  	// 	3 -> 4;
    77  	// 	4 -> 5;
    78  	// 	5 -> 6;
    79  	// 	6 -> 1;
    80  	// }
    81  }
    82  
    83  func ExamplePath_directedSet() {
    84  	dst := simple.NewDirectedGraph()
    85  	gen.Path(dst, gen.IDSet{2, 4, 5, 9})
    86  	b, err := dot.Marshal(dst, "path", "", "\t")
    87  	if err != nil {
    88  		log.Fatal(err)
    89  	}
    90  	fmt.Printf("%s\n", b)
    91  
    92  	// Output:
    93  	// strict digraph path {
    94  	// 	// Node definitions.
    95  	// 	2;
    96  	// 	4;
    97  	// 	5;
    98  	// 	9;
    99  	//
   100  	// 	// Edge definitions.
   101  	// 	2 -> 4;
   102  	// 	4 -> 5;
   103  	// 	5 -> 9;
   104  	// }
   105  }
   106  
   107  func ExampleComplete_directedSet() {
   108  	dst := simple.NewDirectedGraph()
   109  	gen.Complete(dst, gen.IDSet{2, 4, 5, 9})
   110  	b, err := dot.Marshal(dst, "complete", "", "\t")
   111  	if err != nil {
   112  		log.Fatal(err)
   113  	}
   114  	fmt.Printf("%s\n", b)
   115  
   116  	// Output:
   117  	// strict digraph complete {
   118  	// 	// Node definitions.
   119  	// 	2;
   120  	// 	4;
   121  	// 	5;
   122  	// 	9;
   123  	//
   124  	// 	// Edge definitions.
   125  	// 	2 -> 4;
   126  	// 	2 -> 5;
   127  	// 	2 -> 9;
   128  	// 	4 -> 5;
   129  	// 	4 -> 9;
   130  	// 	5 -> 9;
   131  	// }
   132  }
   133  
   134  // Bidirected allows bidirectional directed graph construction.
   135  type Bidirected struct {
   136  	*simple.DirectedGraph
   137  }
   138  
   139  func (g Bidirected) SetEdge(e graph.Edge) {
   140  	g.DirectedGraph.SetEdge(e)
   141  	g.DirectedGraph.SetEdge(e.ReversedEdge())
   142  }
   143  
   144  func ExampleComplete_biDirectedSet() {
   145  	dst := simple.NewDirectedGraph()
   146  	gen.Complete(Bidirected{dst}, gen.IDSet{2, 4, 5, 9})
   147  	b, err := dot.Marshal(dst, "complete", "", "\t")
   148  	if err != nil {
   149  		log.Fatal(err)
   150  	}
   151  	fmt.Printf("%s\n", b)
   152  
   153  	// Output:
   154  	// strict digraph complete {
   155  	// 	// Node definitions.
   156  	// 	2;
   157  	// 	4;
   158  	// 	5;
   159  	// 	9;
   160  	//
   161  	// 	// Edge definitions.
   162  	// 	2 -> 4;
   163  	// 	2 -> 5;
   164  	// 	2 -> 9;
   165  	// 	4 -> 2;
   166  	// 	4 -> 5;
   167  	// 	4 -> 9;
   168  	// 	5 -> 2;
   169  	// 	5 -> 4;
   170  	// 	5 -> 9;
   171  	// 	9 -> 2;
   172  	// 	9 -> 4;
   173  	// 	9 -> 5;
   174  	// }
   175  }
   176  
   177  func ExampleComplete_undirectedSet() {
   178  	dst := simple.NewUndirectedGraph()
   179  	gen.Complete(dst, gen.IDSet{2, 4, 5, 9})
   180  	b, err := dot.Marshal(dst, "complete", "", "\t")
   181  	if err != nil {
   182  		log.Fatal(err)
   183  	}
   184  	fmt.Printf("%s\n", b)
   185  
   186  	// Output:
   187  	// strict graph complete {
   188  	// 	// Node definitions.
   189  	// 	2;
   190  	// 	4;
   191  	// 	5;
   192  	// 	9;
   193  	//
   194  	// 	// Edge definitions.
   195  	// 	2 -- 4;
   196  	// 	2 -- 5;
   197  	// 	2 -- 9;
   198  	// 	4 -- 5;
   199  	// 	4 -- 9;
   200  	// 	5 -- 9;
   201  	// }
   202  }
   203  
   204  func ExampleTree_undirectedRange() {
   205  	dst := simple.NewUndirectedGraph()
   206  	gen.Tree(dst, 2, gen.IDRange{First: 0, Last: 14})
   207  	b, err := dot.Marshal(dst, "full_binary_tree_undirected", "", "\t")
   208  	if err != nil {
   209  		log.Fatal(err)
   210  	}
   211  	fmt.Printf("%s\n", b)
   212  
   213  	// Output:
   214  	// strict graph full_binary_tree_undirected {
   215  	// 	// Node definitions.
   216  	// 	0;
   217  	// 	1;
   218  	// 	2;
   219  	// 	3;
   220  	// 	4;
   221  	// 	5;
   222  	// 	6;
   223  	// 	7;
   224  	// 	8;
   225  	// 	9;
   226  	// 	10;
   227  	// 	11;
   228  	// 	12;
   229  	// 	13;
   230  	// 	14;
   231  	//
   232  	// 	// Edge definitions.
   233  	// 	0 -- 1;
   234  	// 	0 -- 2;
   235  	// 	1 -- 3;
   236  	// 	1 -- 4;
   237  	// 	2 -- 5;
   238  	// 	2 -- 6;
   239  	// 	3 -- 7;
   240  	// 	3 -- 8;
   241  	// 	4 -- 9;
   242  	// 	4 -- 10;
   243  	// 	5 -- 11;
   244  	// 	5 -- 12;
   245  	// 	6 -- 13;
   246  	// 	6 -- 14;
   247  	// }
   248  }