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`
a = a + n
@ -616,13 +616,13 @@ proc coveredImpl[P,S](ds: IntervalSetRef[P,S]; start: P; length: S): S =
# p: [-------------)
# overlap: <------->
#
result.inc p.right - iv.left
result.incPt p.right - iv.left
else:
# iv: [--------)
# p: [--------------------)
# overlap: <------->
#
result.inc iv.len
result.incPt iv.len
break
else:
if iv.right < p.right:
@ -631,13 +631,13 @@ proc coveredImpl[P,S](ds: IntervalSetRef[P,S]; start: P; length: S): S =
# p: [--------------)
# overlap: <-------->
#
result.inc iv.right - p.left
result.incPt iv.right - p.left
else:
# iv: [----------------------)
# p: [----------)
# overlap: <--------->
#
result.inc p.len
result.incPt p.len
iv.size = p.left - iv.left
# iv: [---)

View File

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