// Copyright ©2021 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. package gen_test import ( "fmt" "log" "gonum.org/v1/gonum/graph" "gonum.org/v1/gonum/graph/encoding/dot" "gonum.org/v1/gonum/graph/graphs/gen" "gonum.org/v1/gonum/graph/simple" ) func ExampleStar_undirectedRange() { dst := simple.NewUndirectedGraph() gen.Star(dst, 0, gen.IDRange{First: 1, Last: 6}) b, err := dot.Marshal(dst, "star", "", "\t") if err != nil { log.Fatal(err) } fmt.Printf("%s\n", b) // Output: // strict graph star { // // Node definitions. // 0; // 1; // 2; // 3; // 4; // 5; // 6; // // // Edge definitions. // 0 -- 1; // 0 -- 2; // 0 -- 3; // 0 -- 4; // 0 -- 5; // 0 -- 6; // } } func ExampleWheel_directedRange() { dst := simple.NewDirectedGraph() gen.Wheel(dst, 0, gen.IDRange{First: 1, Last: 6}) b, err := dot.Marshal(dst, "wheel", "", "\t") if err != nil { log.Fatal(err) } fmt.Printf("%s\n", b) // Output: // strict digraph wheel { // // Node definitions. // 0; // 1; // 2; // 3; // 4; // 5; // 6; // // // Edge definitions. // 0 -> 1; // 0 -> 2; // 0 -> 3; // 0 -> 4; // 0 -> 5; // 0 -> 6; // 1 -> 2; // 2 -> 3; // 3 -> 4; // 4 -> 5; // 5 -> 6; // 6 -> 1; // } } func ExamplePath_directedSet() { dst := simple.NewDirectedGraph() gen.Path(dst, gen.IDSet{2, 4, 5, 9}) b, err := dot.Marshal(dst, "path", "", "\t") if err != nil { log.Fatal(err) } fmt.Printf("%s\n", b) // Output: // strict digraph path { // // Node definitions. // 2; // 4; // 5; // 9; // // // Edge definitions. // 2 -> 4; // 4 -> 5; // 5 -> 9; // } } func ExampleComplete_directedSet() { dst := simple.NewDirectedGraph() gen.Complete(dst, gen.IDSet{2, 4, 5, 9}) b, err := dot.Marshal(dst, "complete", "", "\t") if err != nil { log.Fatal(err) } fmt.Printf("%s\n", b) // Output: // strict digraph complete { // // Node definitions. // 2; // 4; // 5; // 9; // // // Edge definitions. // 2 -> 4; // 2 -> 5; // 2 -> 9; // 4 -> 5; // 4 -> 9; // 5 -> 9; // } } // Bidirected allows bidirectional directed graph construction. type Bidirected struct { *simple.DirectedGraph } func (g Bidirected) SetEdge(e graph.Edge) { g.DirectedGraph.SetEdge(e) g.DirectedGraph.SetEdge(e.ReversedEdge()) } func ExampleComplete_biDirectedSet() { dst := simple.NewDirectedGraph() gen.Complete(Bidirected{dst}, gen.IDSet{2, 4, 5, 9}) b, err := dot.Marshal(dst, "complete", "", "\t") if err != nil { log.Fatal(err) } fmt.Printf("%s\n", b) // Output: // strict digraph complete { // // Node definitions. // 2; // 4; // 5; // 9; // // // Edge definitions. // 2 -> 4; // 2 -> 5; // 2 -> 9; // 4 -> 2; // 4 -> 5; // 4 -> 9; // 5 -> 2; // 5 -> 4; // 5 -> 9; // 9 -> 2; // 9 -> 4; // 9 -> 5; // } } func ExampleComplete_undirectedSet() { dst := simple.NewUndirectedGraph() gen.Complete(dst, gen.IDSet{2, 4, 5, 9}) b, err := dot.Marshal(dst, "complete", "", "\t") if err != nil { log.Fatal(err) } fmt.Printf("%s\n", b) // Output: // strict graph complete { // // Node definitions. // 2; // 4; // 5; // 9; // // // Edge definitions. // 2 -- 4; // 2 -- 5; // 2 -- 9; // 4 -- 5; // 4 -- 9; // 5 -- 9; // } } func ExampleTree_undirectedRange() { dst := simple.NewUndirectedGraph() gen.Tree(dst, 2, gen.IDRange{First: 0, Last: 14}) b, err := dot.Marshal(dst, "full_binary_tree_undirected", "", "\t") if err != nil { log.Fatal(err) } fmt.Printf("%s\n", b) // Output: // strict graph full_binary_tree_undirected { // // Node definitions. // 0; // 1; // 2; // 3; // 4; // 5; // 6; // 7; // 8; // 9; // 10; // 11; // 12; // 13; // 14; // // // Edge definitions. // 0 -- 1; // 0 -- 2; // 1 -- 3; // 1 -- 4; // 2 -- 5; // 2 -- 6; // 3 -- 7; // 3 -- 8; // 4 -- 9; // 4 -- 10; // 5 -- 11; // 5 -- 12; // 6 -- 13; // 6 -- 14; // } }