mirror of
https://github.com/nim-lang/Nim.git
synced 2025-12-28 17:04:41 +00:00
* fix openarray.len for string as openArray in VM. * fix openarray[idx] for string as openArray in VM. * fix openarray[idx]=val for string as openArray in VM. * add tests for passing string as openArray in VM. * fix issue with NimNode.len NimNode.len was also returning len for string literals. also fix logic bug in if/elif chain.
35 lines
957 B
Nim
35 lines
957 B
Nim
|
|
# tests various bug when passing string to openArray argument in VM.
|
|
# bug #6086
|
|
proc map*[T, S](data: openArray[T], op: proc (x: T): S {.closure.}):
|
|
seq[S]{.inline.} =
|
|
# map inlined from sequtils
|
|
newSeq(result, data.len)
|
|
for i in 0..data.len-1: result[i] = op(data[i])
|
|
|
|
|
|
proc set_all[T](s: var openArray[T]; val: T) =
|
|
for i in 0..<s.len:
|
|
s[i] = val
|
|
|
|
proc test() =
|
|
var a0 = "hello_world"
|
|
var a1 = [1,2,3,4,5,6,7,8,9]
|
|
var a2 = @[1,2,3,4,5,6,7,8,9]
|
|
a0.set_all('i')
|
|
a1.set_all(4)
|
|
a2.set_all(4)
|
|
doAssert a0 == "iiiiiiiiiii"
|
|
doAssert a1 == [4,4,4,4,4,4,4,4,4]
|
|
doAssert a2 == @[4,4,4,4,4,4,4,4,4]
|
|
|
|
const constval0 = "hello".map(proc(x: char): char = x)
|
|
const constval1 = [1,2,3,4].map(proc(x: int): int = x)
|
|
|
|
doAssert("hello".map(proc(x: char): char = x) == constval0)
|
|
doAssert([1,2,3,4].map(proc(x: int): int = x) == constval1)
|
|
|
|
test()
|
|
static:
|
|
test()
|