github.com/matrixorigin/matrixone@v0.7.0/pkg/sql/plan/function/builtin/multi/replace_test.go (about)

     1  // Copyright 2022 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 multi
    16  
    17  import (
    18  	"fmt"
    19  	"testing"
    20  
    21  	"github.com/matrixorigin/matrixone/pkg/container/vector"
    22  	"github.com/matrixorigin/matrixone/pkg/testutil"
    23  	"github.com/stretchr/testify/require"
    24  )
    25  
    26  func TestReplace(t *testing.T) {
    27  	testCases := []arg{
    28  		{
    29  			info: "Single string case1",
    30  			vs: []*vector.Vector{
    31  				testutil.MakeVarcharVector([]string{"abc"}, nil),
    32  				testutil.MakeVarcharVector([]string{"a"}, nil),
    33  				testutil.MakeVarcharVector([]string{"d"}, nil),
    34  			},
    35  			match:  true,
    36  			err:    false,
    37  			expect: testutil.MakeVarcharVector([]string{"dbc"}, nil),
    38  		},
    39  
    40  		{
    41  			info: "Single string case2",
    42  			vs: []*vector.Vector{
    43  				testutil.MakeVarcharVector([]string{".*.*.*"}, nil),
    44  				testutil.MakeVarcharVector([]string{".*"}, nil),
    45  				testutil.MakeVarcharVector([]string{"n"}, nil),
    46  			},
    47  			match:  true,
    48  			err:    false,
    49  			expect: testutil.MakeVarcharVector([]string{"nnn"}, nil),
    50  		},
    51  
    52  		{
    53  			info: "Single string case3",
    54  			vs: []*vector.Vector{
    55  				testutil.MakeVarcharVector([]string{"当时明月 在 当时"}, nil),
    56  				testutil.MakeVarcharVector([]string{"当时"}, nil),
    57  				testutil.MakeVarcharVector([]string{"此时"}, nil),
    58  			},
    59  			match:  true,
    60  			err:    false,
    61  			expect: testutil.MakeVarcharVector([]string{"此时明月 在 此时"}, nil),
    62  		},
    63  
    64  		{
    65  			info: "Single string case4",
    66  			vs: []*vector.Vector{
    67  				testutil.MakeVarcharVector([]string{"123"}, nil),
    68  				testutil.MakeVarcharVector([]string{""}, nil),
    69  				testutil.MakeVarcharVector([]string{"n"}, nil),
    70  			},
    71  			match:  true,
    72  			err:    false,
    73  			expect: testutil.MakeVarcharVector([]string{"123"}, nil),
    74  		},
    75  
    76  		{
    77  			info: "Multi string case1",
    78  			vs: []*vector.Vector{
    79  				testutil.MakeVarcharVector([]string{"firststring", "secondstring"}, nil),
    80  				testutil.MakeVarcharVector([]string{"st"}, nil),
    81  				testutil.MakeVarcharVector([]string{"re"}, nil),
    82  			},
    83  			match:  true,
    84  			err:    false,
    85  			expect: testutil.MakeVarcharVector([]string{"firrerering", "secondrering"}, nil),
    86  		},
    87  
    88  		{
    89  			info: "Multi string case2",
    90  			vs: []*vector.Vector{
    91  				testutil.MakeVarcharVector([]string{"Oneinput"}, nil),
    92  				testutil.MakeVarcharVector([]string{"n"}, nil),
    93  				testutil.MakeVarcharVector([]string{"e", "b"}, nil),
    94  			},
    95  			match:  true,
    96  			err:    false,
    97  			expect: testutil.MakeVarcharVector([]string{"Oeeieput", "Obeibput"}, nil),
    98  		},
    99  
   100  		{
   101  			info: "Multi string case3",
   102  			vs: []*vector.Vector{
   103  				testutil.MakeVarcharVector([]string{"aaabbb"}, nil),
   104  				testutil.MakeVarcharVector([]string{"a", "b"}, nil),
   105  				testutil.MakeVarcharVector([]string{"n"}, nil),
   106  			},
   107  			match:  true,
   108  			err:    false,
   109  			expect: testutil.MakeVarcharVector([]string{"nnnbbb", "aaannn"}, nil),
   110  		},
   111  
   112  		{
   113  			info: "Multi string case4",
   114  			vs: []*vector.Vector{
   115  				testutil.MakeVarcharVector([]string{"Matrix", "Origin"}, nil),
   116  				testutil.MakeVarcharVector([]string{"a", "i"}, nil),
   117  				testutil.MakeVarcharVector([]string{"b", "d"}, nil),
   118  			},
   119  			match:  true,
   120  			err:    false,
   121  			expect: testutil.MakeVarcharVector([]string{"Mbtrix", "Ordgdn"}, nil),
   122  		},
   123  
   124  		{
   125  			info: "Scalar case1",
   126  			vs: []*vector.Vector{
   127  				testutil.MakeScalarVarchar("cool", 1),
   128  				testutil.MakeVarcharVector([]string{"o"}, nil),
   129  				testutil.MakeVarcharVector([]string{"a"}, nil),
   130  			},
   131  			match:  true,
   132  			err:    false,
   133  			expect: testutil.MakeVarcharVector([]string{"caal"}, nil),
   134  		},
   135  	}
   136  
   137  	proc := testutil.NewProcess()
   138  	for i, tc := range testCases {
   139  		t.Run(tc.info, func(t *testing.T) {
   140  			resultVector, rerr := Replace(tc.vs, proc)
   141  			if tc.err {
   142  				require.Errorf(t, rerr, fmt.Sprintf("case '%d' expected error, but no error happens", i))
   143  			} else {
   144  				require.NoError(t, rerr)
   145  				require.True(t, testutil.CompareVectors(tc.expect, resultVector), "got vector is different with expected")
   146  			}
   147  		})
   148  	}
   149  }