github.com/weaviate/weaviate@v1.24.6/adapters/repos/db/inverted/prop_value_pairs_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 package inverted 13 14 import ( 15 "testing" 16 17 "github.com/stretchr/testify/assert" 18 "github.com/stretchr/testify/require" 19 "github.com/weaviate/sroar" 20 "github.com/weaviate/weaviate/adapters/repos/db/roaringset" 21 "github.com/weaviate/weaviate/entities/filters" 22 ) 23 24 func TestPropValuePairs_Merging(t *testing.T) { 25 t.Run("always creates new underlying bitmap", func(t *testing.T) { 26 type testCase struct { 27 name string 28 29 bitmaps []*sroar.Bitmap 30 operator filters.Operator 31 32 expectedIds []uint64 33 } 34 35 testCases := []testCase{ 36 { 37 name: "AND; different sets", 38 39 bitmaps: []*sroar.Bitmap{ 40 roaringset.NewBitmap(7, 8, 9, 10, 11), 41 roaringset.NewBitmap(1, 3, 5, 7, 9, 11), 42 roaringset.NewBitmap(1, 3, 5, 7, 9), 43 }, 44 operator: filters.OperatorAnd, 45 46 expectedIds: []uint64{7, 9}, 47 }, 48 { 49 name: "OR; different sets", 50 51 bitmaps: []*sroar.Bitmap{ 52 roaringset.NewBitmap(7, 8, 9, 10, 11), 53 roaringset.NewBitmap(1, 3, 5, 7, 9, 11), 54 roaringset.NewBitmap(1, 3, 5, 7, 9), 55 }, 56 operator: filters.OperatorOr, 57 58 expectedIds: []uint64{1, 3, 5, 7, 8, 9, 10, 11}, 59 }, 60 { 61 name: "AND; same sets", 62 63 bitmaps: []*sroar.Bitmap{ 64 roaringset.NewBitmap(7, 8, 9, 10, 11), 65 roaringset.NewBitmap(7, 8, 9, 10, 11), 66 roaringset.NewBitmap(7, 8, 9, 10, 11), 67 }, 68 operator: filters.OperatorAnd, 69 70 expectedIds: []uint64{7, 8, 9, 10, 11}, 71 }, 72 { 73 name: "OR; same sets", 74 75 bitmaps: []*sroar.Bitmap{ 76 roaringset.NewBitmap(7, 8, 9, 10, 11), 77 roaringset.NewBitmap(7, 8, 9, 10, 11), 78 roaringset.NewBitmap(7, 8, 9, 10, 11), 79 }, 80 operator: filters.OperatorOr, 81 82 expectedIds: []uint64{7, 8, 9, 10, 11}, 83 }, 84 } 85 86 for _, tc := range testCases { 87 t.Run(tc.name, func(t *testing.T) { 88 pv := &propValuePair{ 89 operator: tc.operator, 90 children: make([]*propValuePair, len(tc.bitmaps)), 91 } 92 for i := range tc.bitmaps { 93 pv.children[i] = &propValuePair{ 94 operator: filters.OperatorEqual, 95 docIDs: docBitmap{ 96 docIDs: tc.bitmaps[i], 97 }, 98 } 99 } 100 101 dbm, err := pv.mergeDocIDs() 102 103 require.Nil(t, err) 104 assert.ElementsMatch(t, tc.expectedIds, dbm.IDs()) 105 assert.False(t, tc.bitmaps[0] == dbm.docIDs) 106 assert.False(t, tc.bitmaps[1] == dbm.docIDs) 107 assert.False(t, tc.bitmaps[2] == dbm.docIDs) 108 }) 109 } 110 }) 111 }