Merge pull request #7495 from GULPF/fix-fill-bug
Fix algorithm.fill for empty input
This commit is contained in:
commit
7ef0cfebb5
2 changed files with 24 additions and 14 deletions
|
|
@ -24,16 +24,20 @@ proc `*`*(x: int, order: SortOrder): int {.inline.} =
|
||||||
var y = order.ord - 1
|
var y = order.ord - 1
|
||||||
result = (x xor y) - y
|
result = (x xor y) - y
|
||||||
|
|
||||||
proc fill*[T](a: var openArray[T], first, last: Natural, value: T) =
|
template fillImpl[T](a: var openArray[T], first, last: int, value: T) =
|
||||||
## fills the array ``a[first..last]`` with `value`.
|
|
||||||
var x = first
|
var x = first
|
||||||
while x <= last:
|
while x <= last:
|
||||||
a[x] = value
|
a[x] = value
|
||||||
inc(x)
|
inc(x)
|
||||||
|
|
||||||
|
proc fill*[T](a: var openArray[T], first, last: Natural, value: T) =
|
||||||
|
## fills the array ``a[first..last]`` with `value`.
|
||||||
|
fillImpl(a, first, last, value)
|
||||||
|
|
||||||
proc fill*[T](a: var openArray[T], value: T) =
|
proc fill*[T](a: var openArray[T], value: T) =
|
||||||
## fills the array `a` with `value`.
|
## fills the array `a` with `value`.
|
||||||
fill(a, 0, a.high, value)
|
fillImpl(a, 0, a.high, value)
|
||||||
|
|
||||||
|
|
||||||
proc reverse*[T](a: var openArray[T], first, last: Natural) =
|
proc reverse*[T](a: var openArray[T], first, last: Natural) =
|
||||||
## reverses the array ``a[first..last]``.
|
## reverses the array ``a[first..last]``.
|
||||||
|
|
@ -494,3 +498,20 @@ when isMainModule:
|
||||||
doAssert s4 == "xxxefgabcdxxx"
|
doAssert s4 == "xxxefgabcdxxx"
|
||||||
doAssert s5.rotateLeft(3 ..< 10, 11) == 6
|
doAssert s5.rotateLeft(3 ..< 10, 11) == 6
|
||||||
doAssert s5 == "xxxefgabcdxxx"
|
doAssert s5 == "xxxefgabcdxxx"
|
||||||
|
|
||||||
|
block product:
|
||||||
|
doAssert product(newSeq[seq[int]]()) == newSeq[seq[int]](), "empty input"
|
||||||
|
doAssert product(@[newSeq[int](), @[], @[]]) == newSeq[seq[int]](), "bit more empty input"
|
||||||
|
doAssert product(@[@[1,2]]) == @[@[1,2]], "a simple case of one element"
|
||||||
|
doAssert product(@[@[1,2], @[3,4]]) == @[@[2,4],@[1,4],@[2,3],@[1,3]], "two elements"
|
||||||
|
doAssert product(@[@[1,2], @[3,4], @[5,6]]) == @[@[2,4,6],@[1,4,6],@[2,3,6],@[1,3,6], @[2,4,5],@[1,4,5],@[2,3,5],@[1,3,5]], "three elements"
|
||||||
|
doAssert product(@[@[1,2], @[]]) == newSeq[seq[int]](), "two elements, but one empty"
|
||||||
|
|
||||||
|
block lowerBound:
|
||||||
|
doAssert lowerBound([1,2,4], 3, system.cmp[int]) == 2
|
||||||
|
doAssert lowerBound([1,2,2,3], 4, system.cmp[int]) == 4
|
||||||
|
doAssert lowerBound([1,2,3,10], 11) == 4
|
||||||
|
|
||||||
|
block fillEmptySeq:
|
||||||
|
var s = newSeq[int]()
|
||||||
|
s.fill(0)
|
||||||
|
|
@ -1,11 +0,0 @@
|
||||||
import algorithm
|
|
||||||
|
|
||||||
doAssert product[int](newSeq[seq[int]]()) == newSeq[seq[int]](), "empty input"
|
|
||||||
doAssert product[int](@[newSeq[int](), @[], @[]]) == newSeq[seq[int]](), "bit more empty input"
|
|
||||||
doAssert product(@[@[1,2]]) == @[@[1,2]], "a simple case of one element"
|
|
||||||
doAssert product(@[@[1,2], @[3,4]]) == @[@[2,4],@[1,4],@[2,3],@[1,3]], "two elements"
|
|
||||||
doAssert product(@[@[1,2], @[3,4], @[5,6]]) == @[@[2,4,6],@[1,4,6],@[2,3,6],@[1,3,6], @[2,4,5],@[1,4,5],@[2,3,5],@[1,3,5]], "three elements"
|
|
||||||
doAssert product(@[@[1,2], @[]]) == newSeq[seq[int]](), "two elements, but one empty"
|
|
||||||
doAssert lowerBound([1,2,4], 3, system.cmp[int]) == 2
|
|
||||||
doAssert lowerBound([1,2,2,3], 4, system.cmp[int]) == 4
|
|
||||||
doAssert lowerBound([1,2,3,10], 11) == 4
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue