github.com/matrixorigin/matrixone@v0.7.0/pkg/vm/engine/tae/stl/containers/vector_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 containers 16 17 import ( 18 "bytes" 19 "fmt" 20 "strings" 21 "testing" 22 "time" 23 "unsafe" 24 25 "github.com/matrixorigin/matrixone/pkg/common/mpool" 26 "github.com/matrixorigin/matrixone/pkg/vm/engine/tae/stl" 27 "github.com/matrixorigin/matrixone/pkg/vm/engine/tae/testutils" 28 "github.com/stretchr/testify/assert" 29 ) 30 31 func withAllocator(opts Options) Options { 32 opts.Allocator = mpool.MustNewZero() 33 return opts 34 } 35 36 func TestVector1(t *testing.T) { 37 defer testutils.AfterTest(t)() 38 opts := withAllocator(Options{}) 39 vec := NewVector[int64](opts) 40 now := time.Now() 41 42 for i := 0; i < 500; i++ { 43 vec.Append(int64(i)) 44 } 45 t.Log(time.Since(now)) 46 t.Log(vec.String()) 47 allocator := vec.GetAllocator() 48 assert.True(t, allocator.CurrNB() > 0) 49 now = time.Now() 50 for i := 0; i < 500; i++ { 51 v := vec.Get(i) 52 assert.Equal(t, int64(i), v) 53 } 54 t.Log(time.Since(now)) 55 56 vec.Update(100, int64(999)) 57 v := vec.Get(100) 58 assert.Equal(t, int64(999), v) 59 60 assert.Equal(t, 500, vec.Length()) 61 vec.Delete(80) 62 assert.Equal(t, 499, vec.Length()) 63 64 vec2 := NewVector[int64]() 65 for i := 0; i < 100; i++ { 66 vec2.Append(int64(i + 1000)) 67 } 68 vec.AppendMany(vec2.Slice()...) 69 assert.Equal(t, 100+499, vec.Length()) 70 71 vec.Close() 72 vec2.Close() 73 assert.True(t, allocator.CurrNB() == 0) 74 } 75 76 func TestVector2(t *testing.T) { 77 defer testutils.AfterTest(t)() 78 vec := NewVector[[]byte]() 79 defer vec.Close() 80 vec.Append([]byte("hello")) 81 t.Log(vec.String()) 82 v := vec.Get(0) 83 assert.Equal(t, "hello", string(v)) 84 vec.Append([]byte("world")) 85 assert.Equal(t, 2, vec.Length()) 86 vec.Delete(0) 87 assert.Equal(t, 1, vec.Length()) 88 v = vec.Get(0) 89 assert.Equal(t, "world", string(v)) 90 } 91 92 func TestVector3(t *testing.T) { 93 defer testutils.AfterTest(t)() 94 opts := withAllocator(Options{}) 95 vec := NewVector[[]byte](opts) 96 vec.Append([]byte("h1")) 97 vec.Append([]byte("h2")) 98 vec.Append([]byte("h3")) 99 vec.Append([]byte("h4")) 100 assert.Equal(t, 4, vec.Length()) 101 vec.Update(1, []byte("hello")) 102 t.Logf("%s", vec.Get(3)) 103 t.Logf("%s", vec.Get(2)) 104 t.Logf("%s", vec.Get(1)) 105 t.Logf("%s", vec.Get(0)) 106 assert.Equal(t, "h1", string(vec.Get(0))) 107 assert.Equal(t, "hello", string(vec.Get(1))) 108 assert.Equal(t, "h3", string(vec.Get(2))) 109 assert.Equal(t, "h4", string(vec.Get(3))) 110 t.Log(vec.String()) 111 vec.Close() 112 assert.Equal(t, int64(0), opts.Allocator.CurrNB()) 113 } 114 115 func TestVector4(t *testing.T) { 116 defer testutils.AfterTest(t)() 117 opts := withAllocator(Options{}) 118 vec := NewVector[[]byte](opts) 119 vec.Append([]byte("h1")) 120 vec.Append([]byte("h2")) 121 vec.Append([]byte("h3")) 122 vec.Append([]byte("h4")) 123 assert.Equal(t, 4, vec.Length()) 124 vec.Delete(1) 125 assert.Equal(t, 3, vec.Length()) 126 t.Logf("%s", vec.Get(2)) 127 t.Logf("%s", vec.Get(1)) 128 t.Logf("%s", vec.Get(0)) 129 assert.Equal(t, "h1", string(vec.Get(0))) 130 assert.Equal(t, "h3", string(vec.Get(1))) 131 assert.Equal(t, "h4", string(vec.Get(2))) 132 t.Log(vec.String()) 133 vec.Close() 134 assert.Equal(t, int64(0), opts.Allocator.CurrNB()) 135 } 136 137 func TestVector5(t *testing.T) { 138 defer testutils.AfterTest(t)() 139 opts := withAllocator(Options{}) 140 vec := NewVector[[]byte](opts) 141 vec.Append([]byte("h1")) 142 vec.Append([]byte("hh2")) 143 vec.Append([]byte("hhh3")) 144 vec.Append([]byte("hhhh4")) 145 assert.Equal(t, 4, vec.Length()) 146 vec2 := vec.Clone(0, 1) 147 assert.Equal(t, 1, vec2.Length()) 148 assert.Equal(t, "h1", string(vec2.Get(0))) 149 vec2.Close() 150 vec2 = vec.Clone(0, 2) 151 assert.Equal(t, 2, vec2.Length()) 152 assert.Equal(t, "h1", string(vec2.Get(0))) 153 assert.Equal(t, "hh2", string(vec2.Get(1))) 154 vec2.Close() 155 vec2 = vec.Clone(0, 3) 156 assert.Equal(t, 3, vec2.Length()) 157 assert.Equal(t, "h1", string(vec2.Get(0))) 158 assert.Equal(t, "hh2", string(vec2.Get(1))) 159 assert.Equal(t, "hhh3", string(vec2.Get(2))) 160 vec2.Close() 161 vec2 = vec.Clone(0, 4) 162 assert.Equal(t, 4, vec2.Length()) 163 assert.Equal(t, "h1", string(vec2.Get(0))) 164 assert.Equal(t, "hh2", string(vec2.Get(1))) 165 assert.Equal(t, "hhh3", string(vec2.Get(2))) 166 assert.Equal(t, "hhhh4", string(vec2.Get(3))) 167 vec2.Close() 168 169 vec2 = vec.Clone(1, 1) 170 assert.Equal(t, 1, vec2.Length()) 171 assert.Equal(t, "hh2", string(vec2.Get(0))) 172 vec2.Close() 173 vec2 = vec.Clone(1, 2) 174 assert.Equal(t, 2, vec2.Length()) 175 assert.Equal(t, "hh2", string(vec2.Get(0))) 176 assert.Equal(t, "hhh3", string(vec2.Get(1))) 177 vec2.Close() 178 vec2 = vec.Clone(1, 3) 179 assert.Equal(t, 3, vec2.Length()) 180 assert.Equal(t, "hh2", string(vec2.Get(0))) 181 assert.Equal(t, "hhh3", string(vec2.Get(1))) 182 assert.Equal(t, "hhhh4", string(vec2.Get(2))) 183 vec2.Close() 184 vec.Close() 185 assert.Equal(t, int64(0), opts.Allocator.CurrNB()) 186 } 187 188 func TestVector6(t *testing.T) { 189 defer testutils.AfterTest(t)() 190 w := bytes.Buffer{} 191 for i := 0; i < 10; i++ { 192 v := int64(i) 193 vs := unsafe.Slice((*byte)(unsafe.Pointer(&v)), 8) 194 w.Write(vs) 195 } 196 buf := w.Bytes() 197 t.Logf("cap:%d,size:%d", cap(buf), len(buf)) 198 bs := stl.NewBytesWithTypeSize(stl.Sizeof[int64]()) 199 bs.SetStorageBuf(buf) 200 opts := Options{ 201 Data: bs, 202 } 203 vec := NewVector[int64](opts) 204 t.Log(vec.String()) 205 assert.Equal(t, 0, vec.Allocated()) 206 vec.Update(3, int64(3333)) 207 t.Log(vec.String()) 208 slice := unsafe.Slice((*int64)(unsafe.Pointer(&buf[0])), vec.Length()) 209 assert.Equal(t, int64(3333), slice[3]) 210 211 vec.Update(4, int64(444)) 212 assert.Equal(t, int64(444), slice[4]) 213 214 vec.Append(int64(99)) 215 assert.True(t, vec.Allocated() > 0) 216 t.Log(vec.String()) 217 218 vec.Update(3, int64(4444)) 219 assert.Equal(t, int64(3333), slice[3]) 220 } 221 222 func TestVector7(t *testing.T) { 223 defer testutils.AfterTest(t)() 224 opts := withAllocator(Options{}) 225 vec := NewVector[int16](opts) 226 vec.Append(int16(1)) 227 vec.Append(int16(2)) 228 vec.Append(int16(3)) 229 d := vec.Data() 230 assert.Equal(t, len(d), 3*stl.Sizeof[int16]()) 231 s := vec.Slice() 232 assert.Equal(t, 3, len(s)) 233 vec.Close() 234 235 vec3 := NewVector[byte](opts) 236 vec3.AppendMany([]byte("world")...) 237 s2 := vec3.Slice() 238 assert.Equal(t, 5, len(s2)) 239 d = vec3.Data() 240 assert.Equal(t, 5, len(d)) 241 vec3.Close() 242 assert.Equal(t, int64(0), opts.Allocator.CurrNB()) 243 244 vec2 := NewVector[[]byte](opts) 245 vec2.Append([]byte("h1")) 246 vec2.Append([]byte("hh2")) 247 vec2.Append([]byte("hhh3")) 248 vec2.Append([]byte("hhhh4")) 249 bs := vec2.Bytes() 250 t.Log(vec2.String()) 251 252 allocated := opts.Allocator.CurrNB() 253 254 opt2 := withAllocator(Options{}) 255 opt2.Data = bs 256 257 vec4 := NewVector[[]byte](opt2) 258 assert.Equal(t, vec2.Length(), vec4.Length()) 259 assert.Equal(t, vec2.Get(0), vec4.Get(0)) 260 assert.Equal(t, vec2.Get(1), vec4.Get(1)) 261 assert.Equal(t, vec2.Get(2), vec4.Get(2)) 262 assert.Equal(t, vec2.Get(3), vec4.Get(3)) 263 assert.Equal(t, allocated, opts.Allocator.CurrNB()) 264 265 vec2.Close() 266 assert.Equal(t, int64(0), opts.Allocator.CurrNB()) 267 } 268 269 func TestVector8(t *testing.T) { 270 defer testutils.AfterTest(t)() 271 opts := withAllocator(Options{}) 272 vec := NewVector[int32](opts) 273 vec.AppendMany(int32(1), int32(3), int32(9)) 274 t.Log(vec.String()) 275 assert.Equal(t, 3, vec.Length()) 276 277 w := new(bytes.Buffer) 278 _, err := vec.WriteTo(w) 279 assert.NoError(t, err) 280 281 buf := w.Bytes() 282 vec2 := NewVector[int32](opts) 283 284 r := bytes.NewBuffer(buf) 285 _, err = vec2.ReadFrom(r) 286 assert.NoError(t, err) 287 t.Log(vec2.String()) 288 vec.Close() 289 vec2.Close() 290 assert.Zero(t, opts.Allocator.CurrNB()) 291 } 292 293 func TestVector9(t *testing.T) { 294 defer testutils.AfterTest(t)() 295 allocator := mpool.MustNewZero() 296 opts := Options{} 297 opts.Allocator = allocator 298 vec := NewVector[[]byte](opts) 299 vec.AppendMany([]byte("h1"), []byte("hh2"), 300 []byte("hhh3"), []byte("hhhh4")) 301 vec.Delete(1) 302 assert.Equal(t, 3, vec.Length()) 303 w := new(bytes.Buffer) 304 _, err := vec.WriteTo(w) 305 assert.NoError(t, err) 306 307 buf := w.Bytes() 308 r := bytes.NewBuffer(buf) 309 vec2 := NewVector[[]byte](opts) 310 _, err = vec2.ReadFrom(r) 311 assert.NoError(t, err) 312 t.Log(vec2.String()) 313 assert.Equal(t, 3, vec2.Length()) 314 assert.Equal(t, vec.Get(0), vec2.Get(0)) 315 assert.Equal(t, vec.Get(1), vec2.Get(1)) 316 assert.Equal(t, vec.Get(2), vec2.Get(2)) 317 vec.Close() 318 vec2.Close() 319 assert.Zero(t, allocator.CurrNB()) 320 } 321 322 func TestVector10(t *testing.T) { 323 defer testutils.AfterTest(t)() 324 opts := withAllocator(Options{}) 325 vec := NewVector[[]byte](opts) 326 h1 := "h1" 327 h2 := "hh2" 328 h3 := "hhh3" 329 h4 := "hhhh4" 330 vec.Append([]byte(h1)) 331 vec.Append([]byte(h2)) 332 vec.Append([]byte(h3)) 333 vec.Append([]byte(h4)) 334 335 data := vec.Bytes() 336 337 vec2 := NewVector[[]byte](opts) 338 vec2.ReadBytes(data, true) 339 t.Log(vec2.String()) 340 assert.Equal(t, vec.Length(), vec2.Length()) 341 assert.Equal(t, vec.Capacity(), vec2.Capacity()) 342 assert.Equal(t, vec.Get(0), vec2.Get(0)) 343 assert.Equal(t, vec.Get(1), vec2.Get(1)) 344 assert.Equal(t, vec.Get(2), vec2.Get(2)) 345 assert.Equal(t, vec.Get(3), vec2.Get(3)) 346 assert.Zero(t, vec2.Allocated()) 347 348 vec3 := NewVector[[]byte](opts) 349 vec3.ReadBytes(data, false) 350 t.Log(vec3.String()) 351 assert.Equal(t, vec.Allocated(), vec3.Allocated()) 352 assert.Equal(t, vec.Length(), vec3.Length()) 353 for i := 0; i < vec.Length(); i++ { 354 assert.Equal(t, vec.Get(i), vec3.Get(i)) 355 } 356 vec3.Append([]byte("x1")) 357 assert.Equal(t, vec.Length()+1, vec3.Length()) 358 359 vec.Close() 360 vec2.Close() 361 vec3.Close() 362 assert.Zero(t, opts.Allocator.CurrNB()) 363 } 364 365 func TestVector11(t *testing.T) { 366 defer testutils.AfterTest(t)() 367 opts := withAllocator(Options{}) 368 vec := NewVector[[]byte](opts) 369 h1 := "h1" 370 h2 := "hh2" 371 h3 := "hhh3" 372 h4 := "hhhh4" 373 vec.Append([]byte(h1)) 374 vec.Append([]byte(h2)) 375 vec.Append([]byte(h3)) 376 vec.Append([]byte(h4)) 377 usage := opts.Allocator.CurrNB() 378 allocted := vec.Allocated() 379 assert.Equal(t, int(usage), allocted) 380 assert.Equal(t, 4, vec.Length()) 381 vec.Reset() 382 assert.Zero(t, vec.Length()) 383 assert.Equal(t, usage, opts.Allocator.CurrNB()) 384 assert.Equal(t, int(usage), vec.Allocated()) 385 386 vec.Append([]byte("x1")) 387 assert.Equal(t, 1, vec.Length()) 388 assert.Equal(t, "x1", string(vec.Get(0))) 389 t.Log(vec.String()) 390 vec.Close() 391 assert.Zero(t, opts.Allocator.CurrNB()) 392 } 393 394 func TestVector12(t *testing.T) { 395 defer testutils.AfterTest(t)() 396 opts := withAllocator(Options{}) 397 vec := NewVector[[]byte](opts) 398 h1 := "h1" 399 h2 := "hh2" 400 h3 := "hhh3" 401 h4 := "hhhh4" 402 vec.Append([]byte(h1)) 403 vec.Append([]byte(h2)) 404 vec.Append([]byte(h3)) 405 vec.Append([]byte(h4)) 406 407 w := new(bytes.Buffer) 408 _, err := vec.WriteTo(w) 409 assert.NoError(t, err) 410 buf := w.Bytes() 411 vec2 := NewVector[[]byte](opts) 412 n, err := vec2.InitFromSharedBuf(buf) 413 assert.Equal(t, int(n), len(buf)) 414 assert.NoError(t, err) 415 assert.Zero(t, vec2.Allocated()) 416 for i := 0; i < vec.Length(); i++ { 417 assert.Equal(t, vec.Get(i), vec2.Get(i)) 418 } 419 420 vec2.Close() 421 vec.Close() 422 assert.Zero(t, opts.Allocator.CurrNB()) 423 } 424 425 func TestStrVector1(t *testing.T) { 426 defer testutils.AfterTest(t)() 427 opts := withAllocator(Options{}) 428 vec := NewStrVector[[]byte](opts) 429 h1 := "h1" 430 h2 := "hh2" 431 h3 := "hhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhh3" 432 h4 := "hhhh4" 433 h5 := "hhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhh5" 434 h6 := "hhhhhh6" 435 vec.Append([]byte(h1)) 436 vec.Append([]byte(h2)) 437 vec.Append([]byte(h3)) 438 vec.Append([]byte(h4)) 439 440 t.Log(vec.String()) 441 assert.Equal(t, vec.area.Length(), len(h3)) 442 assert.Equal(t, 4, vec.Length()) 443 444 min, max := vec.getAreaRange(0, 2) 445 assert.Equal(t, 0, min) 446 assert.Equal(t, 0, max) 447 448 min, max = vec.getAreaRange(1, 2) 449 assert.Equal(t, 0, min) 450 assert.Equal(t, len(h3), max) 451 assert.Equal(t, []byte(h3), vec.area.Slice()[min:max]) 452 453 min, max = vec.getAreaRange(1, 3) 454 assert.Equal(t, 0, min) 455 assert.Equal(t, len(h3), max) 456 457 vec.Append([]byte(h5)) 458 vec.Append([]byte(h6)) 459 460 assert.Equal(t, 6, vec.Length()) 461 assert.Equal(t, vec.area.Length(), len(h3)+len(h5)) 462 463 min, max = vec.getAreaRange(3, 2) 464 assert.Equal(t, len(h3), min) 465 assert.Equal(t, len(h3)+len(h5), max) 466 assert.Equal(t, []byte(h5), vec.area.Slice()[min:max]) 467 t.Logf("%s", vec.area.Slice()[min:max]) 468 469 w := new(bytes.Buffer) 470 _, err := vec.WriteTo(w) 471 assert.NoError(t, err) 472 buf := w.Bytes() 473 vec2 := NewStrVector[[]byte](opts) 474 n, err := vec2.InitFromSharedBuf(buf) 475 assert.Equal(t, int(n), len(buf)) 476 assert.NoError(t, err) 477 assert.Zero(t, vec2.Allocated()) 478 t.Log(vec2.String()) 479 for i := 0; i < vec.Length(); i++ { 480 assert.Equal(t, vec.Get(i), vec2.Get(i)) 481 } 482 483 vec2.Close() 484 vec.Close() 485 assert.Zero(t, opts.Allocator.CurrNB()) 486 } 487 488 func TestStrVector2(t *testing.T) { 489 defer testutils.AfterTest(t)() 490 opts := withAllocator(Options{}) 491 vec := NewStrVector[[]byte](opts) 492 h1 := "h1" 493 h2 := "hh2" 494 h3 := "hhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhh3" 495 h4 := "hhhh4" 496 vec.Append([]byte(h1)) 497 vec.Append([]byte(h2)) 498 vec.Append([]byte(h3)) 499 vec.Append([]byte(h4)) 500 501 data := vec.Bytes() 502 503 vec3 := NewStrVector[[]byte](opts) 504 vec3.ReadBytes(data, true) 505 assert.Zero(t, vec3.Allocated()) 506 for i := 0; i < vec.Length(); i++ { 507 assert.Equal(t, vec.Get(i), vec3.Get(i)) 508 } 509 510 vec4 := NewStrVector[[]byte](opts) 511 vec4.ReadBytes(data, false) 512 assert.NotZero(t, vec4.Allocated()) 513 for i := 0; i < vec.Length(); i++ { 514 assert.Equal(t, vec.Get(i), vec4.Get(i)) 515 } 516 t.Log(vec4.String()) 517 518 vec4.Close() 519 vec3.Close() 520 vec.Close() 521 assert.Zero(t, opts.Allocator.CurrNB()) 522 } 523 524 func TestStrVector3(t *testing.T) { 525 defer testutils.AfterTest(t)() 526 opts := withAllocator(Options{}) 527 vec := NewStrVector[[]byte](opts) 528 h1 := "h1" 529 h2 := "hh2" 530 h3 := "hhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhh3" 531 h4 := "hhhh4" 532 h5 := "hhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhxy5" 533 h6 := "hhhhhh6" 534 vec.Append([]byte(h1)) 535 vec.Append([]byte(h2)) 536 vec.Append([]byte(h3)) 537 vec.Append([]byte(h4)) 538 vec.Append([]byte(h5)) 539 vec.Append([]byte(h6)) 540 541 assert.Equal(t, 6, vec.Length()) 542 vec.BatchDeleteInts(1, 2) 543 assert.Equal(t, 4, vec.Length()) 544 assert.Equal(t, h1, string(vec.Get(0))) 545 assert.Equal(t, h4, string(vec.Get(1))) 546 assert.Equal(t, h5, string(vec.Get(2))) 547 assert.Equal(t, h6, string(vec.Get(3))) 548 549 vec.Update(1, []byte(h3)) 550 for i := 0; i < vec.Length(); i++ { 551 t.Logf("%s", vec.Get(i)) 552 } 553 554 assert.Equal(t, 4, vec.Length()) 555 assert.Equal(t, h1, string(vec.Get(0))) 556 assert.Equal(t, h3, string(vec.Get(1))) 557 assert.Equal(t, h5, string(vec.Get(2))) 558 assert.Equal(t, h6, string(vec.Get(3))) 559 560 vec.Update(1, []byte(h2)) 561 for i := 0; i < vec.Length(); i++ { 562 t.Logf("%s", vec.Get(i)) 563 } 564 assert.Equal(t, 4, vec.Length()) 565 assert.Equal(t, h1, string(vec.Get(0))) 566 assert.Equal(t, h2, string(vec.Get(1))) 567 assert.Equal(t, h5, string(vec.Get(2))) 568 assert.Equal(t, h6, string(vec.Get(3))) 569 570 vec.Update(2, []byte(h3)) 571 for i := 0; i < vec.Length(); i++ { 572 t.Logf("%s", vec.Get(i)) 573 } 574 assert.Equal(t, 4, vec.Length()) 575 assert.Equal(t, h1, string(vec.Get(0))) 576 assert.Equal(t, h2, string(vec.Get(1))) 577 assert.Equal(t, h3, string(vec.Get(2))) 578 assert.Equal(t, h6, string(vec.Get(3))) 579 580 vec.Update(2, []byte(h5)) 581 for i := 0; i < vec.Length(); i++ { 582 t.Logf("%s", vec.Get(i)) 583 } 584 assert.Equal(t, 4, vec.Length()) 585 assert.Equal(t, h1, string(vec.Get(0))) 586 assert.Equal(t, h2, string(vec.Get(1))) 587 assert.Equal(t, h5, string(vec.Get(2))) 588 assert.Equal(t, h6, string(vec.Get(3))) 589 590 vec.Close() 591 assert.Zero(t, opts.Allocator.CurrNB()) 592 } 593 594 func getBytes(i int) []byte { 595 if i%2 == 0 { 596 return []byte("hhhhhhhhhhhhhhhhhxxxxxxxxxe") 597 } 598 return []byte("yyyk") 599 } 600 601 func TestStrVector4(t *testing.T) { 602 defer testutils.AfterTest(t)() 603 opts := withAllocator(Options{}) 604 vec := NewStrVector[[]byte](opts) 605 for i := 0; i < 10000; i++ { 606 vec.Append(getBytes(i)) 607 } 608 now := time.Now() 609 610 i := 0 611 vec.Update(i, getBytes(1)) 612 vec.Update(i, getBytes(0)) 613 vec.Update(i, getBytes(1)) 614 vec.Update(i, getBytes(0)) 615 vec.Delete(i) 616 617 t.Log(time.Since(now)) 618 vec.Close() 619 assert.Zero(t, opts.Allocator.CurrNB()) 620 } 621 622 func TestStrVector5(t *testing.T) { 623 strs := [][]byte{} 624 for i := 1; i < 10; i++ { 625 str := strings.Repeat(fmt.Sprintf("%d", i), i*4) 626 strs = append(strs, []byte(str)) 627 } 628 opts := withAllocator(Options{}) 629 vec := NewStrVector[[]byte](opts) 630 defer vec.Close() 631 size := 40000 632 for cnt := 0; cnt < size; cnt++ { 633 p := cnt % len(strs) 634 vec.Append(strs[p]) 635 } 636 deleteCnt := 200 637 step := size / deleteCnt 638 deletes := []int{} 639 for i := 0; i < size; i += step { 640 deletes = append(deletes, i) 641 } 642 now := time.Now() 643 // for i := len(deletes) - 1; i >= 0; i-- { 644 // vec.Delete(deletes[i]) 645 // } 646 vec.BatchDeleteInts(deletes...) 647 t.Log(time.Since(now)) 648 // t.Log(vec.String()) 649 650 }