1discard """ 2 output: 3''' 4TEMP=C:\Programs\xyz\bin 58 5 0 0 6pre test a:test b:1 c:2 haha:3 7assignment test a:test b:1 c:2 haha:3 8abc123 9''' 10""" 11 12#[ 13Concrete '=' 14Concrete '=' 15Concrete '=' 16Concrete '=' 17Concrete '=' 18GenericT[T] '=' int 19GenericT[T] '=' float 20GenericT[T] '=' float 21GenericT[T] '=' float 22GenericT[T] '=' string 23GenericT[T] '=' int8 24GenericT[T] '=' bool 25GenericT[T] '=' bool 26GenericT[T] '=' bool 27GenericT[T] '=' bool 28]# 29 30block tassign: 31# Test the assignment operator for complex types which need RTTI 32 type 33 TRec = object 34 x, y: int 35 s: string 36 seq: seq[string] 37 arr: seq[seq[array[0..3, string]]] 38 TRecSeq = seq[TRec] 39 40 proc test() = 41 var 42 a, b: TRec 43 a.x = 1 44 a.y = 2 45 a.s = "Hallo!" 46 a.seq = @["abc", "def", "ghi", "jkl"] 47 a.arr = @[] 48 setLen(a.arr, 4) 49 a.arr[0] = @[] 50 a.arr[1] = @[] 51 52 b = a # perform a deep copy here! 53 b.seq = @["xyz", "huch", "was", "soll"] 54 doAssert len(a.seq) == 4 55 doAssert a.seq[3] == "jkl" 56 doAssert len(b.seq) == 4 57 doAssert b.seq[3] == "soll" 58 doAssert b.y == 2 59 60 test() 61 62 63 64import strutils 65block tcopy: 66 proc main() = 67 const 68 example = r"TEMP=C:\Programs\xyz\bin" 69 var 70 a, b: string 71 p: int 72 p = find(example, "=") 73 a = substr(example, 0, p-1) 74 b = substr(example, p+1) 75 writeLine(stdout, a & '=' & b) 76 77 main() 78 79 80 81block tgenericassign: 82 type 83 TAny = object {.pure.} 84 value: pointer 85 rawType: pointer 86 87 proc newAny(value, rawType: pointer): TAny = 88 result.value = value 89 result.rawType = rawType 90 91 var name: cstring = "example" 92 93 var ret: seq[tuple[name: string, a: TAny]] = @[] 94 for i in 0 .. 8000: 95 var tup = ($name, newAny(nil, nil)) 96 doAssert(tup[0] == "example") 97 ret.add(tup) 98 doAssert(ret[ret.len()-1][0] == "example") 99 100 101 102block tgenericassign_tuples: 103 var t, s: tuple[x: string, c: int] 104 105 proc ugh: seq[tuple[x: string, c: int]] = 106 result = @[("abc", 232)] 107 108 t = ugh()[0] 109 s = t 110 s = ugh()[0] 111 112 doAssert s[0] == "abc" 113 doAssert s[1] == 232 114 115 116 117block tobjasgn: 118 type 119 TSomeObj = object of RootObj 120 a, b: int 121 PSomeObj = ref object 122 a, b: int 123 124 var a = TSomeObj(a: 8) 125 var b = PSomeObj(a: 5) 126 echo a.a, " ", b.a, " ", a.b, " ", b.b 127 128 # bug #575 129 130 type 131 Something = object of RootObj 132 a: string 133 b, c: int32 134 135 type 136 Other = object of Something 137 haha: int 138 139 proc `$`(x: Other): string = 140 result = "a:" & x.a & " b:" & $x.b & " c:" & $x.c & " haha:" & $x.haha 141 142 var 143 t: Other 144 145 t.a = "test" 146 t.b = 1 147 t.c = 2 148 t.haha = 3 149 150 echo "pre test ", $t 151 var x = t 152 echo "assignment test ", x 153 154 155when false: 156 type 157 Concrete = object 158 a, b: string 159 160 proc `=`(d: var Concrete; src: Concrete) = 161 shallowCopy(d.a, src.a) 162 shallowCopy(d.b, src.b) 163 echo "Concrete '='" 164 165 var x, y: array[0..2, Concrete] 166 var cA, cB: Concrete 167 168 var cATup, cBTup: tuple[x: int, ha: Concrete] 169 170 x = y 171 cA = cB 172 cATup = cBTup 173 174 type 175 GenericT[T] = object 176 a, b: T 177 178 proc `=`[T](d: var GenericT[T]; src: GenericT[T]) = 179 shallowCopy(d.a, src.a) 180 shallowCopy(d.b, src.b) 181 echo "GenericT[T] '=' ", typeof(T).name 182 183 var ag: GenericT[int] 184 var bg: GenericT[int] 185 186 ag = bg 187 188 var xg, yg: array[0..2, GenericT[float]] 189 var cAg, cBg: GenericT[string] 190 191 var cATupg, cBTupg: tuple[x: int, ha: GenericT[int8]] 192 193 xg = yg 194 cAg = cBg 195 cATupg = cBTupg 196 197 var caSeqg, cbSeqg: seq[GenericT[bool]] 198 newSeq(cbSeqg, 4) 199 caSeqg = cbSeqg 200 201 when false: 202 type 203 Foo = object 204 case b: bool 205 of false: xx: GenericT[int] 206 of true: yy: bool 207 208 var 209 a, b: Foo 210 a = b 211 212block tgeneric_assign_varargs: 213 template fatal(msgs: varargs[string]) = 214 for msg in msgs: 215 stdout.write(msg) 216 stdout.write('\n') 217 218 fatal "abc", "123" 219