mirror of
https://github.com/nim-lang/Nim.git
synced 2025-12-28 17:04:41 +00:00
59 lines
1.2 KiB
Nim
59 lines
1.2 KiB
Nim
|
|
type
|
|
AObj = object
|
|
i: int
|
|
d: float
|
|
ATup = tuple
|
|
i: int
|
|
d: float
|
|
MyEnum = enum
|
|
E01, E02, E03
|
|
Myrange = range[0..10]
|
|
|
|
MyProc = proc (x: int): bool
|
|
MyInt = distinct int
|
|
MyAlias = MyInt
|
|
MySet = set[char]
|
|
MyArray = array[4, char]
|
|
MySeq = seq[string]
|
|
|
|
template test(typename, default: untyped) =
|
|
proc `abc typename`(): seq[typename] =
|
|
result = newSeq[typename]()
|
|
result.add(default)
|
|
result.setLen(3)
|
|
for i in 0 ..< 2:
|
|
result[i] = default
|
|
|
|
const constval = `abc typename`()
|
|
doAssert(constval == `abc typename`())
|
|
|
|
proc `arr typename`(): array[4, typename] =
|
|
for i in 0 ..< 2:
|
|
result[i] = default
|
|
const constarr = `arr typename`()
|
|
doAssert(constarr == `arr typename`())
|
|
|
|
proc even(x: int): bool = x mod 2 == 0
|
|
proc `==`(x, y: MyInt): bool = ord(x) == ord(y)
|
|
proc `$`(x: MyInt): string = $ord(x)
|
|
proc `$`(x: proc): string =
|
|
if x.isNil: "(nil)" else: "funcptr"
|
|
|
|
test(int, 0)
|
|
test(uint, 0)
|
|
test(float, 0.1)
|
|
test(char, '0')
|
|
test(bool, false)
|
|
test(uint8, 2)
|
|
test(string, "data")
|
|
test(MyProc, even)
|
|
test(MyEnum, E02)
|
|
test(AObj, AObj())
|
|
test(ATup, (i:11, d:9.99))
|
|
test(Myrange, 4)
|
|
test(MyInt, MyInt(4))
|
|
test(MyAlias, MyAlias(4))
|
|
test(MyArray, ['0','1','2','3'])
|
|
test(MySeq, @["data"])
|