github.com/matrixorigin/matrixone@v0.7.0/pkg/vm/engine/tae/index/tree_test.go (about) 1 // Copyright 2021 Matrix Origin 2 // 3 // Licensed under the Apache License, Version 2.0 (the "License"); 4 // you may not use this file except in compliance with the License. 5 // You may obtain a copy of the License at 6 // 7 // http://www.apache.org/licenses/LICENSE-2.0 8 // 9 // Unless required by applicable law or agreed to in writing, software 10 // distributed under the License is distributed on an "AS IS" BASIS, 11 // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 12 // See the License for the specific language governing permissions and 13 // limitations under the License. 14 15 package index 16 17 import ( 18 "strconv" 19 "testing" 20 21 "github.com/matrixorigin/matrixone/pkg/container/types" 22 "github.com/matrixorigin/matrixone/pkg/vm/engine/tae/containers" 23 "github.com/matrixorigin/matrixone/pkg/vm/engine/tae/testutils" 24 "github.com/stretchr/testify/require" 25 ) 26 27 func TestARTIndexNumeric(t *testing.T) { 28 defer testutils.AfterTest(t)() 29 testutils.EnsureNoLeak(t) 30 typ := types.Type{Oid: types.T_int32} 31 idx := NewSimpleARTMap(typ) 32 33 var err error 34 var rows []uint32 35 _, err = idx.Search(int32(0)) 36 require.Error(t, err) 37 38 var vecs []containers.Vector 39 for i := 0; i < 10; i++ { 40 vec := containers.MockVector2(typ, 100, i*100) 41 vecs = append(vecs, vec) 42 defer vec.Close() 43 } 44 45 _, err = idx.Search(int32(55)) 46 require.Error(t, err) 47 48 ctx := new(KeysCtx) 49 ctx.Count = 100 50 ctx.Keys = vecs[0] 51 err = idx.BatchInsert(ctx, uint32(0)) 52 require.NoError(t, err) 53 54 rows, err = idx.Search(int32(55)) 55 require.NoError(t, err) 56 require.Equal(t, uint32(55), rows[0]) 57 58 _, err = idx.Search(int32(100)) 59 require.ErrorIs(t, err, ErrNotFound) 60 61 ctx = new(KeysCtx) 62 ctx.Count = 100 63 ctx.Keys = vecs[0] 64 err = idx.BatchInsert(ctx, uint32(100)) 65 require.NoError(t, err) 66 67 ctx.Keys = vecs[1] 68 err = idx.BatchInsert(ctx, uint32(100)) 69 require.NoError(t, err) 70 71 rows, err = idx.Search(int32(123)) 72 require.NoError(t, err) 73 require.Equal(t, uint32(123), rows[0]) 74 75 _, err = idx.Search(int32(233)) 76 require.ErrorIs(t, err, ErrNotFound) 77 78 err = idx.Insert(int32(55), uint32(55)) 79 require.NoError(t, err) 80 81 rows, err = idx.Search(int32(55)) 82 require.NoError(t, err) 83 require.Equal(t, uint32(55), rows[0]) 84 85 } 86 87 func TestArtIndexString(t *testing.T) { 88 defer testutils.AfterTest(t)() 89 testutils.EnsureNoLeak(t) 90 typ := types.Type{Oid: types.T_varchar, Width: types.MaxVarcharLen} 91 idx := NewSimpleARTMap(typ) 92 93 var err error 94 var rows []uint32 95 _, err = idx.Search([]byte(strconv.Itoa(0))) 96 require.Error(t, err) 97 98 var vecs []containers.Vector 99 for i := 0; i < 10; i++ { 100 vec := containers.MockVector2(typ, 100, i*100) 101 vecs = append(vecs, vec) 102 defer vec.Close() 103 } 104 105 _, err = idx.Search([]byte(strconv.Itoa(55))) 106 require.ErrorIs(t, err, ErrNotFound) 107 108 ctx := new(KeysCtx) 109 ctx.Keys = vecs[0] 110 ctx.Count = 100 111 err = idx.BatchInsert(ctx, uint32(0)) 112 require.NoError(t, err) 113 t.Log(idx.String()) 114 115 rows, err = idx.Search([]byte(strconv.Itoa(55))) 116 require.NoError(t, err) 117 require.Equal(t, uint32(55), rows[0]) 118 119 _, err = idx.Search([]byte(strconv.Itoa(100))) 120 require.ErrorIs(t, err, ErrNotFound) 121 122 err = idx.BatchInsert(ctx, uint32(100)) 123 require.NoError(t, err) 124 125 ctx.Keys = vecs[1] 126 err = idx.BatchInsert(ctx, uint32(100)) 127 require.NoError(t, err) 128 129 rows, err = idx.Search([]byte(strconv.Itoa(123))) 130 require.NoError(t, err) 131 require.Equal(t, uint32(123), rows[0]) 132 133 _, err = idx.Search([]byte(strconv.Itoa(233))) 134 require.ErrorIs(t, err, ErrNotFound) 135 }