Fix issues #151 and #153 (#154)

This commit is contained in:
Jordan Hrycaj 2022-11-17 14:54:48 +00:00 committed by GitHub
parent 8a1b6ab4dc
commit 665e1d1604
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
2 changed files with 22 additions and 19 deletions

View File

@ -327,7 +327,7 @@ proc len[P,S](iv: Segm[P,S]): S =
# ------ # ------
proc inc[P,S](a: var P; n: S) = proc incPt[P,S](a: var P; n: S) =
## Might not be generally available for point `P` and scalar `S` ## Might not be generally available for point `P` and scalar `S`
a = a + n a = a + n
@ -616,13 +616,13 @@ proc coveredImpl[P,S](ds: IntervalSetRef[P,S]; start: P; length: S): S =
# p: [-------------) # p: [-------------)
# overlap: <-------> # overlap: <------->
# #
result.inc p.right - iv.left result.incPt p.right - iv.left
else: else:
# iv: [--------) # iv: [--------)
# p: [--------------------) # p: [--------------------)
# overlap: <-------> # overlap: <------->
# #
result.inc iv.len result.incPt iv.len
break break
else: else:
if iv.right < p.right: if iv.right < p.right:
@ -631,13 +631,13 @@ proc coveredImpl[P,S](ds: IntervalSetRef[P,S]; start: P; length: S): S =
# p: [--------------) # p: [--------------)
# overlap: <--------> # overlap: <-------->
# #
result.inc iv.right - p.left result.incPt iv.right - p.left
else: else:
# iv: [----------------------) # iv: [----------------------)
# p: [----------) # p: [----------)
# overlap: <---------> # overlap: <--------->
# #
result.inc p.len result.incPt p.len
iv.size = p.left - iv.left iv.size = p.left - iv.left
# iv: [---) # iv: [---)

View File

@ -117,25 +117,28 @@ suite "SortedSet: Sorted list based on red-black tree":
test "Delete items": test "Delete items":
var seen: seq[int] var seen: seq[int]
let sub7 = keyList.len div 7 let sub7 = keyList.len div 7
for n in toSeq(countup(0,sub7)).concat(toSeq(countup(3*sub7,4*sub7))): if sl.len == 0:
let skip()
key = keyList[n] else:
canDeleteOk = (key notin seen) for n in toSeq(countup(0,sub7)).concat(toSeq(countup(3*sub7,4*sub7))):
let
key = keyList[n]
canDeleteOk = (key notin seen)
data = sl.delete(key) data = sl.delete(key)
slCheck = sl.verify slCheck = sl.verify
if key notin seen: if key notin seen:
seen.add key seen.add key
if slCheck.isErr: if slCheck.isErr:
check slCheck.error[1] == rbOk # force message check slCheck.error[1] == rbOk # force message
check data.isOk == canDeleteOk check data.isOk == canDeleteOk
if canDeleteOk: if data.isOk: # assuming data.isOk == canDeleteOk if correct
check data.value.key == key check data.value.key == key
check seen.len + sl.len + rej.len == keyList.len check seen.len + sl.len + rej.len == keyList.len
# ------------------------------------------------------------------------------ # ------------------------------------------------------------------------------
# End # End