github.com/matrixorigin/matrixone@v1.2.0/pkg/container/vector/functionTool_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 vector
    16  
    17  import (
    18  	"fmt"
    19  	"github.com/matrixorigin/matrixone/pkg/common/mpool"
    20  	"github.com/matrixorigin/matrixone/pkg/container/types"
    21  	"github.com/stretchr/testify/require"
    22  	"testing"
    23  )
    24  
    25  func BenchmarkGetStrValue1(b *testing.B) {
    26  	mp := mpool.MustNewZeroNoFixed()
    27  
    28  	vecSize := uint64(50000)
    29  	vec := NewVec(types.T_varchar.ToType())
    30  	for i := uint64(0); i < vecSize; i++ {
    31  		err := appendOneBytes(vec, []byte("x"), false, mp)
    32  		require.NoError(b, err)
    33  	}
    34  
    35  	g1 := GenerateFunctionStrParameter(vec)
    36  
    37  	vv, nn := []byte(nil), false
    38  	for i := 0; i < b.N; i++ {
    39  		for j := uint64(0); j < vecSize; j++ {
    40  			v, n := g1.GetStrValue(j)
    41  			vv, nn = v, n
    42  		}
    43  	}
    44  	_, _ = vv, nn
    45  }
    46  
    47  func BenchmarkGetStrValue2(b *testing.B) {
    48  	mp := mpool.MustNewZeroNoFixed()
    49  
    50  	vecSize := uint64(50000)
    51  	t2 := types.T_varchar.ToType()
    52  	t2.Width = 10
    53  	vec2 := NewVec(t2)
    54  	for i := uint64(0); i < vecSize; i++ {
    55  		err := appendOneBytes(vec2, []byte("x"), false, mp)
    56  		require.NoError(b, err)
    57  	}
    58  
    59  	g2 := GenerateFunctionStrParameter(vec2)
    60  
    61  	vv, nn := []byte(nil), false
    62  	for i := 0; i < b.N; i++ {
    63  		for j := uint64(0); j < vecSize; j++ {
    64  			v, n := g2.GetStrValue(j)
    65  			vv, nn = v, n
    66  		}
    67  	}
    68  	_, _ = vv, nn
    69  }
    70  
    71  func TestPreExtendAndReset(t *testing.T) {
    72  	mp := mpool.MustNewZeroNoFixed()
    73  
    74  	wrapper := NewFunctionResultWrapper(
    75  		NewVec,
    76  		func(vec *Vector) {
    77  			vec.Free(mp)
    78  		},
    79  		types.T_bool.ToType(),
    80  		mp)
    81  
    82  	result := MustFunctionResult[bool](wrapper)
    83  	fmt.Printf("length is %d, capacity is %d\n", result.vec.Length(), result.vec.Capacity())
    84  
    85  	require.NoError(t, wrapper.PreExtendAndReset(10))
    86  	require.Equal(t, 10, len(result.cols))
    87  	require.Equal(t, 10, result.vec.Length())
    88  	fmt.Printf("length is %d, capacity is %d\n", result.vec.Length(), result.vec.Capacity())
    89  
    90  	lastCapacity := result.vec.Capacity()
    91  	if lastCapacity > 20 {
    92  		require.NoError(t, wrapper.PreExtendAndReset(20))
    93  		require.Equal(t, 20, len(result.cols))
    94  		require.Equal(t, 20, result.vec.Length())
    95  		require.Equal(t, lastCapacity, result.vec.Capacity())
    96  	} else if lastCapacity > 11 {
    97  		nextLength := lastCapacity - 1
    98  		require.NoError(t, wrapper.PreExtendAndReset(nextLength))
    99  		require.Equal(t, nextLength, len(result.cols))
   100  		require.Equal(t, nextLength, result.vec.Length())
   101  		require.Equal(t, lastCapacity, result.vec.Capacity())
   102  	} else {
   103  		require.NoError(t, wrapper.PreExtendAndReset(20))
   104  		require.Equal(t, 20, len(result.cols))
   105  		require.Equal(t, 20, result.vec.Length())
   106  	}
   107  	fmt.Printf("length is %d, capacity is %d\n", result.vec.Length(), result.vec.Capacity())
   108  
   109  	wrapper.Free()
   110  	require.Equal(t, int64(0), mp.CurrNB())
   111  }