diff --git a/lib/pure/collections/sequtils.nim b/lib/pure/collections/sequtils.nim index 64a7be7a962fd..6161a74529f91 100644 --- a/lib/pure/collections/sequtils.nim +++ b/lib/pure/collections/sequtils.nim @@ -530,7 +530,8 @@ func delete*[T](s: var seq[T]; slice: Slice[int]) = a.delete(1..<1) # empty slice assert a == @[10, 13] when compileOption("boundChecks"): - if not (slice.a < s.len and slice.a >= 0 and slice.b < s.len): + if not (slice.a <= s.len and slice.a >= 0 and slice.b < s.len and + slice.b - slice.a >= -1): raise newException(IndexDefect, $(slice: slice, len: s.len)) if slice.b >= slice.a: template defaultImpl = diff --git a/lib/pure/strutils.nim b/lib/pure/strutils.nim index e4a4a5ec1d993..50e04de9ae0d7 100644 --- a/lib/pure/strutils.nim +++ b/lib/pure/strutils.nim @@ -1499,7 +1499,8 @@ func delete*(s: var string, slice: Slice[int]) = a.delete(1..<1) # empty slice assert a == "ad" when compileOption("boundChecks"): - if not (slice.a < s.len and slice.a >= 0 and slice.b < s.len): + if not (slice.a <= s.len and slice.a >= 0 and slice.b < s.len and + slice.b - slice.a >= -1): raise newException(IndexDefect, $(slice: slice, len: s.len)) if slice.b >= slice.a: var i = slice.a @@ -2455,7 +2456,7 @@ func trimZeros*(x: var string; decimalSep = '.') = var pos = last while pos >= 0 and x[pos] == '0': dec(pos) if pos > sPos: inc(pos) - x.delete(pos, last) + x.delete(pos .. last) type BinaryPrefixMode* = enum ## The different names for binary prefixes. diff --git a/tests/stdlib/tsequtils.nim b/tests/stdlib/tsequtils.nim index 179f619f0c254..c7ad82e9abf61 100644 --- a/tests/stdlib/tsequtils.nim +++ b/tests/stdlib/tsequtils.nim @@ -503,7 +503,7 @@ template main = doAssertRaises(IndexDefect): a.delete(-1 .. -1) doAssertRaises(IndexDefect): a.delete(5..5) doAssertRaises(IndexDefect): a.delete(5..3) - doAssertRaises(IndexDefect): a.delete(5..<5) # edge case + a.delete(5..<5) # edge case doAssert a == @[10, 11, 12, 13, 14] a.delete(4..4) doAssert a == @[10, 11, 12, 13] @@ -518,7 +518,8 @@ template main = a.delete(0..0) doAssert a == @[] doAssertRaises(IndexDefect): a.delete(0..0) - doAssertRaises(IndexDefect): a.delete(0..<0) # edge case + a.delete(0..<0) + doAssert a == @[] # edge case block: type A = object a0: int diff --git a/tests/stdlib/tstrutils.nim b/tests/stdlib/tstrutils.nim index 8000b6b070499..11aa275c4e15a 100644 --- a/tests/stdlib/tstrutils.nim +++ b/tests/stdlib/tstrutils.nim @@ -212,7 +212,8 @@ template main() = s = "abc" doAssertRaises(IndexDefect): delete(s, -1 .. -2) doAssertRaises(IndexDefect): delete(s, 2..3) - doAssertRaises(IndexDefect): delete(s, 3..2) + delete(s, 3..2) + doAssert s == "abc" delete(s, 2..2) doAssert s == "ab" delete(s, 1..0)