# Test with overlapping keys across levels, should pick top level to compact after allowed-seeks goes to 0
# Verify that Iterator.First(), Iterator.SeekGE() and Iterator.Next() call maybe sample read.
define auto-compactions=off
L0
  a.SET.4:4
L1
  a.SET.3:3
L2
  d.SET.2:2
L3
  d.SET.1:1
----
0.0:
  000004:[a#4,SET-a#4,SET]
1:
  000005:[a#3,SET-a#3,SET]
2:
  000006:[d#2,SET-d#2,SET]
3:
  000007:[d#1,SET-d#1,SET]

set allowed-seeks=2
----


iter
first
----
a: (4, .)

iter-read-compactions
----
(none)

iter
first
----
a: (4, .)

iter-read-compactions
----
(level: 0, start: a, end: a)

read-compactions
----
(none)

close-iter
----

read-compactions
----
(level: 0, start: a, end: a)

iter
seek-ge d
----
d: (2, .)

iter
prev
----
a: (4, .)

iter
next
----
d: (2, .)

iter-read-compactions
----
(level: 2, start: d, end: d)

close-iter
----

read-compactions
----
(level: 0, start: a, end: a)
(level: 2, start: d, end: d)



# Verify that Iterator.Last(), Iterator.SeekLT() and Iterator.Prev() call maybe sample read.
define auto-compactions=off
L0
  a.SET.4:4
  c.SET.8:8
L1
  a.SET.3:3
  c.SET.9:9
L2
  d.SET.2:2
  l.SET.7:7
L3
  d.SET.1:1
  l.SET.8:8
----
0.0:
  000004:[a#4,SET-c#8,SET]
1:
  000005:[a#3,SET-c#9,SET]
2:
  000006:[d#2,SET-l#7,SET]
3:
  000007:[d#1,SET-l#8,SET]

set allowed-seeks=2
----


iter
last
----
l: (8, .)

iter-read-compactions
----
(none)

iter
last
----
l: (8, .)

iter-read-compactions
----
(level: 2, start: d, end: l)

read-compactions
----
(none)

close-iter
----

read-compactions
----
(level: 2, start: d, end: l)

iter
seek-lt d
----
c: (9, .)

iter
next
----
d: (2, .)

iter
prev
----
c: (9, .)

iter-read-compactions
----
(level: 0, start: a, end: c)

close-iter
----

read-compactions
----
(level: 2, start: d, end: l)
(level: 0, start: a, end: c)


# For Iterator.Last(), Iterator.SeekLT() and Iterator.Prev(), if the key is the first key of the file or
# the only key, sampling skips it because the iterator has already moved past it.
define auto-compactions=off
L0
  a.SET.4:4
L1
  a.SET.3:3
L2
  d.SET.2:2
L3
  d.SET.1:1
----
0.0:
  000004:[a#4,SET-a#4,SET]
1:
  000005:[a#3,SET-a#3,SET]
2:
  000006:[d#2,SET-d#2,SET]
3:
  000007:[d#1,SET-d#1,SET]

set allowed-seeks=2
----


iter
last
----
d: (2, .)

iter-read-compactions
----
(none)

iter
last
----
d: (2, .)

iter-read-compactions
----
(none)

read-compactions
----
(none)

close-iter
----

read-compactions
----
(none)

iter
seek-lt d
----
a: (4, .)

iter
next
----
d: (2, .)

iter
prev
----
a: (4, .)

iter-read-compactions
----
(none)

close-iter
----

read-compactions
----
(none)




# Test with no overlapping keys across levels, should not pick any compaction
define auto-compactions=off
L0
  a.SET.4:4
L1
  b.SET.3:3
L2
  c.SET.2:2
L3
  d.SET.1:1
----
0.0:
  000004:[a#4,SET-a#4,SET]
1:
  000005:[b#3,SET-b#3,SET]
2:
  000006:[c#2,SET-c#2,SET]
3:
  000007:[d#1,SET-d#1,SET]

set allowed-seeks=3
----

iter
first
----
a: (4, .)

iter
first
----
a: (4, .)

iter
first
----
a: (4, .)

iter-read-compactions
----
(none)

close-iter
----

read-compactions
----
(none)

# Test to see if the allowedSeeks associated with a file
# is reset once it hits 0.
define auto-compactions=off
L0
  a.SET.4:4
  c.SET.8:8
L1
  a.SET.3:3
  c.SET.9:9
L2
  d.SET.2:2
  l.SET.7:7
L3
  d.SET.1:1
  l.SET.8:8
----
0.0:
  000004:[a#4,SET-c#8,SET]
1:
  000005:[a#3,SET-c#9,SET]
2:
  000006:[d#2,SET-l#7,SET]
3:
  000007:[d#1,SET-l#8,SET]

set allowed-seeks=1
----

iter
last
----
l: (8, .)

iter-read-compactions
----
(level: 2, start: d, end: l)

close-iter
----

read-compactions
----
(level: 2, start: d, end: l)

# The allowedSeeks on this file should have been reset.
# Since the value of allowedSeeks determined
# by the code is 100, we check if allowed-seeks has been
# reset to 100.
show allowed-seeks=(000006,)
----
100
