0
0

gtreap: RangeIterator.Seek should not move before start

This commit is contained in:
Patrick Mezard 2015-10-20 18:44:00 +02:00
parent 5d7628ba3b
commit 873f483804
4 changed files with 19 additions and 2 deletions

View File

@ -31,10 +31,14 @@ type Iterator struct {
currOk bool
prefix []byte
start []byte
end []byte
}
func (w *Iterator) Seek(k []byte) {
if bytes.Compare(k, w.start) < 0 {
k = w.start
}
w.restart(&Item{k: k})
}

View File

@ -46,8 +46,9 @@ func (w *Reader) PrefixIterator(k []byte) store.KVIterator {
func (w *Reader) RangeIterator(start, end []byte) store.KVIterator {
rv := Iterator{
t: w.t,
end: end,
t: w.t,
start: start,
end: end,
}
rv.restart(&Item{k: start})
return &rv

View File

@ -70,6 +70,12 @@ func TestGTreapRangeIterator(t *testing.T) {
test.CommonTestRangeIterator(t, s)
}
func TestGTreapRangeIteratorSeek(t *testing.T) {
s := open(t, nil)
defer cleanup(t, s)
test.CommonTestRangeIteratorSeek(t, s)
}
func TestGTreapMerge(t *testing.T) {
s := open(t, &test.TestMergeCounter{})
defer cleanup(t, s)

View File

@ -59,6 +59,12 @@ func TestMetricsRangeIterator(t *testing.T) {
test.CommonTestRangeIterator(t, s)
}
func TestMetricsRangeIteratorSeek(t *testing.T) {
s := open(t, nil)
defer cleanup(t, s)
test.CommonTestRangeIteratorSeek(t, s)
}
func TestMetricsMerge(t *testing.T) {
s := open(t, &test.TestMergeCounter{})
defer cleanup(t, s)