# Write a dataset, and iterate across it. Tests are not exhaustive, since
# we assume that we're calling through to pebbleIterator, which is tested
# separately.
run ok
sst_put k=a ts=3 v=a3
sst_put k=a ts=1 v=a1
sst_put_rangekey k=b end=f ts=4
sst_put k=b ts=3
sst_put k=b ts=1 v=b1
sst_put_rangekey k=d end=g ts=3
sst_put k=c ts=2
sst_put_rangekey k=g end=h ts=3
sst_put k=e ts=5 v=e5
----
>> at end:
<no data>
>> sst-0:
set: "a"/3.000000000,0 -> /BYTES/a3
set: "a"/1.000000000,0 -> /BYTES/a1
set: "b"/3.000000000,0 -> /<empty>
set: "b"/1.000000000,0 -> /BYTES/b1
set: "c"/2.000000000,0 -> /<empty>
set: "e"/5.000000000,0 -> /BYTES/e5
rangekeyset: {b-d}/4.000000000,0 -> /<empty>
rangekeyset: {d-f}/4.000000000,0 -> /<empty>
rangekeyset: {d-f}/3.000000000,0 -> /<empty>
rangekeyset: {f-g}/3.000000000,0 -> /<empty>
rangekeyset: {g-h}/3.000000000,0 -> /<empty>

# Iterate across the span.
run ok
sst_iter_new
iter_seek_ge k=a
iter_scan
----
iter_seek_ge: "a"/3.000000000,0=/BYTES/a3
iter_scan: "a"/3.000000000,0=/BYTES/a3
iter_scan: "a"/1.000000000,0=/BYTES/a1
iter_scan: {b-d}/[4.000000000,0=/<empty>] !
iter_scan: "b"/3.000000000,0=/<empty> {b-d}/[4.000000000,0=/<empty>]
iter_scan: "b"/1.000000000,0=/BYTES/b1 {b-d}/[4.000000000,0=/<empty>]
iter_scan: "c"/2.000000000,0=/<empty> {b-d}/[4.000000000,0=/<empty>]
iter_scan: {d-f}/[4.000000000,0=/<empty> 3.000000000,0=/<empty>] !
iter_scan: "e"/5.000000000,0=/BYTES/e5 {d-f}/[4.000000000,0=/<empty> 3.000000000,0=/<empty>]
iter_scan: {f-h}/[3.000000000,0=/<empty>] !
iter_scan: .

# Iterate across the span in reverse.
run ok
sst_iter_new
iter_seek_lt k=z
iter_scan reverse
----
iter_seek_lt: {f-h}/[3.000000000,0=/<empty>] !
iter_scan: {f-h}/[3.000000000,0=/<empty>] !
iter_scan: "e"/5.000000000,0=/BYTES/e5 {d-f}/[4.000000000,0=/<empty> 3.000000000,0=/<empty>] !
iter_scan: {d-f}/[4.000000000,0=/<empty> 3.000000000,0=/<empty>]
iter_scan: "c"/2.000000000,0=/<empty> {b-d}/[4.000000000,0=/<empty>] !
iter_scan: "b"/1.000000000,0=/BYTES/b1 {b-d}/[4.000000000,0=/<empty>]
iter_scan: "b"/3.000000000,0=/<empty> {b-d}/[4.000000000,0=/<empty>]
iter_scan: {b-d}/[4.000000000,0=/<empty>]
iter_scan: "a"/1.000000000,0=/BYTES/a1 !
iter_scan: "a"/3.000000000,0=/BYTES/a3
iter_scan: .

# Iterate using NextKey.
run ok
sst_iter_new
iter_seek_ge k=a
iter_next_key
iter_next_key
iter_next_key
iter_next_key
iter_next_key
iter_next_key
----
iter_seek_ge: "a"/3.000000000,0=/BYTES/a3
iter_next_key: {b-d}/[4.000000000,0=/<empty>] !
iter_next_key: "c"/2.000000000,0=/<empty> {b-d}/[4.000000000,0=/<empty>]
iter_next_key: {d-f}/[4.000000000,0=/<empty> 3.000000000,0=/<empty>] !
iter_next_key: "e"/5.000000000,0=/BYTES/e5 {d-f}/[4.000000000,0=/<empty> 3.000000000,0=/<empty>]
iter_next_key: {f-h}/[3.000000000,0=/<empty>] !
iter_next_key: .

