summary refs log tree commit diff stats
path: root/tests/openarray/tptrarrayderef.nim
blob: 1b7ef0df0b3e59798b6bb14913712189538aabfb (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
pre { line-height: 125%; }
td.linenos .normal { color: inherit; background-color: transparent; padding-left: 5px; padding-right: 5px; }
span.linenos { color: inherit; background-color: transparent; padding-left: 5px; padding-right: 5px; }
td.linenos .special { color: #000000; background-color: #ffffc0; padding-left: 5px; padding-right: 5px; }
span.linenos.special { color: #000000; background-color: #ffffc0; padding-left: 5px; padding-right: 5px; }
.highlight .hll { background-color: #ffffcc }
.highlight .c { color: #888888 } /* Comment */
.highlight .err { color: #a61717; background-color: #e3d2d2 } /* Error */
.highlight .k { color: #008800; font-weight: bold } /* Keyword */
.highlight .ch { color: #888888 } /* Comment.Hashbang */
.highlight .cm { color: #888888 } /* Comment.Multiline */
.highlight .cp { color: #cc0000; font-weight: bold } /* Comment.Preproc */
.highlight .cpf { color: #888888 } /* Comment.PreprocFile */
.highlight .c1 { color: #888888 } /* Comment.Single */
.highlight .cs { color: #cc0000; font-weight: bold; background-color: #fff0f0 } /* Comment.Special */
.highlight .gd { color: #000000; background-color: #ffdddd } /* Generic.Deleted */
.highlight .ge { font-style: italic } /* Generic.Emph */
.highlight .ges { font-weight: bold; font-style: italic } /* Generic.EmphStrong */
.highlight .gr { color: #aa0000 } /* Generic.Error */
.highlight .gh { color: #333333 } /* Generic.Heading */
.highlight .gi { color: #000000; background-color: #ddffdd } /* Generic.Inserted */
.highlight .go { color: #888888 } /* Generic.Output */
.highlight .gp { color: #555555 } /* Generic.Prompt */
.highlight .gs { font-weight: bold } /* Generic.Strong */
.highlight .gu { color: #666666 } /* Generic.Subheading */
.highlight .gt { color: #aa00
discard """
  output: '''[1, 2, 3, 4]
3
['1', '2', '3', '4', '5', '6', '7', '8', '9', 'A', 'B', 'C']
OK
'''
"""

var
  arr = [1,2,3]
  arrp = addr(arr)
  sss = @[4,5,6,7]
  sssp = addr(sss)
  ra = new(array[3, int])
  raa = [11,12,13]

#bug #3586
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]) =
  for i in 0..a.len-1:
   doAssert(a[i] == b[i])

var a = [7,8,9]
var p = addr a
f(p[], a)
f(sssp[], sss)

ra[0] = 11
ra[1] = 12
ra[2] = 13
f(ra[], raa)

#bug #2240b
proc fillBuffer(buf: var openArray[char]) =
  for i in 0..buf.len-1:
    buf[i] = chr(i)

proc fillSeqBuffer(b: ref seq[char]) =
  fillBuffer(b[])

proc getFilledBuffer(sz: int): ref seq[char] =
  let s : ref seq[char] = new(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))

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"