define
a.SET.1:1 b.SET.2:2
c.SET.3:3 d.SET.4:4
dd.SET.5:5
----

iter
seek-ge a
next
next
next
next
next
----
a#1,SET:1
b#2,SET:2
c#3,SET:3
d#4,SET:4
dd#5,SET:5
.

iter
seek-ge b
next
next
next
next
prev
prev
prev
prev
prev
prev
----
b#2,SET:2
c#3,SET:3
d#4,SET:4
dd#5,SET:5
.
dd#5,SET:5
d#4,SET:4
c#3,SET:3
b#2,SET:2
a#1,SET:1
.

iter
seek-ge c
next
next
next
prev
----
c#3,SET:3
d#4,SET:4
dd#5,SET:5
.
dd#5,SET:5

iter
seek-ge d
next
next
prev
----
d#4,SET:4
dd#5,SET:5
.
dd#5,SET:5

iter
seek-ge dd
next
prev
----
dd#5,SET:5
.
dd#5,SET:5

iter
seek-ge e
prev
----
.
dd#5,SET:5

iter
seek-lt a
next
----
.
a#1,SET:1


iter
seek-lt b
prev
next
----
a#1,SET:1
.
a#1,SET:1

iter
seek-lt c
prev
prev
next
next
----
b#2,SET:2
a#1,SET:1
.
a#1,SET:1
b#2,SET:2

iter
seek-lt d
prev
prev
prev
next
next
next
----
c#3,SET:3
b#2,SET:2
a#1,SET:1
.
a#1,SET:1
b#2,SET:2
c#3,SET:3

iter
seek-lt e
prev
prev
prev
prev
prev
next
next
next
next
----
dd#5,SET:5
d#4,SET:4
c#3,SET:3
b#2,SET:2
a#1,SET:1
.
a#1,SET:1
b#2,SET:2
c#3,SET:3
d#4,SET:4

iter
seek-prefix-ge a
next
----
a#1,SET:1
b#2,SET:2

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

iter
seek-prefix-ge dd
next
----
dd#5,SET:5
.

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

iter
seek-prefix-ge d
----
d#4,SET:4

iter
seek-prefix-ge dd
----
dd#5,SET:5

iter lower=a
seek-ge a
----
a#1,SET:1

iter
set-bounds lower=a
seek-ge a
prev
next
----
a#1,SET:1
.
a#1,SET:1

iter
set-bounds lower=dd upper=f
seek-lt dd
next
set-bounds lower=a upper=f
seek-lt dd
prev
prev
prev
prev
next
----
.
dd#5,SET:5
d#4,SET:4
c#3,SET:3
b#2,SET:2
a#1,SET:1
.
a#1,SET:1

iter
set-bounds lower=a upper=b
seek-ge c
prev
set-bounds lower=a upper=f
seek-ge c
next
next
next
prev
----
.
a#1,SET:1
c#3,SET:3
d#4,SET:4
dd#5,SET:5
.
dd#5,SET:5

# levelIter trims lower/upper bound in the options passed to sstables.
load a
----
[,]

load b lower=aa upper=bb
----
[aa,]

load b lower=aa upper=c
----
[aa,]

load c lower=b upper=d
----
[,d]

load c lower=b upper=e
----
[,]

iter lower=b
seek-ge b
prev
next
----
b#2,SET:2
.
b#2,SET:2

iter lower=c
seek-ge c
prev
next
----
c#3,SET:3
.
c#3,SET:3

iter
set-bounds lower=b
seek-ge b
prev
next
----
b#2,SET:2
.
b#2,SET:2

iter
set-bounds lower=c
seek-ge c
prev
next
----
c#3,SET:3
.
c#3,SET:3

iter lower=d
seek-ge d
prev
next
----
d#4,SET:4
.
d#4,SET:4

iter lower=e
seek-ge e
prev
next
----
.
.
.

iter upper=e
seek-lt e
next
prev
----
dd#5,SET:5
.
dd#5,SET:5

iter
set-bounds lower=d
seek-ge d
prev
next
----
d#4,SET:4
.
d#4,SET:4

iter
set-bounds lower=e
seek-ge e
prev
next
----
.
.
.

iter
set-bounds upper=e
seek-lt e
next
prev
prev
----
dd#5,SET:5
.
dd#5,SET:5
d#4,SET:4

iter upper=d
seek-lt d
next
prev
----
c#3,SET:3
.
c#3,SET:3

iter upper=c
seek-lt c
next
prev
----
b#2,SET:2
.
b#2,SET:2

iter
set-bounds upper=d
seek-lt d
----
c#3,SET:3

iter
set-bounds upper=c
seek-lt c
----
b#2,SET:2

iter upper=b
seek-lt b
----
a#1,SET:1

iter upper=a
seek-lt a
----
.

iter upper=dd
seek-prefix-ge d
next
----
d#4,SET:4
.

iter
set-bounds upper=b
seek-lt b
----
a#1,SET:1

iter
set-bounds upper=a
seek-lt a
next
prev
----
.
.
.

iter
set-bounds upper=dd
seek-prefix-ge d
next
----
d#4,SET:4
.

iter upper=e
seek-prefix-ge d
next
----
d#4,SET:4
.

iter lower=dd
seek-prefix-ge dd
next
----
dd#5,SET:5
.

iter lower=d
seek-prefix-ge dd
----
dd#5,SET:5

iter lower=c
seek-prefix-ge dd
----
dd#5,SET:5

iter lower=c
seek-lt c
next
prev
----
.
c#3,SET:3
.

iter
seek-lt c
set-bounds lower=c
seek-lt c
----
b#2,SET:2
.

iter upper=c
seek-ge c
----
.

iter
seek-ge c
set-bounds upper=c
seek-ge c
----
c#3,SET:3
.

# The behavior of next/prev after set-bounds is undefined. We're just
# asserting the current behavior.

# The lower bound is beyond the current table's bounds.

iter
seek-ge c
set-bounds lower=e
next
----
c#3,SET:3
.

# The lower bound lies within the current table's bounds.

iter
seek-ge c
set-bounds lower=d
next
----
c#3,SET:3
d#4,SET:4

# The upper bound is before the current table's bounds.

iter
seek-ge d
set-bounds upper=c
prev
----
d#4,SET:4
.

# The upper bound lies within the current table's bounds.

iter
seek-ge d
set-bounds upper=cc
prev
----
d#4,SET:4
c#3,SET:3

# Setting bounds should update the table bounds, allowing a subsequent
# seek-ge/seek-lt to see the boundary keys.

iter
seek-ge d
set-bounds lower=cc
seek-lt d
----
d#4,SET:4
.

iter
seek-ge c
set-bounds upper=cc
seek-ge d
prev
----
c#3,SET:3
.
c#3,SET:3
