github.com/gopherd/gonum@v0.0.4/graph/graphs/gen/duplication_test.go (about)

     1  // Copyright ©2015 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
     6  
     7  import (
     8  	"testing"
     9  
    10  	"github.com/gopherd/gonum/graph"
    11  	"github.com/gopherd/gonum/graph/simple"
    12  )
    13  
    14  type duplication struct {
    15  	UndirectedMutator
    16  	addBackwards    bool
    17  	addSelfLoop     bool
    18  	addMultipleEdge bool
    19  }
    20  
    21  func (g *duplication) SetEdge(e graph.Edge) {
    22  	switch {
    23  	case e.From().ID() == e.To().ID():
    24  		g.addSelfLoop = true
    25  		return
    26  	case e.From().ID() > e.To().ID():
    27  		g.addBackwards = true
    28  	case g.UndirectedMutator.HasEdgeBetween(e.From().ID(), e.To().ID()):
    29  		g.addMultipleEdge = true
    30  	}
    31  
    32  	g.UndirectedMutator.SetEdge(e)
    33  }
    34  
    35  func TestDuplication(t *testing.T) {
    36  	t.Parallel()
    37  	for n := 2; n <= 50; n++ {
    38  		for alpha := 0.1; alpha <= 1; alpha += 0.1 {
    39  			for delta := 0.; delta <= 1; delta += 0.2 {
    40  				for sigma := 0.; sigma <= 1; sigma += 0.2 {
    41  					g := &duplication{UndirectedMutator: simple.NewUndirectedGraph()}
    42  					err := Duplication(g, n, delta, alpha, sigma, nil)
    43  					if err != nil {
    44  						t.Fatalf("unexpected error: n=%d, alpha=%v, delta=%v sigma=%v: %v", n, alpha, delta, sigma, err)
    45  					}
    46  					if g.addBackwards {
    47  						t.Errorf("edge added with From.ID > To.ID: n=%d, alpha=%v, delta=%v sigma=%v", n, alpha, delta, sigma)
    48  					}
    49  					if g.addSelfLoop {
    50  						t.Errorf("unexpected self edge: n=%d, alpha=%v, delta=%v sigma=%v", n, alpha, delta, sigma)
    51  					}
    52  					if g.addMultipleEdge {
    53  						t.Errorf("unexpected multiple edge: n=%d, alpha=%v, delta=%v sigma=%v", n, alpha, delta, sigma)
    54  					}
    55  				}
    56  			}
    57  		}
    58  	}
    59  }