build
a-d:{(#11,RANGEDEL)}
b-e:{(#12,RANGEDEL) (#11,RANGEDEL)}
----
a-b:{(#11,RANGEDEL)}
b-d:{(#12,RANGEDEL) (#11,RANGEDEL) (#11,RANGEDEL)}
d-e:{(#12,RANGEDEL) (#11,RANGEDEL)}

iter
first
next
next
next
prev
prev
prev
last
next
prev
prev
prev
prev
----
   first:  a-b:{(#11,RANGEDEL)}
    next:  b-d:{(#12,RANGEDEL) (#11,RANGEDEL) (#11,RANGEDEL)}
    next:  d-e:{(#12,RANGEDEL) (#11,RANGEDEL)}
    next:  <nil>
    prev:  d-e:{(#12,RANGEDEL) (#11,RANGEDEL)}
    prev:  b-d:{(#12,RANGEDEL) (#11,RANGEDEL) (#11,RANGEDEL)}
    prev:  a-b:{(#11,RANGEDEL)}
    last:  d-e:{(#12,RANGEDEL) (#11,RANGEDEL)}
    next:  <nil>
    prev:  d-e:{(#12,RANGEDEL) (#11,RANGEDEL)}
    prev:  b-d:{(#12,RANGEDEL) (#11,RANGEDEL) (#11,RANGEDEL)}
    prev:  a-b:{(#11,RANGEDEL)}
    prev:  <nil>

iter
seek-ge c
seek-lt g
----
 seek-ge:  b-d:{(#12,RANGEDEL) (#11,RANGEDEL) (#11,RANGEDEL)}
 seek-lt:  d-e:{(#12,RANGEDEL) (#11,RANGEDEL)}

# Check that seeking outside all ranges positions the iterator properly.
iter
seek-ge z
prev
seek-lt a
next
----
 seek-ge:  <nil>
    prev:  d-e:{(#12,RANGEDEL) (#11,RANGEDEL)}
 seek-lt:  <nil>
    next:  a-b:{(#11,RANGEDEL)}


iter synthetic-seq-num=10
first
next
next
----
   first:  a-b:{(#10,RANGEDEL)}
    next:  b-d:{(#10,RANGEDEL) (#10,RANGEDEL) (#10,RANGEDEL)}
    next:  d-e:{(#10,RANGEDEL) (#10,RANGEDEL)}

# Tests with synthetic prefix.
iter synthetic-prefix=foo_
first
next
prev
seek-ge foo_a
seek-ge foo_b
seek-lt foo_b
seek-lt foo_z
----
   first:  foo_a-foo_b:{(#11,RANGEDEL)}
    next:  foo_b-foo_d:{(#12,RANGEDEL) (#11,RANGEDEL) (#11,RANGEDEL)}
    prev:  foo_a-foo_b:{(#11,RANGEDEL)}
 seek-ge:  foo_a-foo_b:{(#11,RANGEDEL)}
 seek-ge:  foo_b-foo_d:{(#12,RANGEDEL) (#11,RANGEDEL) (#11,RANGEDEL)}
 seek-lt:  foo_a-foo_b:{(#11,RANGEDEL)}
 seek-lt:  foo_d-foo_e:{(#12,RANGEDEL) (#11,RANGEDEL)}

# Try seeks that don't have the synthetic prefix.
iter synthetic-prefix=foo_
seek-ge fon_a
seek-ge fop_a
prev
seek-lt fon_a
next
seek-lt fop_a
----
 seek-ge:  foo_a-foo_b:{(#11,RANGEDEL)}
 seek-ge:  <nil>
    prev:  foo_d-foo_e:{(#12,RANGEDEL) (#11,RANGEDEL)}
 seek-lt:  <nil>
    next:  foo_a-foo_b:{(#11,RANGEDEL)}
 seek-lt:  foo_d-foo_e:{(#12,RANGEDEL) (#11,RANGEDEL)}

# Tests with synthetic suffix.
iter synthetic-suffix=@20 invariants-only
first
----
panic: synthetic suffix not supported with key kind RANGEDEL

build
a-d:{(#11,RANGEKEYSET,@9,foo)}
c-g:{(#11,RANGEKEYDEL)}
f-h:{(#11,RANGEKEYSET,@11,foo)}
----
a-c:{(#11,RANGEKEYSET,@9,foo)}
c-d:{(#11,RANGEKEYSET,@9,foo) (#11,RANGEKEYDEL)}
d-f:{(#11,RANGEKEYDEL)}
f-g:{(#11,RANGEKEYSET,@11,foo) (#11,RANGEKEYDEL)}
g-h:{(#11,RANGEKEYSET,@11,foo)}

iter synthetic-suffix=@20
first
next
next
next
----
   first:  a-c:{(#11,RANGEKEYSET,@20,foo)}
    next:  c-d:{(#11,RANGEKEYSET,@20,foo) (#11,RANGEKEYDEL)}
    next:  d-f:{(#11,RANGEKEYDEL)}
    next:  f-g:{(#11,RANGEKEYSET,@20,foo) (#11,RANGEKEYDEL)}

iter synthetic-prefix=foo_ synthetic-suffix=@20
seek-ge foo_c1
prev
next
next
next
----
 seek-ge:  foo_c-foo_d:{(#11,RANGEKEYSET,@20,foo) (#11,RANGEKEYDEL)}
    prev:  foo_a-foo_c:{(#11,RANGEKEYSET,@20,foo)}
    next:  foo_c-foo_d:{(#11,RANGEKEYSET,@20,foo) (#11,RANGEKEYDEL)}
    next:  foo_d-foo_f:{(#11,RANGEKEYDEL)}
    next:  foo_f-foo_g:{(#11,RANGEKEYSET,@20,foo) (#11,RANGEKEYDEL)}

iter synthetic-suffix=@4 invariants-only
first
----
panic: synthetic suffix "@4" >= RangeKeySet suffix "@9"

build
a-d:{(#11,RANGEKEYUNSET,@9,foo)}
----
a-d:{(#11,RANGEKEYUNSET,@9,foo)}

iter synthetic-suffix=@4 invariants-only
last
----
panic: synthetic suffix not supported with key kind RANGEKEYUNSET
