From 251fec94ce07ae871e64ae66d4e552546321eb40 Mon Sep 17 00:00:00 2001 From: ringabout <43030857+ringabout@users.noreply.github.com> Date: Thu, 23 Mar 2023 21:47:17 +0800 Subject: [PATCH] add some tests --- tests/spec/tobjectconstr_unamed.nim | 78 +++++++++++++++++++++++++++++ 1 file changed, 78 insertions(+) create mode 100644 tests/spec/tobjectconstr_unamed.nim diff --git a/tests/spec/tobjectconstr_unamed.nim b/tests/spec/tobjectconstr_unamed.nim new file mode 100644 index 0000000000..1a9f41c426 --- /dev/null +++ b/tests/spec/tobjectconstr_unamed.nim @@ -0,0 +1,78 @@ +type + Vector = object + a: int = 999 + b, c: int + +block: # positional construction + ## It specifies all the unnamed parameters + var x = Vector(1, 2, 3) + doAssert x.b == 2 + +block: + ## unnamed parameters can be mixed with named parameters + block: + var x = Vector(a: 1, 2, 3) + doAssert x.c == 3 + + block: + var x = Vector(1, b: 2, 3) + doAssert x.c == 3 + + block: + var x = Vector(1, 2, c: 3) + doAssert x.c == 3 + + block: + ## Parameters can be omitted before a named parameter + var x = Vector(b: 2, 3) + doAssert x.c == 3 + + +block: + ## Object variants support unnamed parameters for tags, which should be known at the compile time. + type + Color = enum + Red, Blue, Yellow + Factor = object + id: int + case flag: Color + of Red: + num: int + of Blue, Yellow: + done: bool + name: string + + block: + var x = Factor(1, Red, 2, "1314") + doAssert x.num == 2 + + block: + var x = Factor(1, Blue, true, "1314") + doAssert x.done == true + + block: + var x = Factor(1, Yellow, false, "1314") + doAssert x.done == false + + + type + Ciao = object + id: int + case flag: bool = false + of true: + num: int + of false: + done: bool + name: string + + block: + var x = Ciao(12, false, false, "123") + doAssert x.num == false + + block: + var x = Ciao(12, flag: true, 1, "123") + doAssert x.num == 1 + + block: + var x = Ciao(flag: true, 1, "123") + doAssert x.num == 1