build
a.RANGEDEL.1:c
b.RANGEDEL.2:d
----
0: a#1,RANGEDEL-d#inf,RANGEDEL

iter
first
next
next
next
next
next
next
last
prev
prev
prev
prev
prev
prev
----
a#inf,RANGEDEL:
b#inf,RANGEDEL:
b#inf,RANGEDEL:
c#inf,RANGEDEL:
c#inf,RANGEDEL:
d#inf,RANGEDEL:
.
d#inf,RANGEDEL:
c#inf,RANGEDEL:
c#inf,RANGEDEL:
b#inf,RANGEDEL:
b#inf,RANGEDEL:
a#inf,RANGEDEL:
.

iter
seek-ge c
seek-ge d
seek-lt b
prev
----
c#inf,RANGEDEL:
.
b#inf,RANGEDEL:
a#inf,RANGEDEL:

iter
seek-prefix-ge c
seek-prefix-ge d
seek-lt b
prev
----
c#inf,RANGEDEL:
.
b#inf,RANGEDEL:
a#inf,RANGEDEL:

iter
seek-ge e
seek-lt a
----
.
.

iter
seek-prefix-ge e
seek-lt a
----
.
.

clear
----

build
a.SET.1:a
----
0: a#1,SET-a#1,SET

build
b.RANGEDEL.2:c
----
0: a#1,SET-a#1,SET
1: b#2,RANGEDEL-c#inf,RANGEDEL

build
c.SET.3:c
----
0: a#1,SET-a#1,SET
1: b#2,RANGEDEL-c#inf,RANGEDEL
2: c#3,SET-c#3,SET

iter
first
next
next
next
next
----
a#1,SET:a
b#inf,RANGEDEL:
c#inf,RANGEDEL:
c#3,SET:c
.

iter
last
prev
prev
prev
prev
----
c#3,SET:c
c#inf,RANGEDEL:
b#inf,RANGEDEL:
a#1,SET:a
.

clear
----

build
a.SET.1:b
b.RANGEDEL.2:c
----
0: a#1,SET-c#inf,RANGEDEL

iter
first
next
next
next
----
a#1,SET:b
b#inf,RANGEDEL:
c#inf,RANGEDEL:
.

iter
last
prev
prev
prev
----
c#inf,RANGEDEL:
b#inf,RANGEDEL:
a#1,SET:b
.

clear
----

build
a.RANGEDEL.1:b
c.SET.2:c
----
0: a#1,RANGEDEL-c#2,SET

iter
first
next
next
next
----
a#inf,RANGEDEL:
b#inf,RANGEDEL:
c#2,SET:c
.

iter
last
prev
prev
prev
----
c#2,SET:c
b#inf,RANGEDEL:
a#inf,RANGEDEL:
.

# Regression test to check that Seek{GE,LT} work properly in certain
# cases when then levelIter is positioned at a boundary key.

clear
----

build
d.SET.3:d
c.RANGEDEL.2:e
----
0: c#2,RANGEDEL-e#inf,RANGEDEL

iter
seek-ge d
next
seek-ge d
next
seek-lt e
prev
seek-ge d
prev
seek-lt e
----
d#inf,RANGEDEL:
d#3,SET:d
d#inf,RANGEDEL:
d#3,SET:d
e#inf,RANGEDEL:
d#3,SET:d
d#inf,RANGEDEL:
c#inf,RANGEDEL:
e#inf,RANGEDEL:

# Regression test to check that Seek{GE,LT}, First, and Last do not
# have iteration bounds affected by SeekPrefixGE. Previously,
# SeekPrefixGE adjusted the iteration upper bound which would leak
# over to other positioning operations. While SeekPrefixGE no longer
# has this behavior, it is good to check the iteration bounds handling
# regardless.

clear
----

build
b.SET.4:b
d.SET.3:d
----
0: b#4,SET-d#3,SET

iter
seek-prefix-ge c
seek-ge d
next
----
.
d#3,SET:d
.

iter
seek-prefix-ge c
seek-lt e
next
----
.
d#3,SET:d
.

iter
seek-prefix-ge c
first
next
next
----
.
b#4,SET:b
d#3,SET:d
.

iter
seek-prefix-ge c
last
next
----
.
d#3,SET:d
.

clear
----

build
a.SET.3:z
d.SET.4:z
----
0: a#3,SET-d#4,SET

build
e.SET.5:z
f.SET.6:z
g.RANGEDEL.2:h
----
0: a#3,SET-d#4,SET
1: e#5,SET-h#inf,RANGEDEL

build
j.SET.6:z
----
0: a#3,SET-d#4,SET
1: e#5,SET-h#inf,RANGEDEL
2: j#6,SET-j#6,SET

# Test cases to check that when the bounds are contained within a file, iterating
# beyond the bounds does not cause the levelIter to change to the next/prev file.
# This is not a correctness issue, but is a useful performance optimization and
# we want to verify that the code does what we want it to.
iter save
set-bounds lower=a upper=b
seek-ge a
next
----
a#3,SET:z
.

file-pos
----
file 000000 [loaded]

iter save continue
seek-prefix-ge a
next
----
a#3,SET:z
.

file-pos
----
file 000000 [loaded]

iter save continue
set-bounds lower=b upper=c
seek-ge b
----
.

file-pos
----
file 000000 [loaded]

iter save continue
seek-prefix-ge b
----
.

file-pos
----
file 000000 [loaded]

# Seek to an earlier position just as a sanity check.
iter save continue
set-bounds lower=a upper=b
seek-ge a
next
----
a#3,SET:z
.

file-pos
----
file 000000 [loaded]

iter save continue
set-bounds lower=d upper=e
seek-ge d
next
----
d#4,SET:z
.

file-pos
----
file 000001 [not loaded]

iter save continue
seek-prefix-ge d
next
----
d#4,SET:z
.

file-pos
----
file 000001 [not loaded]

iter save continue
set-bounds lower=e upper=f
seek-ge e
next
----
e#5,SET:z
.

file-pos
----
file 000001 [loaded]

iter save continue
seek-lt f
prev
----
e#5,SET:z
.

file-pos
----
file 000000 [not loaded]

iter save continue
set-bounds lower=f upper=g
seek-lt g
prev
----
f#6,SET:z
.

file-pos
----
file 000001 [loaded]

iter continue
----