# Seek directly to all keys, forward and reverse.
run ok
sst_iter_new
iter_seek_ge k=a
iter_seek_ge k=b
iter_seek_ge k=c
iter_seek_ge k=d
iter_seek_ge k=e
iter_seek_ge k=f
iter_seek_ge k=g
iter_seek_ge k=h
----
iter_seek_ge: "a"/3.000000000,0=/BYTES/a3
iter_seek_ge: {b-d}/[4.000000000,0=/<empty>] !
iter_seek_ge: {b-d}/[4.000000000,0=/<empty>]
iter_seek_ge: {d-f}/[4.000000000,0=/<empty> 3.000000000,0=/<empty>] !
iter_seek_ge: {d-f}/[4.000000000,0=/<empty> 3.000000000,0=/<empty>]
iter_seek_ge: {f-h}/[3.000000000,0=/<empty>] !
iter_seek_ge: {f-h}/[3.000000000,0=/<empty>]
iter_seek_ge: .

run ok
sst_iter_new
iter_seek_lt k=a
iter_seek_lt k=b
iter_seek_lt k=c
iter_seek_lt k=d
iter_seek_lt k=e
iter_seek_lt k=f
iter_seek_lt k=g
iter_seek_lt k=h
----
iter_seek_lt: .
iter_seek_lt: "a"/1.000000000,0=/BYTES/a1
iter_seek_lt: "b"/1.000000000,0=/BYTES/b1 {b-d}/[4.000000000,0=/<empty>] !
iter_seek_lt: "c"/2.000000000,0=/<empty> {b-d}/[4.000000000,0=/<empty>]
iter_seek_lt: {d-f}/[4.000000000,0=/<empty> 3.000000000,0=/<empty>] !
iter_seek_lt: "e"/5.000000000,0=/BYTES/e5 {d-f}/[4.000000000,0=/<empty> 3.000000000,0=/<empty>]
iter_seek_lt: {f-h}/[3.000000000,0=/<empty>] !
iter_seek_lt: {f-h}/[3.000000000,0=/<empty>]

# Seek to specific versions, outside and inside range keys.
run ok
sst_iter_new
iter_seek_ge k=a ts=4
iter_seek_ge k=a ts=3
iter_seek_ge k=a ts=2
iter_seek_ge k=a ts=1
iter_seek_ge k=a ts=0
----
iter_seek_ge: "a"/3.000000000,0=/BYTES/a3
iter_seek_ge: "a"/3.000000000,0=/BYTES/a3
iter_seek_ge: "a"/1.000000000,0=/BYTES/a1
iter_seek_ge: "a"/1.000000000,0=/BYTES/a1
iter_seek_ge: "a"/3.000000000,0=/BYTES/a3

run ok
sst_iter_new
iter_seek_ge k=b ts=5
iter_seek_ge k=b ts=4
iter_seek_ge k=b ts=3
iter_seek_ge k=b ts=2
iter_seek_ge k=b ts=1
iter_seek_ge k=b ts=0
----
iter_seek_ge: {b-d}/[4.000000000,0=/<empty>] !
iter_seek_ge: {b-d}/[4.000000000,0=/<empty>]
iter_seek_ge: "b"/3.000000000,0=/<empty> {b-d}/[4.000000000,0=/<empty>]
iter_seek_ge: {b-d}/[4.000000000,0=/<empty>]
iter_seek_ge: "b"/1.000000000,0=/BYTES/b1 {b-d}/[4.000000000,0=/<empty>]
iter_seek_ge: {b-d}/[4.000000000,0=/<empty>]
