61 lines
1.7 KiB
Go
61 lines
1.7 KiB
Go
// Copyright (c) 2014, Suryandaru Triandana <syndtr@gmail.com>
|
|
// All rights reserved.
|
|
//
|
|
// Use of this source code is governed by a BSD-style license that can be
|
|
// found in the LICENSE file.
|
|
|
|
package iterator_test
|
|
|
|
import (
|
|
. "github.com/onsi/ginkgo"
|
|
. "github.com/onsi/gomega"
|
|
|
|
"github.com/syndtr/goleveldb/leveldb/comparer"
|
|
. "github.com/syndtr/goleveldb/leveldb/iterator"
|
|
"github.com/syndtr/goleveldb/leveldb/testutil"
|
|
)
|
|
|
|
var _ = testutil.Defer(func() {
|
|
Describe("Merged iterator", func() {
|
|
Test := func(filled int, empty int) func() {
|
|
return func() {
|
|
It("Should iterates and seeks correctly", func(done Done) {
|
|
rnd := testutil.NewRand()
|
|
|
|
// Build key/value.
|
|
filledKV := make([]testutil.KeyValue, filled)
|
|
kv := testutil.KeyValue_Generate(nil, 100, 1, 1, 10, 4, 4)
|
|
kv.Iterate(func(i int, key, value []byte) {
|
|
filledKV[rnd.Intn(filled)].Put(key, value)
|
|
})
|
|
|
|
// Create itearators.
|
|
iters := make([]Iterator, filled+empty)
|
|
for i := range iters {
|
|
if empty == 0 || (rnd.Int()%2 == 0 && filled > 0) {
|
|
filled--
|
|
Expect(filledKV[filled].Len()).ShouldNot(BeZero())
|
|
iters[i] = NewArrayIterator(filledKV[filled])
|
|
} else {
|
|
empty--
|
|
iters[i] = NewEmptyIterator(nil)
|
|
}
|
|
}
|
|
|
|
// Test the iterator.
|
|
t := testutil.IteratorTesting{
|
|
KeyValue: kv.Clone(),
|
|
Iter: NewMergedIterator(iters, comparer.DefaultComparer, true),
|
|
}
|
|
testutil.DoIteratorTesting(&t)
|
|
done <- true
|
|
}, 15.0)
|
|
}
|
|
}
|
|
|
|
Describe("with three, all filled iterators", Test(3, 0))
|
|
Describe("with one filled, one empty iterators", Test(1, 1))
|
|
Describe("with one filled, two empty iterators", Test(1, 2))
|
|
})
|
|
})
|