diff options
Diffstat (limited to 'tests/openarray/tptrarrayderef.nim')
-rw-r--r-- | tests/openarray/tptrarrayderef.nim | 48 |
1 files changed, 39 insertions, 9 deletions
diff --git a/tests/openarray/tptrarrayderef.nim b/tests/openarray/tptrarrayderef.nim index 1e73be108..1b7ef0df0 100644 --- a/tests/openarray/tptrarrayderef.nim +++ b/tests/openarray/tptrarrayderef.nim @@ -1,6 +1,9 @@ discard """ - file: "tptrarrayderef.nim" - output: "OK" + output: '''[1, 2, 3, 4] +3 +['1', '2', '3', '4', '5', '6', '7', '8', '9', 'A', 'B', 'C'] +OK +''' """ var @@ -12,14 +15,14 @@ var raa = [11,12,13] #bug #3586 -proc mutate[T](arr:openarray[T], brr: openArray[T]) = +proc mutate[T](arr:openArray[T], brr: openArray[T]) = for i in 0..arr.len-1: doAssert(arr[i] == brr[i]) - + mutate(arr, arr) #bug #2240 -proc f(a: openarray[int], b: openArray[int]) = +proc f(a: openArray[int], b: openArray[int]) = for i in 0..a.len-1: doAssert(a[i] == b[i]) @@ -34,7 +37,7 @@ ra[2] = 13 f(ra[], raa) #bug #2240b -proc fillBuffer(buf: var openarray[char]) = +proc fillBuffer(buf: var openArray[char]) = for i in 0..buf.len-1: buf[i] = chr(i) @@ -46,9 +49,36 @@ proc getFilledBuffer(sz: int): ref seq[char] = s[] = newSeq[char](sz) fillBuffer(s[]) return s - + let aa = getFilledBuffer(3) for i in 0..aa[].len-1: doAssert(aa[i] == chr(i)) - -echo "OK" \ No newline at end of file + +var + x = [1, 2, 3, 4] + y1 = block: ( + a: (block: + echo x + cast[ptr array[2, int]](addr(x[0]))[]), + b: 3) + y2 = block: + echo y1.a[0] + y1.a[1] + cast[ptr array[4, int]](addr(x))[] +doAssert y1 == ([1, 2], 3) +doAssert y2 == [1, 2, 3, 4] + +template newOpenArray(x: var string, size: int): openArray[char] = + var z = 1 + toOpenArray(x, z, size) + +template doSomethingAndCreate(x: var string): openArray[char] = + let size = 12 + newOpenArray(x, size) + +proc sinkk(x: openArray[char]) = + echo x + +var xArrayDeref = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ" +sinkk doSomethingAndCreate(xArrayDeref) + +echo "OK" |