photoprism/pkg/clusters/dbscan_test.go
Michael Mayer 41b252d820 People: Add unofficial env variables to tweak face matching #1587 #2182
Adds two unofficial env variables so advanced users can experiment:

1. PHOTOPRISM_FACE_KIDS_DIST=0.6950 (range: 0.1-1.5, -1 to disable)
2. PHOTOPRISM_FACE_IGNORE_DIST=0.86 (range: 0.1-1.5, -1 to disable)
2022-04-03 17:25:37 +02:00

72 lines
1.3 KiB
Go

package clusters
import (
"reflect"
"testing"
)
func TestDBSCANCluster(t *testing.T) {
tests := []struct {
MinPts int
Eps float64
Points [][]float64
Expected []int
}{
{
MinPts: 1,
Eps: 1,
Points: [][]float64{{1}},
Expected: []int{1},
},
{
MinPts: 1,
Eps: 1,
Points: [][]float64{{1}, {1.5}},
Expected: []int{1, 1},
},
{
MinPts: 1,
Eps: 1,
Points: [][]float64{{1}, {1}},
Expected: []int{1, 1},
},
{
MinPts: 1,
Eps: 1,
Points: [][]float64{{1}, {1}, {1}},
Expected: []int{1, 1, 1},
},
{
MinPts: 1,
Eps: 1,
Points: [][]float64{{1}, {1.5}, {2}},
Expected: []int{1, 1, 1},
},
{
MinPts: 1,
Eps: 1,
Points: [][]float64{{1}, {1.5}, {3}},
Expected: []int{1, 1, 2},
},
{
MinPts: 2,
Eps: 1,
Points: [][]float64{{1}, {3}},
Expected: []int{-1, -1},
},
}
for _, test := range tests {
c, e := DBSCAN(test.MinPts, test.Eps, 0, EuclideanDist)
if e != nil {
t.Errorf("Error initializing kmeans clusterer: %s\n", e.Error())
}
if e = c.Learn(test.Points); e != nil {
t.Errorf("Error learning data: %s\n", e.Error())
}
if !reflect.DeepEqual(c.Guesses(), test.Expected) {
t.Errorf("guesses does not match: %d vs %d\n", c.Guesses(), test.Expected)
}
}
}