summary refs log tree commit diff stats
path: root/tests/destructor/tnewruntime_misc.nim
blob: e6be5824daaf99f8ede96a0e003487578fb273ff (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
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
discard """
  cmd: '''nim cpp --newruntime --threads:on $file'''
  output: '''(field: "value")
Indeed
axc
(v: 10)
0  new: 0
...
destroying GenericObj[T] GenericObj[system.int]
'''
"""

import core / allocators
import system / ansi_c

import tables

type
  Node = ref object
    field: string

# bug #11807
import os
putEnv("HEAPTRASHING", "Indeed")

proc main =
  var w = newTable[string, owned Node]()
  w["key"] = Node(field: "value")
  echo w["key"][]
  echo getEnv("HEAPTRASHING")

  # bug #11891
  var x = "abc"
  x[1] = 'x'
  echo x

main()

# bug #11745

type
  Foo = object
    bar: seq[int]

var x = [Foo()]

# bug #11563
type
  MyTypeType = enum
    Zero, One
  MyType = object
    case kind: MyTypeType
    of Zero:
      s*: seq[MyType]
    of One:
      x*: int
var t: MyType

# bug #11254
proc test(p: owned proc()) =
  let x = (proc())p

test(proc() = discard)

# bug #10689

type
  O = object
    v: int

proc `=sink`(d: var O, s: O) =
  d.v = s.v

proc selfAssign =
  var o = O(v: 10)
  o = o
  echo o

selfAssign()

# bug #11833
type FooAt = object

proc testWrongAt() =
  var x = @[@[FooAt()]]

testWrongAt()

let (a, d) = allocCounters()
discard cprintf("%ld  new: %ld\n", a - unpairedEnvAllocs() - d, allocs)

#-------------------------------------------------
type
  Table[A, B] = object
    x: seq[(A, B)]


proc toTable[A,B](p: sink openArray[(A, B)]): Table[A, B] =
  for zz in mitems(p):
    result.x.add move(zz)


let table = {"a": new(int)}.toTable()

# bug # #12051

type
  GenericObj[T] = object
    val: T
  Generic[T] = owned ref GenericObj[T]

proc `=destroy`[T](x: var GenericObj[T]) =
  echo "destroying GenericObj[T] ", x.typeof # to know when its being destroyed

proc main12() =
  let gnrc = Generic[int](val: 42)
  echo "..."

main12()