Spaces:
Running
Running
// _ _ | |
// __ _____ __ ___ ___ __ _| |_ ___ | |
// \ \ /\ / / _ \/ _` \ \ / / |/ _` | __/ _ \ | |
// \ 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}, | |
) | |
} | |
} | |