summary refs log tree commit diff stats
path: root/tests
diff options
context:
space:
mode:
authorringabout <43030857+ringabout@users.noreply.github.com>2022-11-15 00:31:06 +0800
committerGitHub <noreply@github.com>2022-11-15 00:31:06 +0800
commit7f2ff909d9010646c87e04edb8863dbafb98fa6c (patch)
tree158fe41f69a86685d2166bb7a7d31552e67be7c4 /tests
parent1daf43fb149a784df0b3fd7eb219a31472b13d8c (diff)
downloadNim-7f2ff909d9010646c87e04edb8863dbafb98fa6c.tar.gz
fixes object default fields bugs and add tests (#20839)
* fixes object default fields bugs and add tests

* Update compiler/semmagic.nim

* Update compiler/sem.nim

* Update compiler/sem.nim

Co-authored-by: Andreas Rumpf <rumpf_a@web.de>
Diffstat (limited to 'tests')
-rw-r--r--tests/objects/tobject_default_value.nim37
1 files changed, 34 insertions, 3 deletions
diff --git a/tests/objects/tobject_default_value.nim b/tests/objects/tobject_default_value.nim
index 789571bbf..7ea4b42ae 100644
--- a/tests/objects/tobject_default_value.nim
+++ b/tests/objects/tobject_default_value.nim
@@ -3,7 +3,7 @@ discard """
   targets: "c cpp js"
 """
 
-import std/[times, tables, macros]
+import std/[times, macros]
 
 type
   Guess = object
@@ -27,6 +27,10 @@ import mobject_default_value
 block:
   let x = Default()
   doAssert x.se == 0'i32
+
+block:
+  let x = default(Default)
+  doAssert x.se == 0'i32
 # echo Default(poi: 12)
 # echo Default(poi: 17)
 
@@ -120,6 +124,19 @@ template main {.dirty.} =
     doAssert rVal == 0 # it should be 1
     doAssert objVal.r == 1
 
+  block: # bug #16744
+    type
+      R = range[1..10]
+      Obj = object
+        r: R
+
+    var
+      rVal: R = default(R) # Works fine
+      objVal = Obj()
+
+    doAssert rVal == 0 # it should be 1
+    doAssert objVal.r == 1
+
   block: # bug #3608
     type
       abc = ref object
@@ -148,6 +165,9 @@ template main {.dirty.} =
     let y = ObjectBaseDistinct(default(ObjectBase))
     doAssert ObjectBase(y).value == 12
 
+    let m = ObjectBaseDistinct(ObjectBase())
+    doAssert ObjectBase(m).value == 12
+
     proc hello(): ObjectBaseDistinct =
       result = ObjectBaseDistinct(default(ObjectBase))
 
@@ -193,12 +213,24 @@ template main {.dirty.} =
     doAssert x.name.scale == 1
 
   block:
+    let x = Object2()
+    doAssert x.name.value == 12
+    doAssert x.name.time == 1.2
+    doAssert x.name.scale == 1
+
+  block:
     var x: ref Object2
     new x
     doAssert x[] == default(Object2)
 
   block:
-    var x = default(Object3) # todo Object3() ?
+    var x = default(Object3)
+    doAssert x.obj.name.value == 12
+    doAssert x.obj.name.time == 1.2
+    doAssert x.obj.name.scale == 1
+
+  block:
+    var x = Object3()
     doAssert x.obj.name.value == 12
     doAssert x.obj.name.time == 1.2
     doAssert x.obj.name.scale == 1
@@ -275,7 +307,6 @@ template main {.dirty.} =
     doAssert y.time == 1.2
     doAssert y.scale == 1
 
-
   block:
     var x: PrellDeque[int]
     doAssert x.pendingTasks == 0