KevinStephenson
Adding in weaviate code
b110593
raw
history blame
1.85 kB
// _ _
// __ _____ __ ___ ___ __ _| |_ ___
// \ \ /\ / / _ \/ _` \ \ / / |/ _` | __/ _ \
// \ V V / __/ (_| |\ V /| | (_| | || __/
// \_/\_/ \___|\__,_| \_/ |_|\__,_|\__\___|
//
// Copyright © 2016 - 2024 Weaviate B.V. All rights reserved.
//
// CONTACT: [email protected]
//
package vectorizer
import (
"reflect"
"testing"
)
func TestCosineSimilarity(t *testing.T) {
type args struct {
a, b []float32
}
tests := []struct {
name string
args args
want float32
}{
{
"Distance between identical vectors",
args{
a: []float32{1, 2, 3},
b: []float32{1, 2, 3},
},
1.0,
},
{
"Distance between similar vectors",
args{
a: []float32{1, 2, 3},
b: []float32{2, 3, 4},
},
0.99258333,
},
{
"Distance between opposite vectors",
args{
a: []float32{0, 1},
b: []float32{0, -1},
},
-1.0,
},
{
"Distance between perpendicular vectors",
args{
a: []float32{0, 1},
b: []float32{1, 0},
},
0.0,
},
}
for _, tt := range tests {
t.Run(tt.name, func(t *testing.T) {
if got, _ := cosineSim(tt.args.a, tt.args.b); !reflect.DeepEqual(got, tt.want) {
t.Errorf("CombineVectors() = %v, want %v", got, tt.want)
}
})
}
}
func TestCosineSim_DifferentDimensions(t *testing.T) {
a := []float32{1, 2, 3}
b := []float32{4, 5}
_, err := cosineSim(a, b)
if err == nil {
t.Errorf("expected error, got nil")
}
}
func BenchmarkCosineSimilarity(b *testing.B) {
for i := 0; i < b.N; i++ {
cosineSim([]float32{-0.214571, -0.605529, -0.335769, -0.185277, -0.212256, 0.478032, -0.536662, 0.298211},
[]float32{-0.14713769, -0.06872862, 0.09911085, -0.06342313, 0.10092197, -0.06624051, -0.06812558, 0.07360107},
)
}
}