github.com/whtcorpsinc/MilevaDB-Prod@v0.0.0-20211104133533-f57f4be3b597/dbs/memristed/memex/builtin_other_vec_generated_test.go (about)

     1  // Copyright 2020 WHTCORPS INC, Inc.
     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  // See the License for the specific language governing permissions and
    12  // limitations under the License.
    13  
    14  // Code generated by go generate in memex/generator; DO NOT EDIT.
    15  
    16  package memex
    17  
    18  import (
    19  	"fmt"
    20  	"math/rand"
    21  	"testing"
    22  	"time"
    23  
    24  	. "github.com/whtcorpsinc/check"
    25  	"github.com/whtcorpsinc/BerolinaSQL/ast"
    26  	"github.com/whtcorpsinc/BerolinaSQL/allegrosql"
    27  	"github.com/whtcorpsinc/milevadb/types"
    28  	"github.com/whtcorpsinc/milevadb/types/json"
    29  )
    30  
    31  type inGener struct {
    32  	defaultGener
    33  }
    34  
    35  func (g inGener) gen() interface{} {
    36  	if rand.Float64() < g.nullRation {
    37  		return nil
    38  	}
    39  	randNum := rand.Int63n(10)
    40  	switch g.eType {
    41  	case types.ETInt:
    42  		if rand.Float64() < 0.5 {
    43  			return -randNum
    44  		}
    45  		return randNum
    46  	case types.ETReal:
    47  		if rand.Float64() < 0.5 {
    48  			return -float64(randNum)
    49  		}
    50  		return float64(randNum)
    51  	case types.ETDecimal:
    52  		d := new(types.MyDecimal)
    53  		f := float64(randNum * 100000)
    54  		if err := d.FromFloat64(f); err != nil {
    55  			panic(err)
    56  		}
    57  		return d
    58  	case types.ETDatetime, types.ETTimestamp:
    59  		gt := types.FromDate(2020, 11, 2, 22, 00, int(randNum), rand.Intn(1000000))
    60  		t := types.NewTime(gt, convertETType(g.eType), 0)
    61  		return t
    62  	case types.ETDuration:
    63  		return types.Duration{Duration: time.Duration(randNum)}
    64  	case types.ETJson:
    65  		j := new(json.BinaryJSON)
    66  		jsonStr := fmt.Sprintf("{\"key\":%v}", randNum)
    67  		if err := j.UnmarshalJSON([]byte(jsonStr)); err != nil {
    68  			panic(err)
    69  		}
    70  		return *j
    71  	case types.ETString:
    72  		return fmt.Sprint(randNum)
    73  	}
    74  	return randNum
    75  }
    76  
    77  var vecBuiltinOtherGeneratedCases = map[string][]vecExprBenchCase{
    78  	ast.In: {
    79  		// builtinInIntSig
    80  		{
    81  			retEvalType: types.ETInt,
    82  			childrenTypes: []types.EvalType{
    83  				types.ETInt,
    84  				types.ETInt,
    85  				types.ETInt,
    86  				types.ETInt,
    87  			},
    88  			geners: []dataGenerator{
    89  				inGener{*newDefaultGener(0.2, types.ETInt)},
    90  				inGener{*newDefaultGener(0.2, types.ETInt)},
    91  				inGener{*newDefaultGener(0.2, types.ETInt)},
    92  				inGener{*newDefaultGener(0.2, types.ETInt)},
    93  			},
    94  		},
    95  		// builtinInStringSig
    96  		{
    97  			retEvalType: types.ETInt,
    98  			childrenTypes: []types.EvalType{
    99  				types.ETString,
   100  				types.ETString,
   101  				types.ETString,
   102  				types.ETString,
   103  			},
   104  			geners: []dataGenerator{
   105  				inGener{*newDefaultGener(0.2, types.ETString)},
   106  				inGener{*newDefaultGener(0.2, types.ETString)},
   107  				inGener{*newDefaultGener(0.2, types.ETString)},
   108  				inGener{*newDefaultGener(0.2, types.ETString)},
   109  			},
   110  		},
   111  		// builtinInDecimalSig
   112  		{
   113  			retEvalType: types.ETInt,
   114  			childrenTypes: []types.EvalType{
   115  				types.ETDecimal,
   116  				types.ETDecimal,
   117  				types.ETDecimal,
   118  				types.ETDecimal,
   119  			},
   120  			geners: []dataGenerator{
   121  				inGener{*newDefaultGener(0.2, types.ETDecimal)},
   122  				inGener{*newDefaultGener(0.2, types.ETDecimal)},
   123  				inGener{*newDefaultGener(0.2, types.ETDecimal)},
   124  				inGener{*newDefaultGener(0.2, types.ETDecimal)},
   125  			},
   126  		},
   127  		// builtinInRealSig
   128  		{
   129  			retEvalType: types.ETInt,
   130  			childrenTypes: []types.EvalType{
   131  				types.ETReal,
   132  				types.ETReal,
   133  				types.ETReal,
   134  				types.ETReal,
   135  			},
   136  			geners: []dataGenerator{
   137  				inGener{*newDefaultGener(0.2, types.ETReal)},
   138  				inGener{*newDefaultGener(0.2, types.ETReal)},
   139  				inGener{*newDefaultGener(0.2, types.ETReal)},
   140  				inGener{*newDefaultGener(0.2, types.ETReal)},
   141  			},
   142  		},
   143  		// builtinInTimeSig
   144  		{
   145  			retEvalType: types.ETInt,
   146  			childrenTypes: []types.EvalType{
   147  				types.ETDatetime,
   148  				types.ETDatetime,
   149  				types.ETDatetime,
   150  				types.ETDatetime,
   151  			},
   152  			geners: []dataGenerator{
   153  				inGener{*newDefaultGener(0.2, types.ETDatetime)},
   154  				inGener{*newDefaultGener(0.2, types.ETDatetime)},
   155  				inGener{*newDefaultGener(0.2, types.ETDatetime)},
   156  				inGener{*newDefaultGener(0.2, types.ETDatetime)},
   157  			},
   158  		},
   159  		// builtinInDurationSig
   160  		{
   161  			retEvalType: types.ETInt,
   162  			childrenTypes: []types.EvalType{
   163  				types.ETDuration,
   164  				types.ETDuration,
   165  				types.ETDuration,
   166  				types.ETDuration,
   167  			},
   168  			geners: []dataGenerator{
   169  				inGener{*newDefaultGener(0.2, types.ETDuration)},
   170  				inGener{*newDefaultGener(0.2, types.ETDuration)},
   171  				inGener{*newDefaultGener(0.2, types.ETDuration)},
   172  				inGener{*newDefaultGener(0.2, types.ETDuration)},
   173  			},
   174  		},
   175  		// builtinInJSONSig
   176  		{
   177  			retEvalType: types.ETInt,
   178  			childrenTypes: []types.EvalType{
   179  				types.ETJson,
   180  				types.ETJson,
   181  				types.ETJson,
   182  				types.ETJson,
   183  			},
   184  			geners: []dataGenerator{
   185  				inGener{*newDefaultGener(0.2, types.ETJson)},
   186  				inGener{*newDefaultGener(0.2, types.ETJson)},
   187  				inGener{*newDefaultGener(0.2, types.ETJson)},
   188  				inGener{*newDefaultGener(0.2, types.ETJson)},
   189  			},
   190  		},
   191  		// builtinInIntSig with const arguments
   192  		{
   193  			retEvalType: types.ETInt,
   194  			childrenTypes: []types.EvalType{
   195  				types.ETInt,
   196  				types.ETInt, types.ETInt,
   197  			},
   198  			constants: []*Constant{
   199  				nil,
   200  				{Value: types.NewCauset(1), RetType: types.NewFieldType(allegrosql.TypeInt24)},
   201  				{Value: types.NewCauset(2), RetType: types.NewFieldType(allegrosql.TypeInt24)},
   202  			},
   203  		},
   204  		// builtinInStringSig with const arguments
   205  		{
   206  			retEvalType: types.ETInt,
   207  			childrenTypes: []types.EvalType{
   208  				types.ETString,
   209  				types.ETString, types.ETString,
   210  			},
   211  			constants: []*Constant{
   212  				nil,
   213  				{Value: types.NewStringCauset("aaaa"), RetType: types.NewFieldType(allegrosql.TypeString)},
   214  				{Value: types.NewStringCauset("bbbb"), RetType: types.NewFieldType(allegrosql.TypeString)},
   215  			},
   216  		},
   217  		// builtinInDecimalSig with const arguments
   218  		{
   219  			retEvalType: types.ETInt,
   220  			childrenTypes: []types.EvalType{
   221  				types.ETDecimal,
   222  				types.ETDecimal, types.ETDecimal,
   223  			},
   224  			constants: []*Constant{
   225  				nil,
   226  				{Value: types.NewDecimalCauset(types.NewDecFromInt(10)), RetType: types.NewFieldType(allegrosql.TypeNewDecimal)},
   227  				{Value: types.NewDecimalCauset(types.NewDecFromInt(20)), RetType: types.NewFieldType(allegrosql.TypeNewDecimal)},
   228  			},
   229  		},
   230  		// builtinInRealSig with const arguments
   231  		{
   232  			retEvalType: types.ETInt,
   233  			childrenTypes: []types.EvalType{
   234  				types.ETReal,
   235  				types.ETReal, types.ETReal,
   236  			},
   237  			constants: []*Constant{
   238  				nil,
   239  				{Value: types.NewFloat64Causet(0.1), RetType: types.NewFieldType(allegrosql.TypeFloat)},
   240  				{Value: types.NewFloat64Causet(0.2), RetType: types.NewFieldType(allegrosql.TypeFloat)},
   241  			},
   242  		},
   243  		// builtinInTimeSig with const arguments
   244  		{
   245  			retEvalType: types.ETInt,
   246  			childrenTypes: []types.EvalType{
   247  				types.ETDatetime,
   248  				types.ETDatetime, types.ETDatetime,
   249  			},
   250  			constants: []*Constant{
   251  				nil,
   252  				{Value: types.NewTimeCauset(dateTimeFromString("2020-01-01")), RetType: types.NewFieldType(allegrosql.TypeDatetime)},
   253  				{Value: types.NewTimeCauset(dateTimeFromString("2020-01-01")), RetType: types.NewFieldType(allegrosql.TypeDatetime)},
   254  			},
   255  		},
   256  		// builtinInDurationSig with const arguments
   257  		{
   258  			retEvalType: types.ETInt,
   259  			childrenTypes: []types.EvalType{
   260  				types.ETDuration,
   261  				types.ETDuration, types.ETDuration,
   262  			},
   263  			constants: []*Constant{
   264  				nil,
   265  				{Value: types.NewDurationCauset(types.Duration{Duration: time.Duration(1000)}), RetType: types.NewFieldType(allegrosql.TypeDuration)},
   266  				{Value: types.NewDurationCauset(types.Duration{Duration: time.Duration(2000)}), RetType: types.NewFieldType(allegrosql.TypeDuration)},
   267  			},
   268  		},
   269  		// builtinInJSONSig with const arguments
   270  		{
   271  			retEvalType: types.ETInt,
   272  			childrenTypes: []types.EvalType{
   273  				types.ETJson,
   274  				types.ETJson, types.ETJson,
   275  			},
   276  			constants: []*Constant{
   277  				nil,
   278  				{Value: types.NewJSONCauset(json.CreateBinary("aaaa")), RetType: types.NewFieldType(allegrosql.TypeJSON)},
   279  				{Value: types.NewJSONCauset(json.CreateBinary("bbbb")), RetType: types.NewFieldType(allegrosql.TypeJSON)},
   280  			},
   281  		},
   282  	},
   283  }
   284  
   285  func (s *testEvaluatorSuite) TestVectorizedBuiltinOtherEvalOneVecGenerated(c *C) {
   286  	testVectorizedEvalOneVec(c, vecBuiltinOtherGeneratedCases)
   287  }
   288  
   289  func (s *testEvaluatorSuite) TestVectorizedBuiltinOtherFuncGenerated(c *C) {
   290  	testVectorizedBuiltinFunc(c, vecBuiltinOtherGeneratedCases)
   291  }
   292  
   293  func BenchmarkVectorizedBuiltinOtherEvalOneVecGenerated(b *testing.B) {
   294  	benchmarkVectorizedEvalOneVec(b, vecBuiltinOtherGeneratedCases)
   295  }
   296  
   297  func BenchmarkVectorizedBuiltinOtherFuncGenerated(b *testing.B) {
   298  	benchmarkVectorizedBuiltinFunc(b, vecBuiltinOtherGeneratedCases)
   299  }