mirror of
https://github.com/gonum/gonum.git
synced 2025-10-06 07:37:03 +08:00
67 lines
1.3 KiB
Go
67 lines
1.3 KiB
Go
// Copyright ©2014 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 path
|
|
|
|
import (
|
|
"testing"
|
|
)
|
|
|
|
func TestDisjointSetMakeSet(t *testing.T) {
|
|
t.Parallel()
|
|
ds := newDisjointSet()
|
|
if ds.master == nil {
|
|
t.Fatal("Internal disjoint set map erroneously nil")
|
|
} else if len(ds.master) != 0 {
|
|
t.Error("Disjoint set master map of wrong size")
|
|
}
|
|
|
|
ds.makeSet(3)
|
|
if len(ds.master) != 1 {
|
|
t.Error("Disjoint set master map of wrong size")
|
|
}
|
|
|
|
if node, ok := ds.master[3]; !ok {
|
|
t.Error("Make set did not successfully add element")
|
|
} else {
|
|
if node == nil {
|
|
t.Fatal("Disjoint set node from makeSet is nil")
|
|
}
|
|
|
|
if node.rank != 0 {
|
|
t.Error("Node rank set incorrectly")
|
|
}
|
|
|
|
if node.parent != node {
|
|
t.Error("Node parent set incorrectly")
|
|
}
|
|
}
|
|
}
|
|
|
|
func TestDisjointSetFind(t *testing.T) {
|
|
t.Parallel()
|
|
ds := newDisjointSet()
|
|
|
|
ds.makeSet(3)
|
|
ds.makeSet(5)
|
|
|
|
if ds.find(3) == ds.find(5) {
|
|
t.Error("Disjoint sets incorrectly found to be the same")
|
|
}
|
|
}
|
|
|
|
func TestUnion(t *testing.T) {
|
|
t.Parallel()
|
|
ds := newDisjointSet()
|
|
|
|
ds.makeSet(3)
|
|
ds.makeSet(5)
|
|
|
|
ds.union(ds.find(3), ds.find(5))
|
|
|
|
if ds.find(3) != ds.find(5) {
|
|
t.Error("Sets found to be disjoint after union")
|
|
}
|
|
}
|