reset
----

# Use the key string as the value so that it's easy to tell when we surface the
# wrong value.

batch commit
set a a
set b b
set c c
set d d
range-key-set b   c   @5 boop
range-key-set cat dog @3 beep
----
committed 6 keys

flush
----

# Scan forward

combined-iter
stats
seek-ge a
next
stats
next
next
next
next
stats
----
stats: seeked 0 times (0 internal); stepped 0 times (0 internal)
a: (a, .)
b: (b, [b-c) @5=boop UPDATED)
stats: seeked 1 times (1 internal); stepped 1 times (2 internal); blocks: 0B cached, 89B not cached (read time: 0s); points: 2 (2B keys, 2B values), range keys: 1, contained points: 1 (0 skipped)
c: (c, . UPDATED)
cat: (., [cat-dog) @3=beep UPDATED)
d: (d, [cat-dog) @3=beep)
.
stats: seeked 1 times (1 internal); stepped 5 times (6 internal); blocks: 0B cached, 89B not cached (read time: 0s); points: 4 (4B keys, 4B values), range keys: 2, contained points: 2 (0 skipped)

# Do the above forward iteration but with a mask suffix. The results should be
# identical despite range keys serving as masks, because none of the point keys
# have suffixes.

combined-iter mask-suffix=@9
seek-ge a
next
next
next
next
next
stats
----
a: (a, .)
b: (b, [b-c) @5=boop UPDATED)
c: (c, . UPDATED)
cat: (., [cat-dog) @3=beep UPDATED)
d: (d, [cat-dog) @3=beep)
.
stats: seeked 1 times (1 internal); stepped 5 times (6 internal); blocks: 89B cached; points: 4 (4B keys, 4B values), range keys: 2, contained points: 2 (0 skipped)

# Scan backward

combined-iter
seek-lt z
prev
prev
prev
prev
prev
stats
----
d: (d, [cat-dog) @3=beep UPDATED)
cat: (., [cat-dog) @3=beep)
c: (c, . UPDATED)
b: (b, [b-c) @5=boop UPDATED)
a: (a, . UPDATED)
.
stats: seeked 1 times (0 fwd/1 rev, internal: 0 fwd/1 rev); stepped 5 times (0 fwd/5 rev, internal: 0 fwd/6 rev); blocks: 89B cached; points: 4 (4B keys, 4B values), range keys: 2, contained points: 2 (0 skipped)

combined-iter
seek-ge ace
seek-ge b
seek-ge c
seek-ge cab
seek-ge cat
seek-ge d
seek-ge day
seek-ge dog
stats
----
b: (b, [b-c) @5=boop UPDATED)
b: (b, [b-c) @5=boop)
c: (c, . UPDATED)
cat: (., [cat-dog) @3=beep UPDATED)
cat: (., [cat-dog) @3=beep)
d: (d, [cat-dog) @3=beep)
day: (., [cat-dog) @3=beep)
.
stats: seeked 8 times (6 internal); stepped 0 times (4 internal); blocks: 89B cached; points: 4 (4B keys, 4B values), range keys: 2, contained points: 3 (0 skipped)

combined-iter
seek-lt 1
seek-lt ace
seek-lt b
seek-lt c
seek-lt cab
seek-lt cat
seek-lt d
seek-lt day
seek-lt dog
seek-lt zebra
stats
----
.
a: (a, .)
a: (a, .)
b: (b, [b-c) @5=boop UPDATED)
c: (c, . UPDATED)
c: (c, .)
cat: (., [cat-dog) @3=beep UPDATED)
d: (d, [cat-dog) @3=beep)
d: (d, [cat-dog) @3=beep)
d: (d, [cat-dog) @3=beep)
stats: seeked 10 times (0 fwd/10 rev, internal: 0 fwd/10 rev); stepped 0 times (0 fwd/0 rev, internal: 0 fwd/10 rev); blocks: 267B cached; points: 15 (15B keys, 15B values), range keys: 2, contained points: 6 (0 skipped)

rangekey-iter
first
next
next
set-bounds lower=bat upper=catatonic
first
next
next
stats
----
b [b-c) @5=boop UPDATED
cat [cat-dog) @3=beep UPDATED
.
.
bat [bat-c) @5=boop UPDATED
cat [cat-catatonic) @3=beep UPDATED
.
stats: seeked 2 times (2 internal); stepped 4 times (4 internal), range keys: 4, contained points: 0 (0 skipped)
