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 }