github.com/weaviate/weaviate@v1.24.6/adapters/repos/db/vector/compressionhelpers/tile_encoder_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 "math" 18 "math/rand" 19 "testing" 20 21 "github.com/stretchr/testify/assert" 22 "github.com/weaviate/weaviate/adapters/repos/db/vector/compressionhelpers" 23 ) 24 25 func Test_NoRaceTileEncoderEncode(t *testing.T) { 26 encoder := compressionhelpers.NewTileEncoder(4, 0, compressionhelpers.LogNormalEncoderDistribution) 27 for i := 0; i < 1000000; i++ { 28 encoder.Add([]float32{float32(rand.NormFloat64() + 100)}) 29 } 30 encoder.Fit([][]float32{}) 31 assert.Equal(t, encoder.Encode([]float32{0.1}), byte(0)) 32 assert.Equal(t, encoder.Encode([]float32{100}), byte(8)) 33 assert.Equal(t, encoder.Encode([]float32{1000}), byte(16)) 34 } 35 36 func Test_NoRaceTileEncoderCentroids(t *testing.T) { 37 encoder := compressionhelpers.NewTileEncoder(4, 0, compressionhelpers.LogNormalEncoderDistribution) 38 for i := 0; i < 1000000; i++ { 39 encoder.Add([]float32{float32(rand.NormFloat64() + 100)}) 40 } 41 encoder.Fit([][]float32{}) 42 assert.Equal(t, math.Round(float64(encoder.Centroid(0)[0])), 98.0) 43 assert.Equal(t, math.Round(float64(encoder.Centroid(2)[0])), 99.0) 44 assert.Equal(t, math.Round(float64(encoder.Centroid(14)[0])), 101.0) 45 } 46 47 func Test_NoRaceNormalTileEncoderEncode(t *testing.T) { 48 encoder := compressionhelpers.NewTileEncoder(4, 0, compressionhelpers.NormalEncoderDistribution) 49 for i := 0; i < 1000000; i++ { 50 encoder.Add([]float32{float32(rand.NormFloat64())}) 51 } 52 encoder.Fit([][]float32{}) 53 assert.Equal(t, encoder.Encode([]float32{0.1}), byte(8)) 54 assert.Equal(t, encoder.Encode([]float32{100}), byte(16)) 55 assert.Equal(t, encoder.Encode([]float32{1000}), byte(16)) 56 } 57 58 func Test_NoRaceNormalTileEncoderCentroids(t *testing.T) { 59 encoder := compressionhelpers.NewTileEncoder(4, 0, compressionhelpers.NormalEncoderDistribution) 60 for i := 0; i < 1000000; i++ { 61 encoder.Add([]float32{float32(rand.NormFloat64())}) 62 } 63 encoder.Fit([][]float32{}) 64 assert.Equal(t, math.Round(float64(encoder.Centroid(0)[0])), -2.0) 65 assert.Equal(t, math.Round(float64(encoder.Centroid(8)[0])), 0.0) 66 assert.Equal(t, math.Round(float64(encoder.Centroid(15)[0])), 2.0) 67 }