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 }