KevinStephenson
Adding in weaviate code
b110593
raw
history blame
2.92 kB
// _ _
// __ _____ __ ___ ___ __ _| |_ ___
// \ \ /\ / / _ \/ _` \ \ / / |/ _` | __/ _ \
// \ V V / __/ (_| |\ V /| | (_| | || __/
// \_/\_/ \___|\__,_| \_/ |_|\__,_|\__\___|
//
// Copyright © 2016 - 2024 Weaviate B.V. All rights reserved.
//
// CONTACT: [email protected]
//
package hnsw
import (
"context"
"testing"
"github.com/pkg/errors"
"github.com/stretchr/testify/assert"
"github.com/stretchr/testify/require"
"github.com/weaviate/weaviate/adapters/repos/db/vector/hnsw/distancer"
"github.com/weaviate/weaviate/adapters/repos/db/vector/testinghelpers"
"github.com/weaviate/weaviate/entities/cyclemanager"
ent "github.com/weaviate/weaviate/entities/vectorindex/hnsw"
)
// To prevent a regression on
// https://github.com/weaviate/weaviate/issues/1878
func Test_DynamicEF(t *testing.T) {
type test struct {
name string
config ent.UserConfig
limit int
expectedEf int
}
tests := []test{
{
name: "all defaults explicitly entered, limit: 100",
config: ent.UserConfig{
VectorCacheMaxObjects: 10,
EF: -1,
DynamicEFMin: 100,
DynamicEFMax: 500,
DynamicEFFactor: 8,
},
limit: 100,
expectedEf: 500,
},
{
name: "limit lower than min",
config: ent.UserConfig{
VectorCacheMaxObjects: 10,
EF: -1,
DynamicEFMin: 100,
DynamicEFMax: 500,
DynamicEFFactor: 8,
},
limit: 10,
expectedEf: 100,
},
{
name: "limit within the dynamic range",
config: ent.UserConfig{
VectorCacheMaxObjects: 10,
EF: -1,
DynamicEFMin: 100,
DynamicEFMax: 500,
DynamicEFFactor: 8,
},
limit: 23,
expectedEf: 184,
},
{
name: "explicit ef",
config: ent.UserConfig{
VectorCacheMaxObjects: 10,
EF: 78,
},
limit: 5,
expectedEf: 78,
},
}
for _, test := range tests {
t.Run(test.name, func(t *testing.T) {
index, err := New(Config{
RootPath: "doesnt-matter-as-committlogger-is-mocked-out",
ID: "dynaimc-ef-test",
MakeCommitLoggerThunk: MakeNoopCommitLogger,
DistanceProvider: distancer.NewCosineDistanceProvider(),
VectorForIDThunk: func(ctx context.Context, id uint64) ([]float32, error) {
return nil, errors.Errorf("not implemented")
},
}, test.config, cyclemanager.NewCallbackGroupNoop(), cyclemanager.NewCallbackGroupNoop(),
cyclemanager.NewCallbackGroupNoop(), testinghelpers.NewDummyStore(t))
require.Nil(t, err)
actualEF := index.searchTimeEF(test.limit)
assert.Equal(t, test.expectedEf, actualEF)
require.Nil(t, index.Drop(context.Background()))
})
}
}