summary refs log tree commit diff stats
path: root/tests/assign
diff options
context:
space:
mode:
Diffstat (limited to 'tests/assign')
-rw-r--r--tests/assign/moverload_asgn2.nim10
-rw-r--r--tests/assign/tassign.nim62
-rw-r--r--tests/assign/tcopy.nim4
-rw-r--r--tests/assign/tgenericassign.nim2
-rw-r--r--tests/assign/tgenericassigntuples.nim2
-rw-r--r--tests/assign/tobjasgn.nim2
-rw-r--r--tests/assign/toverload_asgn1.nim75
-rw-r--r--tests/assign/toverload_asgn2.nim22
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()