forked from extern/smegmesh
117 lines
2.1 KiB
Go
117 lines
2.1 KiB
Go
|
package conn
|
||
|
|
||
|
import (
|
||
|
"math/rand"
|
||
|
"slices"
|
||
|
"testing"
|
||
|
)
|
||
|
|
||
|
func TestGetNeighboursClusterSizeTwo(t *testing.T) {
|
||
|
cluster := &ConnClusterImpl{
|
||
|
clusterSize: 2,
|
||
|
}
|
||
|
neighbours := []string{
|
||
|
"a",
|
||
|
"b",
|
||
|
"c",
|
||
|
"d",
|
||
|
}
|
||
|
|
||
|
result := cluster.GetNeighbours(neighbours, "b")
|
||
|
|
||
|
if len(result) != 2 {
|
||
|
t.Fatalf(`neighbour length should be 2`)
|
||
|
}
|
||
|
|
||
|
if result[0] != "a" && result[1] != "b" {
|
||
|
t.Fatalf(`Expected value b`)
|
||
|
}
|
||
|
}
|
||
|
|
||
|
func TestGetNeighboursGlobalListLessThanClusterSize(t *testing.T) {
|
||
|
cluster := &ConnClusterImpl{
|
||
|
clusterSize: 4,
|
||
|
}
|
||
|
|
||
|
neighbours := []string{
|
||
|
"a",
|
||
|
"b",
|
||
|
"c",
|
||
|
}
|
||
|
|
||
|
result := cluster.GetNeighbours(neighbours, "a")
|
||
|
|
||
|
if len(result) != 3 {
|
||
|
t.Fatalf(`neighbour length should be 3`)
|
||
|
}
|
||
|
|
||
|
slices.Sort(result)
|
||
|
|
||
|
if !slices.Equal(result, neighbours) {
|
||
|
t.Fatalf(`Cluster and neighbours should be equal`)
|
||
|
}
|
||
|
}
|
||
|
|
||
|
func TestGetNeighboursClusterSize4(t *testing.T) {
|
||
|
cluster := &ConnClusterImpl{
|
||
|
clusterSize: 4,
|
||
|
}
|
||
|
|
||
|
neighbours := []string{
|
||
|
"a", "b", "c", "d", "e", "f", "g", "h", "i", "j",
|
||
|
"k", "l", "m", "n", "o",
|
||
|
}
|
||
|
|
||
|
result := cluster.GetNeighbours(neighbours, "k")
|
||
|
|
||
|
if len(result) != 4 {
|
||
|
t.Fatalf(`cluster size must be 4`)
|
||
|
}
|
||
|
|
||
|
slices.Sort(result)
|
||
|
|
||
|
if !slices.Equal(neighbours[8:12], result) {
|
||
|
t.Fatalf(`Cluster should be i, j, k, l`)
|
||
|
}
|
||
|
}
|
||
|
|
||
|
func TestGetNeighboursClusterSize4OneReturned(t *testing.T) {
|
||
|
cluster := &ConnClusterImpl{
|
||
|
clusterSize: 4,
|
||
|
}
|
||
|
|
||
|
neighbours := []string{
|
||
|
"a", "b", "c", "d", "e", "f", "g", "h", "i", "j",
|
||
|
"k", "l", "m", "n", "o",
|
||
|
}
|
||
|
|
||
|
result := cluster.GetNeighbours(neighbours, "o")
|
||
|
|
||
|
if len(result) != 3 {
|
||
|
t.Fatalf(`Cluster should be of length 3`)
|
||
|
}
|
||
|
|
||
|
if !slices.Equal(neighbours[12:15], result) {
|
||
|
t.Fatalf(`Cluster should be m, n, o`)
|
||
|
}
|
||
|
}
|
||
|
|
||
|
func TestInterClusterNotInCluster(t *testing.T) {
|
||
|
rand.Seed(1)
|
||
|
cluster := &ConnClusterImpl{
|
||
|
clusterSize: 4,
|
||
|
}
|
||
|
|
||
|
global := []string{
|
||
|
"a", "b", "c", "d", "e", "f", "g", "h", "i", "j",
|
||
|
"k", "l", "m", "n", "o",
|
||
|
}
|
||
|
|
||
|
neighbours := cluster.GetNeighbours(global, "c")
|
||
|
interCluster := cluster.GetInterCluster(global, "c")
|
||
|
|
||
|
if slices.Contains(neighbours, interCluster) {
|
||
|
t.Fatalf(`intercluster cannot be in your cluster`)
|
||
|
}
|
||
|
}
|