github.com/weaviate/weaviate@v1.24.6/adapters/repos/db/vector/compressionhelpers/compression_test.go (about) 1 // _ _ 2 // __ _____ __ ___ ___ __ _| |_ ___ 3 // \ \ /\ / / _ \/ _` \ \ / / |/ _` | __/ _ \ 4 // \ V V / __/ (_| |\ V /| | (_| | || __/ 5 // \_/\_/ \___|\__,_| \_/ |_|\__,_|\__\___| 6 // 7 // Copyright © 2016 - 2024 Weaviate B.V. All rights reserved. 8 // 9 // CONTACT: hello@weaviate.io 10 // 11 12 //go:build !race 13 14 package compressionhelpers_test 15 16 import ( 17 "context" 18 "testing" 19 20 "github.com/stretchr/testify/assert" 21 "github.com/weaviate/weaviate/adapters/repos/db/vector/compressionhelpers" 22 "github.com/weaviate/weaviate/adapters/repos/db/vector/hnsw/distancer" 23 testinghelpers "github.com/weaviate/weaviate/adapters/repos/db/vector/testinghelpers" 24 ) 25 26 func Test_NoRaceQuantizedVectorCompressor(t *testing.T) { 27 t.Run("loading and deleting data works", func(t *testing.T) { 28 compressor, err := compressionhelpers.NewBQCompressor(distancer.NewCosineDistanceProvider(), 1e12, nil, testinghelpers.NewDummyStore(t)) 29 assert.Nil(t, err) 30 compressor.Preload(1, []float32{-0.5, 0.5}) 31 vec, err := compressor.DistanceBetweenCompressedVectorsFromIDs(context.Background(), 1, 2) 32 assert.Equal(t, float32(0), vec) 33 assert.NotNil(t, err) 34 35 compressor.Preload(2, []float32{0.25, 0.7}) 36 compressor.Preload(3, []float32{0.5, 0.5}) 37 compressor.Delete(context.Background(), 1) 38 39 _, err = compressor.DistanceBetweenCompressedVectorsFromIDs(context.Background(), 1, 2) 40 assert.NotNil(t, err) 41 }) 42 43 t.Run("distance are right when using BQ", func(t *testing.T) { 44 compressor, err := compressionhelpers.NewBQCompressor(distancer.NewCosineDistanceProvider(), 1e12, nil, testinghelpers.NewDummyStore(t)) 45 assert.Nil(t, err) 46 compressor.Preload(1, []float32{-0.5, 0.5}) 47 compressor.Preload(2, []float32{0.25, 0.7}) 48 compressor.Preload(3, []float32{0.5, 0.5}) 49 50 d, err := compressor.DistanceBetweenCompressedVectorsFromIDs(context.Background(), 1, 2) 51 assert.Nil(t, err) 52 assert.Equal(t, float32(1), d) 53 54 d, err = compressor.DistanceBetweenCompressedVectorsFromIDs(context.Background(), 1, 3) 55 assert.Nil(t, err) 56 assert.Equal(t, float32(1), d) 57 58 d, err = compressor.DistanceBetweenCompressedVectorsFromIDs(context.Background(), 2, 3) 59 assert.Nil(t, err) 60 assert.Equal(t, float32(0), d) 61 }) 62 63 t.Run("distance are right when using BQDistancer", func(t *testing.T) { 64 compressor, err := compressionhelpers.NewBQCompressor(distancer.NewCosineDistanceProvider(), 1e12, nil, testinghelpers.NewDummyStore(t)) 65 assert.Nil(t, err) 66 compressor.Preload(1, []float32{-0.5, 0.5}) 67 compressor.Preload(2, []float32{0.25, 0.7}) 68 compressor.Preload(3, []float32{0.5, 0.5}) 69 distancer, returnFn := compressor.NewDistancer([]float32{0.1, -0.2}) 70 defer returnFn() 71 72 d, _, err := distancer.DistanceToNode(1) 73 assert.Nil(t, err) 74 assert.Equal(t, float32(2), d) 75 76 d, _, err = distancer.DistanceToNode(2) 77 assert.Nil(t, err) 78 assert.Equal(t, float32(1), d) 79 80 d, _, err = distancer.DistanceToNode(3) 81 assert.Nil(t, err) 82 assert.Equal(t, float32(1), d) 83 84 d, _, err = distancer.DistanceToFloat([]float32{0.8, -0.2}) 85 assert.Nil(t, err) 86 assert.Equal(t, float32(0.88), d) 87 }) 88 89 t.Run("distance are right when using BQDistancer to compressed node", func(t *testing.T) { 90 compressor, err := compressionhelpers.NewBQCompressor(distancer.NewCosineDistanceProvider(), 1e12, nil, testinghelpers.NewDummyStore(t)) 91 assert.Nil(t, err) 92 compressor.Preload(1, []float32{-0.5, 0.5}) 93 compressor.Preload(2, []float32{0.25, 0.7}) 94 compressor.Preload(3, []float32{0.5, 0.5}) 95 distancer, err := compressor.NewDistancerFromID(1) 96 97 assert.Nil(t, err) 98 99 d, _, err := distancer.DistanceToNode(1) 100 assert.Nil(t, err) 101 assert.Equal(t, float32(0), d) 102 103 d, _, err = distancer.DistanceToNode(2) 104 assert.Nil(t, err) 105 assert.Equal(t, float32(1), d) 106 107 d, _, err = distancer.DistanceToNode(3) 108 assert.Nil(t, err) 109 assert.Equal(t, float32(1), d) 110 111 d, _, err = distancer.DistanceToFloat([]float32{0.8, -0.2}) 112 assert.Nil(t, err) 113 assert.Equal(t, float32(2), d) 114 }) 115 }