mirror of
https://github.com/gonum/gonum.git
synced 2025-10-05 15:16:59 +08:00
60 lines
1.6 KiB
Go
60 lines
1.6 KiB
Go
// Copyright ©2015 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
|
|
|
|
import (
|
|
"math"
|
|
"testing"
|
|
|
|
"gonum.org/v1/gonum/graph"
|
|
"gonum.org/v1/gonum/graph/simple"
|
|
)
|
|
|
|
type duplication struct {
|
|
UndirectedMutator
|
|
addBackwards bool
|
|
addSelfLoop bool
|
|
addMultipleEdge bool
|
|
}
|
|
|
|
func (g *duplication) SetEdge(e graph.Edge) {
|
|
switch {
|
|
case e.From().ID() == e.To().ID():
|
|
g.addSelfLoop = true
|
|
return
|
|
case e.From().ID() > e.To().ID():
|
|
g.addBackwards = true
|
|
case g.UndirectedMutator.HasEdgeBetween(e.From(), e.To()):
|
|
g.addMultipleEdge = true
|
|
}
|
|
|
|
g.UndirectedMutator.SetEdge(e)
|
|
}
|
|
|
|
func TestDuplication(t *testing.T) {
|
|
for n := 2; n <= 50; n++ {
|
|
for alpha := 0.1; alpha <= 1; alpha += 0.1 {
|
|
for delta := 0.; delta <= 1; delta += 0.2 {
|
|
for sigma := 0.; sigma <= 1; sigma += 0.2 {
|
|
g := &duplication{UndirectedMutator: simple.NewUndirectedGraph(0, math.Inf(1))}
|
|
err := Duplication(g, n, delta, alpha, sigma, nil)
|
|
if err != nil {
|
|
t.Fatalf("unexpected error: n=%d, alpha=%v, delta=%v sigma=%v: %v", n, alpha, delta, sigma, err)
|
|
}
|
|
if g.addBackwards {
|
|
t.Errorf("edge added with From.ID > To.ID: n=%d, alpha=%v, delta=%v sigma=%v", n, alpha, delta, sigma)
|
|
}
|
|
if g.addSelfLoop {
|
|
t.Errorf("unexpected self edge: n=%d, alpha=%v, delta=%v sigma=%v", n, alpha, delta, sigma)
|
|
}
|
|
if g.addMultipleEdge {
|
|
t.Errorf("unexpected multiple edge: n=%d, alpha=%v, delta=%v sigma=%v", n, alpha, delta, sigma)
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|