github.com/insionng/yougam@v0.0.0-20170714101924-2bc18d833463/libraries/syndtr/goleveldb/leveldb/iterator/merged_iter_test.go (about)

     1  // Copyright (c) 2014, Suryandaru Triandana <syndtr@gmail.com>
     2  // All rights reserved.
     3  //
     4  // Use of this source code is governed by a BSD-style license that can be
     5  // found in the LICENSE file.
     6  
     7  package iterator_test
     8  
     9  import (
    10  	. "github.com/insionng/yougam/libraries/onsi/ginkgo"
    11  	. "github.com/insionng/yougam/libraries/onsi/gomega"
    12  
    13  	"github.com/insionng/yougam/libraries/syndtr/goleveldb/leveldb/comparer"
    14  	. "github.com/insionng/yougam/libraries/syndtr/goleveldb/leveldb/iterator"
    15  	"github.com/insionng/yougam/libraries/syndtr/goleveldb/leveldb/testutil"
    16  )
    17  
    18  var _ = testutil.Defer(func() {
    19  	Describe("Merged iterator", func() {
    20  		Test := func(filled int, empty int) func() {
    21  			return func() {
    22  				It("Should iterates and seeks correctly", func(done Done) {
    23  					rnd := testutil.NewRand()
    24  
    25  					// Build key/value.
    26  					filledKV := make([]testutil.KeyValue, filled)
    27  					kv := testutil.KeyValue_Generate(nil, 100, 1, 10, 4, 4)
    28  					kv.Iterate(func(i int, key, value []byte) {
    29  						filledKV[rnd.Intn(filled)].Put(key, value)
    30  					})
    31  
    32  					// Create itearators.
    33  					iters := make([]Iterator, filled+empty)
    34  					for i := range iters {
    35  						if empty == 0 || (rnd.Int()%2 == 0 && filled > 0) {
    36  							filled--
    37  							Expect(filledKV[filled].Len()).ShouldNot(BeZero())
    38  							iters[i] = NewArrayIterator(filledKV[filled])
    39  						} else {
    40  							empty--
    41  							iters[i] = NewEmptyIterator(nil)
    42  						}
    43  					}
    44  
    45  					// Test the iterator.
    46  					t := testutil.IteratorTesting{
    47  						KeyValue: kv.Clone(),
    48  						Iter:     NewMergedIterator(iters, comparer.DefaultComparer, true),
    49  					}
    50  					testutil.DoIteratorTesting(&t)
    51  					done <- true
    52  				}, 1.5)
    53  			}
    54  		}
    55  
    56  		Describe("with three, all filled iterators", Test(3, 0))
    57  		Describe("with one filled, one empty iterators", Test(1, 1))
    58  		Describe("with one filled, two empty iterators", Test(1, 2))
    59  	})
    60  })