MCPcopy Create free account
hub / github.com/nutsdb/nutsdb / TestDB_MergeForSet

Function TestDB_MergeForSet

merge_test.go:372–454  ·  view source on GitHub ↗
(t *testing.T)

Source from the content-addressed store, hash-verified

370}
371
372func TestDB_MergeForSet(t *testing.T) {
373 runForMergeModes(t, func(t *testing.T, mode mergeTestMode) {
374 bucket := "bucket"
375 opts := DefaultOptions
376 opts.SegmentSize = KB
377 opts.EnableMergeV2 = mode.enableMergeV2
378 opts.Dir = fmt.Sprintf("/tmp/test-set-merge-%s/", mode.name)
379
380 for _, idxMode := range []EntryIdxMode{HintKeyValAndRAMIdxMode, HintKeyAndRAMIdxMode} {
381 removeDir(opts.Dir)
382 opts.EntryIdxMode = idxMode
383 db, err := Open(opts)
384 if exist := db.bucketMgr.ExistBucket(DataStructureSet, bucket); !exist {
385 txCreateBucket(t, db, DataStructureSet, bucket, nil)
386 }
387
388 require.NoError(t, err)
389
390 err = db.Merge()
391 require.Equal(t, ErrDontNeedMerge, err)
392
393 n := 1000
394 key := testutils.GetTestBytes(0)
395 for i := 0; i < n; i++ {
396 txSAdd(t, db, bucket, key, testutils.GetTestBytes(i), nil, nil)
397 }
398
399 for i := 0; i < n/2; i++ {
400 txSRem(t, db, bucket, key, testutils.GetTestBytes(i), nil)
401 }
402
403 var spopValue []byte
404 err = db.Update(func(tx *Tx) error {
405 var err error
406 spopValue, err = tx.SPop(bucket, key)
407 AssertErr(t, err, nil)
408 return nil
409 })
410 require.NoError(t, err)
411
412 txSIsMember(t, db, bucket, key, spopValue, false)
413
414 dbCnt, err := db.getRecordCount()
415 require.NoError(t, err)
416 require.Equal(t, int64(n/2-1), dbCnt)
417
418 require.NoError(t, db.Merge())
419
420 dbCnt, err = db.getRecordCount()
421 require.NoError(t, err)
422 require.Equal(t, int64(n/2-1), dbCnt)
423
424 txSIsMember(t, db, bucket, key, spopValue, false)
425 for i := n / 2; i < n; i++ {
426 v := testutils.GetTestBytes(i)
427 if bytes.Equal(v, spopValue) {
428 continue
429 }

Callers

nothing calls this directly

Calls 15

GetTestBytesFunction · 0.92
runForMergeModesFunction · 0.85
removeDirFunction · 0.85
OpenFunction · 0.85
txCreateBucketFunction · 0.85
txSAddFunction · 0.85
txSRemFunction · 0.85
txSIsMemberFunction · 0.85
MergeMethod · 0.80
UpdateMethod · 0.80
getRecordCountMethod · 0.80
AssertErrFunction · 0.70

Tested by

no test coverage detected