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: (interface (dir, seek, step): (fwd, 0, 0), (rev, 0, 0)), (internal (dir, seek, step): (fwd, 0, 0), (rev, 0, 0))
a: (a, .)
b: (b, [b-c) @5=boop UPDATED)
stats: (interface (dir, seek, step): (fwd, 1, 1), (rev, 0, 0)), (internal (dir, seek, step): (fwd, 1, 2), (rev, 0, 0)),
(internal-stats: (block-bytes: (total 89B, cached 0B, read-time 0s)), (points: (count 2, key-bytes 2B, value-bytes 2B, tombstoned 0))),
(range-key-stats: (count 1), (contained points: (count 1, skipped 0)))
c: (c, . UPDATED)
cat: (., [cat-dog) @3=beep UPDATED)
d: (d, [cat-dog) @3=beep)
.
stats: (interface (dir, seek, step): (fwd, 1, 5), (rev, 0, 0)), (internal (dir, seek, step): (fwd, 1, 6), (rev, 0, 0)),
(internal-stats: (block-bytes: (total 89B, cached 0B, read-time 0s)), (points: (count 4, key-bytes 4B, value-bytes 4B, tombstoned 0))),
(range-key-stats: (count 2), (contained points: (count 2, skipped 0)))

# 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: (interface (dir, seek, step): (fwd, 1, 5), (rev, 0, 0)), (internal (dir, seek, step): (fwd, 1, 6), (rev, 0, 0)),
(internal-stats: (block-bytes: (total 89B, cached 89B, read-time 0s)), (points: (count 4, key-bytes 4B, value-bytes 4B, tombstoned 0))),
(range-key-stats: (count 2), (contained points: (count 2, skipped 0)))

# 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: (interface (dir, seek, step): (fwd, 0, 0), (rev, 1, 5)), (internal (dir, seek, step): (fwd, 0, 0), (rev, 1, 6)),
(internal-stats: (block-bytes: (total 89B, cached 89B, read-time 0s)), (points: (count 4, key-bytes 4B, value-bytes 4B, tombstoned 0))),
(range-key-stats: (count 2), (contained points: (count 2, skipped 0)))

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: (interface (dir, seek, step): (fwd, 8, 0), (rev, 0, 0)), (internal (dir, seek, step): (fwd, 6, 4), (rev, 0, 0)),
(internal-stats: (block-bytes: (total 89B, cached 89B, read-time 0s)), (points: (count 4, key-bytes 4B, value-bytes 4B, tombstoned 0))),
(range-key-stats: (count 2), (contained points: (count 3, skipped 0)))

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: (interface (dir, seek, step): (fwd, 0, 0), (rev, 10, 0)), (internal (dir, seek, step): (fwd, 0, 0), (rev, 10, 10)),
(internal-stats: (block-bytes: (total 267B, cached 267B, read-time 0s)), (points: (count 15, key-bytes 15B, value-bytes 15B, tombstoned 0))),
(range-key-stats: (count 2), (contained points: (count 6, skipped 0)))

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: (interface (dir, seek, step): (fwd, 2, 4), (rev, 0, 0)), (internal (dir, seek, step): (fwd, 2, 4), (rev, 0, 0)),
(range-key-stats: (count 4), (contained points: (count 0, skipped 0)))
