anchor.diff:      member this.Reset() = this.Reset()
       member this.MoveNext(): bool =
         if started then
  -        if this.InputCursor.MoveNext() && this.InputCursor.Comparer.Compare(this.InputCursor.CurrentKey, last) <= 0 then
  +        if this.InputCursor.MoveNext() && endOk this.InputCursor.CurrentKey then
             true
           else false
         else (this :> ICursor<'K,'V>).MoveFirst()
  
positive.code:       task { 
          if started then
            let! moved = this.InputCursor.MoveNext(cancellationToken) 
            if moved && this.InputCursor.Comparer.Compare(this.InputCursor.CurrentKey, last) <= 0 then
              return true
            else return false
          else return (this :> ICursor<'K,'V>).MoveFirst()
  
negative.code:   let cursor = cursorFactory.Invoke()
    let mutable started = false
      
    // EQ just means inclusive
    let firstLookup = if startLookup.IsSome && startLookup.Value <> Lookup.EQ then startLookup.Value else Lookup.GE
    let lastLookup = if endLookup.IsSome && endLookup.Value <> Lookup.EQ then endLookup.Value else Lookup.LE
  
    // if limits are not set then eny key is ok
    let startOk k = 
      if startKey.IsSome then cursor.Comparer.Compare(k, startKey.Value) >= 0
      else true
    let endOk k = 
      if endKey.IsSome then cursor.Comparer.Compare(k, endKey.Value) <= 0
      else true
    let inRange k = (startOk k) && (endOk k)
  
    do
      cursor.Reset()
  