github.com/matrixorigin/matrixone@v0.7.0/pkg/container/nulls/nulls_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 nulls
    16  
    17  import (
    18  	"testing"
    19  
    20  	"github.com/matrixorigin/matrixone/pkg/common/bitmap"
    21  	"github.com/stretchr/testify/assert"
    22  )
    23  
    24  func TestOr(t *testing.T) {
    25  	t.Run("or test", func(t *testing.T) {
    26  		n := &Nulls{Np: bitmap.New(4000)}
    27  		for k := uint64(0); k < 4000; k++ {
    28  			n.Np.Add(k)
    29  		}
    30  		m := &Nulls{Np: bitmap.New(8000)}
    31  		for k := uint64(4000); k < 8000; k++ {
    32  			m.Np.Add(k)
    33  		}
    34  		result := &Nulls{}
    35  		Or(n, m, result)
    36  		assert.Equal(t, Length(n)+Length(m), Length(result))
    37  		m1 := &Nulls{}
    38  		result = &Nulls{}
    39  		Or(n, m1, result)
    40  		assert.Equal(t, Length(n), Length(result))
    41  		result = &Nulls{}
    42  		Or(m1, n, result)
    43  		assert.Equal(t, Length(n), Length(result))
    44  	})
    45  }
    46  
    47  func TestReset(t *testing.T) {
    48  	t.Run("reset test", func(t *testing.T) {
    49  		n := &Nulls{Np: bitmap.New(2000)}
    50  		for i := uint64(0); i < 2000; i += 7 {
    51  			n.Np.Add(i)
    52  		}
    53  		Reset(n)
    54  		assert.EqualValues(t, 0, Length(n))
    55  	})
    56  }
    57  
    58  func TestAny(t *testing.T) {
    59  	t.Run("Any test", func(t *testing.T) {
    60  		n := Nulls{}
    61  		assert.EqualValues(t, false, Any(&n))
    62  		n = Nulls{Np: bitmap.New(2000)}
    63  		for i := uint64(0); i < 2000; i += 7 {
    64  			n.Np.Add(i)
    65  		}
    66  		assert.EqualValues(t, true, Any(&n))
    67  	})
    68  }
    69  
    70  func TestSize(t *testing.T) {
    71  	t.Run("Size test", func(t *testing.T) {
    72  		n := Nulls{}
    73  		assert.EqualValues(t, 0, Size(&n))
    74  		n = Nulls{Np: bitmap.New(16)}
    75  		for i := uint64(0); i < 16; i++ {
    76  			n.Np.Add(i)
    77  		}
    78  	})
    79  }
    80  
    81  func TestLength(t *testing.T) {
    82  	t.Run("Length test", func(t *testing.T) {
    83  		n := Nulls{}
    84  		assert.EqualValues(t, 0, Length(&n))
    85  		n = Nulls{Np: bitmap.New(16)}
    86  		for i := uint64(0); i < 16; i += 2 {
    87  			n.Np.Add(i)
    88  		}
    89  		assert.EqualValues(t, 8, Length(&n))
    90  	})
    91  }
    92  
    93  func TestString(t *testing.T) {
    94  	t.Run("String test", func(t *testing.T) {
    95  		n := Nulls{}
    96  		assert.EqualValues(t, "[]", String(&n))
    97  		n = Nulls{Np: bitmap.New(16)}
    98  		for i := uint64(0); i < 16; i += 2 {
    99  			n.Np.Add(i)
   100  		}
   101  		assert.EqualValues(t, "[0 2 4 6 8 10 12 14]", String(&n))
   102  	})
   103  }
   104  
   105  func TestContains(t *testing.T) {
   106  	t.Run("Contains test", func(t *testing.T) {
   107  		n := Nulls{}
   108  		assert.EqualValues(t, false, Contains(&n, 2))
   109  		n = Nulls{Np: bitmap.New(16)}
   110  		for i := uint64(0); i < 16; i += 2 {
   111  			n.Np.Add(i)
   112  		}
   113  		assert.EqualValues(t, true, Contains(&n, 2))
   114  	})
   115  }
   116  
   117  func TestAdd(t *testing.T) {
   118  	t.Run("Contains test", func(t *testing.T) {
   119  		n := Nulls{}
   120  		assert.EqualValues(t, false, Contains(&n, 2))
   121  		Add(&n, 2)
   122  		assert.EqualValues(t, true, Contains(&n, 2))
   123  	})
   124  }
   125  
   126  func TestDel(t *testing.T) {
   127  	t.Run("Contains test", func(t *testing.T) {
   128  		n := &Nulls{}
   129  		Add(n, 2)
   130  		assert.EqualValues(t, true, Contains(n, 2))
   131  		Del(n, 2)
   132  		assert.EqualValues(t, false, Contains(n, 2))
   133  	})
   134  }
   135  
   136  func TestSet(t *testing.T) {
   137  	t.Run("set test", func(t *testing.T) {
   138  		n := &Nulls{}
   139  		Add(n, 2)
   140  		m := &Nulls{}
   141  		Add(m, 5)
   142  		Set(n, m)
   143  		assert.Equal(t, 2, Length(n))
   144  	})
   145  }
   146  
   147  func TestFilterCount(t *testing.T) {
   148  	t.Run("FilterCount test", func(t *testing.T) {
   149  		n := Nulls{Np: bitmap.New(9)}
   150  		Add(&n, 2, 3, 5, 8)
   151  		assert.Equal(t, 2, FilterCount(&n, []int64{2, 3}))
   152  	})
   153  }
   154  
   155  func TestRemoveRange(t *testing.T) {
   156  	t.Run("set test", func(t *testing.T) {
   157  		n := &Nulls{Np: bitmap.New(16)}
   158  		for i := uint64(0); i < 16; i++ {
   159  			n.Np.Add(i)
   160  		}
   161  		assert.Equal(t, 16, Length(n))
   162  		RemoveRange(n, 10, 16)
   163  		assert.Equal(t, 10, Length(n))
   164  	})
   165  }
   166  
   167  func TestRange(t *testing.T) {
   168  	t.Run("set test", func(t *testing.T) {
   169  		n := &Nulls{}
   170  		m := &Nulls{}
   171  		Range(n, 0, 16, 0, m)
   172  		n = &Nulls{Np: bitmap.New(16)}
   173  		for i := uint64(0); i < 16; i++ {
   174  			n.Np.Add(i)
   175  		}
   176  		Range(n, 0, 16, 0, m)
   177  		assert.Equal(t, Length(n), Length(m))
   178  		Range(n, 10, 16, 0, m)
   179  		correctM := &Nulls{Np: bitmap.New(16)}
   180  		for i := uint64(10); i < 16; i++ {
   181  			correctM.Np.Add(i)
   182  		}
   183  		assert.Equal(t, Length(correctM), Length(m))
   184  	})
   185  }
   186  
   187  func TestFilter(t *testing.T) {
   188  	t.Run("set test", func(t *testing.T) {
   189  		n := &Nulls{}
   190  		for i := uint64(0); i < 16; i++ {
   191  			Add(n, i)
   192  		}
   193  		assert.Equal(t, 16, Length(n))
   194  		sels := []int64{1, 3, 5}
   195  		Filter(n, sels)
   196  		assert.Equal(t, 3, Length(n))
   197  	})
   198  }