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  }