diff options
Diffstat (limited to 'tests/assign')
-rw-r--r-- | tests/assign/moverload_asgn2.nim | 10 | ||||
-rw-r--r-- | tests/assign/tassign.nim | 62 | ||||
-rw-r--r-- | tests/assign/tcopy.nim | 4 | ||||
-rw-r--r-- | tests/assign/tgenericassign.nim | 2 | ||||
-rw-r--r-- | tests/assign/tgenericassigntuples.nim | 2 | ||||
-rw-r--r-- | tests/assign/tobjasgn.nim | 2 | ||||
-rw-r--r-- | tests/assign/toverload_asgn1.nim | 75 | ||||
-rw-r--r-- | tests/assign/toverload_asgn2.nim | 22 |
8 files changed, 143 insertions, 36 deletions
diff --git a/tests/assign/moverload_asgn2.nim b/tests/assign/moverload_asgn2.nim new file mode 100644 index 000000000..6620adbeb --- /dev/null +++ b/tests/assign/moverload_asgn2.nim @@ -0,0 +1,10 @@ +type + Concrete* = object + a*, b*: string + rc*: int # refcount + +proc `=`(d: var Concrete; src: Concrete) = + shallowCopy(d.a, src.a) + shallowCopy(d.b, src.b) + dec d.rc + d.rc = src.rc + 1 diff --git a/tests/assign/tassign.nim b/tests/assign/tassign.nim index f51c20783..4c173d04f 100644 --- a/tests/assign/tassign.nim +++ b/tests/assign/tassign.nim @@ -1,31 +1,31 @@ -# Test the assignment operator for complex types which need RTTI - -type - TRec = object - x, y: int - s: string - seq: seq[string] - arr: seq[seq[array[0..3, string]]] - TRecSeq = seq[TRec] - -proc test() = - var - a, b: TRec - a.x = 1 - a.y = 2 - a.s = "Hallo!" - a.seq = @["abc", "def", "ghi", "jkl"] - a.arr = @[] - setLen(a.arr, 4) - a.arr[0] = @[] - a.arr[1] = @[] - - b = a # perform a deep copy here! - b.seq = @["xyz", "huch", "was", "soll"] - writeln(stdout, len(a.seq)) - writeln(stdout, a.seq[3]) - writeln(stdout, len(b.seq)) - writeln(stdout, b.seq[3]) - writeln(stdout, b.y) - -test() +# Test the assignment operator for complex types which need RTTI + +type + TRec = object + x, y: int + s: string + seq: seq[string] + arr: seq[seq[array[0..3, string]]] + TRecSeq = seq[TRec] + +proc test() = + var + a, b: TRec + a.x = 1 + a.y = 2 + a.s = "Hallo!" + a.seq = @["abc", "def", "ghi", "jkl"] + a.arr = @[] + setLen(a.arr, 4) + a.arr[0] = @[] + a.arr[1] = @[] + + b = a # perform a deep copy here! + b.seq = @["xyz", "huch", "was", "soll"] + writeLine(stdout, len(a.seq)) + writeLine(stdout, a.seq[3]) + writeLine(stdout, len(b.seq)) + writeLine(stdout, b.seq[3]) + writeLine(stdout, b.y) + +test() diff --git a/tests/assign/tcopy.nim b/tests/assign/tcopy.nim index 5feb0d6b3..1e5bc3cba 100644 --- a/tests/assign/tcopy.nim +++ b/tests/assign/tcopy.nim @@ -16,8 +16,8 @@ proc main() = p = find(example, "=") a = substr(example, 0, p-1) b = substr(example, p+1) - writeln(stdout, a & '=' & b) - #writeln(stdout, b) + writeLine(stdout, a & '=' & b) + #writeLine(stdout, b) main() #OUT TEMP=C:\Programs\xyz\bin diff --git a/tests/assign/tgenericassign.nim b/tests/assign/tgenericassign.nim index 654b0ab8f..bd9c6c21b 100644 --- a/tests/assign/tgenericassign.nim +++ b/tests/assign/tgenericassign.nim @@ -6,7 +6,7 @@ type TAny* = object {.pure.} value*: pointer rawType: pointer - + proc newAny(value, rawType: pointer): TAny = result.value = value result.rawType = rawType diff --git a/tests/assign/tgenericassigntuples.nim b/tests/assign/tgenericassigntuples.nim index 6dd63a984..cca244577 100644 --- a/tests/assign/tgenericassigntuples.nim +++ b/tests/assign/tgenericassigntuples.nim @@ -4,7 +4,7 @@ discard """ var t, s: tuple[x: string, c: int] -proc ugh: seq[tuple[x: string, c: int]] = +proc ugh: seq[tuple[x: string, c: int]] = result = @[("abc", 232)] t = ugh()[0] diff --git a/tests/assign/tobjasgn.nim b/tests/assign/tobjasgn.nim index 23a31252d..e731d9e93 100644 --- a/tests/assign/tobjasgn.nim +++ b/tests/assign/tobjasgn.nim @@ -12,7 +12,7 @@ type a, b: int PSomeObj = ref object a, b: int - + var a = TSomeObj(a: 8) var b = PSomeObj(a: 5) echo a.a, " ", b.a, " ", a.b, " ", b.b diff --git a/tests/assign/toverload_asgn1.nim b/tests/assign/toverload_asgn1.nim new file mode 100644 index 000000000..dbc3a71c4 --- /dev/null +++ b/tests/assign/toverload_asgn1.nim @@ -0,0 +1,75 @@ +discard """ + output: '''Concrete '=' +Concrete '=' +Concrete '=' +Concrete '=' +Concrete '=' +GenericT[T] '=' int +GenericT[T] '=' float +GenericT[T] '=' float +GenericT[T] '=' float +GenericT[T] '=' string +GenericT[T] '=' int8 +GenericT[T] '=' bool +GenericT[T] '=' bool +GenericT[T] '=' bool +GenericT[T] '=' bool''' +""" + +import typetraits + +type + Concrete = object + a, b: string + +proc `=`(d: var Concrete; src: Concrete) = + shallowCopy(d.a, src.a) + shallowCopy(d.b, src.b) + echo "Concrete '='" + +var x, y: array[0..2, Concrete] +var cA, cB: Concrete + +var cATup, cBTup: tuple[x: int, ha: Concrete] + +x = y +cA = cB +cATup = cBTup + +type + GenericT[T] = object + a, b: T + +proc `=`[T](d: var GenericT[T]; src: GenericT[T]) = + shallowCopy(d.a, src.a) + shallowCopy(d.b, src.b) + echo "GenericT[T] '=' ", type(T).name + +var ag: GenericT[int] +var bg: GenericT[int] + +ag = bg + +var xg, yg: array[0..2, GenericT[float]] +var cAg, cBg: GenericT[string] + +var cATupg, cBTupg: tuple[x: int, ha: GenericT[int8]] + +xg = yg +cAg = cBg +cATupg = cBTupg + +var caSeqg, cbSeqg: seq[GenericT[bool]] +newSeq(cbSeqg, 4) +caSeqg = cbSeqg + +when false: + type + Foo = object + case b: bool + of false: xx: GenericT[int] + of true: yy: bool + + var + a, b: Foo + a = b diff --git a/tests/assign/toverload_asgn2.nim b/tests/assign/toverload_asgn2.nim new file mode 100644 index 000000000..243c90494 --- /dev/null +++ b/tests/assign/toverload_asgn2.nim @@ -0,0 +1,22 @@ +discard """ + output: '''i value 88 +2aa''' +""" + +import moverload_asgn2 + +proc passAround(i: int): Concrete = + echo "i value ", i + result = Concrete(a: "aa", b: "bb", rc: 0) + +proc main = + let + i = 88 + v = passAround(i) + z = v.a + var + x: Concrete + x = v + echo x.rc, z # 2aa + +main() |