diff options
author | ringabout <43030857+ringabout@users.noreply.github.com> | 2022-11-15 00:31:06 +0800 |
---|---|---|
committer | GitHub <noreply@github.com> | 2022-11-15 00:31:06 +0800 |
commit | 7f2ff909d9010646c87e04edb8863dbafb98fa6c (patch) | |
tree | 158fe41f69a86685d2166bb7a7d31552e67be7c4 /tests | |
parent | 1daf43fb149a784df0b3fd7eb219a31472b13d8c (diff) | |
download | Nim-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.nim | 37 |
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 |