github.com/matrixorigin/matrixone@v0.7.0/pkg/sql/plan/function/builtin/unary/space_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 unary
    16  
    17  import (
    18  	"testing"
    19  
    20  	"github.com/matrixorigin/matrixone/pkg/container/nulls"
    21  	"github.com/matrixorigin/matrixone/pkg/container/types"
    22  	"github.com/matrixorigin/matrixone/pkg/container/vector"
    23  	"github.com/matrixorigin/matrixone/pkg/testutil"
    24  	"github.com/stretchr/testify/require"
    25  )
    26  
    27  func makeInt64Vector(values []int64, nsp []uint64) *vector.Vector {
    28  	ns := nulls.Build(len(values), nsp...)
    29  	vec := vector.NewWithFixed(types.T_int64.ToType(), values, ns, testutil.TestUtilMp)
    30  	return vec
    31  }
    32  
    33  func makeUint64Vector(values []uint64, nsp []uint64) *vector.Vector {
    34  	ns := nulls.Build(len(values), nsp...)
    35  	vec := vector.NewWithFixed(types.T_uint64.ToType(), values, ns, testutil.TestUtilMp)
    36  	return vec
    37  }
    38  
    39  func makeFloat64Vector(values []float64, nsp []uint64) *vector.Vector {
    40  	ns := nulls.Build(len(values), nsp...)
    41  	vec := vector.NewWithFixed(types.T_float64.ToType(), values, ns, testutil.TestUtilMp)
    42  	return vec
    43  }
    44  
    45  func TestSpaceUint64(t *testing.T) {
    46  	inputVector := makeUint64Vector([]uint64{1, 2, 3, 0, 8000}, []uint64{4})
    47  	proc := testutil.NewProc()
    48  	output, err := SpaceNumber[uint64]([]*vector.Vector{inputVector}, proc)
    49  	require.NoError(t, err)
    50  	require.Equal(t, output.GetString(0), " ")
    51  	require.Equal(t, output.GetString(1), "  ")
    52  	require.Equal(t, output.GetString(2), "   ")
    53  	require.Equal(t, output.GetString(3), "")
    54  	require.True(t, nulls.Contains(output.Nsp, 4))
    55  }
    56  
    57  func TestSpaceInt64(t *testing.T) {
    58  	inputVector := makeInt64Vector([]int64{1, 2, 3, 0, -1, 8000}, []uint64{4})
    59  	proc := testutil.NewProc()
    60  	output, err := SpaceNumber[int64]([]*vector.Vector{inputVector}, proc)
    61  	require.NoError(t, err)
    62  	require.Equal(t, output.GetString(0), " ")
    63  	require.Equal(t, output.GetString(1), "  ")
    64  	require.Equal(t, output.GetString(2), "   ")
    65  	require.Equal(t, output.GetString(3), "")
    66  	// XXX should have failed instead returning null
    67  	require.True(t, nulls.Contains(output.Nsp, 4))
    68  }
    69  
    70  func TestSpaceFloat64(t *testing.T) {
    71  	inputVector := makeFloat64Vector([]float64{1.4, 1.6, 3.3, 0, -1, 8000}, []uint64{4})
    72  	proc := testutil.NewProc()
    73  	output, err := SpaceNumber[float64]([]*vector.Vector{inputVector}, proc)
    74  	require.NoError(t, err)
    75  	require.Equal(t, output.GetString(0), " ")
    76  	require.Equal(t, output.GetString(1), " ")
    77  	require.Equal(t, output.GetString(2), "   ")
    78  	require.Equal(t, output.GetString(3), "")
    79  	// XXX should have failed instead returning null
    80  	require.True(t, nulls.Contains(output.Nsp, 4))
    81  }