12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394 |
- block: # basic template generic parameter substitution
- block: # issue #13527
- template typeNameTempl[T](a: T): string = $T
- proc typeNameProc[T](a: T): string = $T
- doAssert typeNameTempl(1) == typeNameProc(1)
- doAssert typeNameTempl(true) == typeNameProc(true)
- doAssert typeNameTempl(1.0) == typeNameProc(1.0)
- doAssert typeNameTempl(1u8) == typeNameProc(1u8)
- template isDefault[T](a: T): bool = a == default(T)
- doAssert isDefault(0.0)
- block: # issue #17240
- func to(c: int, t: typedesc[float]): t = discard
- template converted[I, T](i: seq[I], t: typedesc[T]): seq[T] =
- var result = newSeq[T](2)
- result[0] = i[0].to(T)
- result
- doAssert newSeq[int](3).converted(float) == @[0.0, 0.0]
- block: # issue #6340
- type A[T] = object
- v: T
- proc foo(x: int): string = "int"
- proc foo(x: typedesc[int]): string = "typedesc[int]"
- template fooT(x: int): string = "int"
- template fooT(x: typedesc[int]): string = "typedesc[int]"
- proc foo[T](x: A[T]): (string, string) =
- (foo(T), fooT(T))
- template fooT[T](x: A[T]): (string, string) =
- (foo(T), fooT(T))
- var x: A[int]
- doAssert foo(x) == fooT(x)
- block: # issue #20033
- template run[T](): T = default(T)
- doAssert run[int]() == 0
- import options, tables, typetraits
- block: # complex cases of above with imports
- block: # issue #19576, complex case
- type RegistryKey = object
- key, val: string
- var regKey = @[RegistryKey(key: "abc", val: "def")]
- template findFirst[T](s: seq[T], pred: proc(x: T): bool): Option[T] =
- var res = none(T) # important line
- for x in s:
- if pred(x):
- res = some(x)
- break
- res
- proc getval(searchKey: string): Option[string] =
- let found = regKey.findFirst(proc (rk: RegistryKey): bool = rk.key == searchKey)
- if found.isNone: none(string)
- else: some(found.get().val)
- doAssert getval("strange") == none(string)
- doAssert getval("abc") == some("def")
- block: # issue #19076
- block: # case 1
- var tested: Table[string,int]
- template `[]`[V](t:Table[string,V],key:string):untyped =
- $V
- doAssert tested["abc"] == "int"
- template `{}`[V](t:Table[string,V],key:string):untyped =
- ($V, tables.`[]`(t, key))
- doAssert (try: tested{"abc"} except KeyError: ("not there", 123)) == ("not there", 123)
- tables.`[]=`(tested, "abc", 456)
- doAssert tested["abc"] == "int"
- doAssert tested{"abc"} == ("int", 456)
- block: # case 2
- type Foo[A,T] = object
- t:T
- proc init[A,T](f:type Foo,a:typedesc[A],t:T):Foo[A,T] = Foo[A,T](t:t)
- template fromOption[A](o:Option[A]):auto =
- when o.isSome:
- Foo.init(A,35)
- else:
- Foo.init(A,"hi")
- let op = fromOption(some(5))
- block: # issue #7461
- template p[T](): untyped = none(T)
- doAssert p[int]() == none(int)
- block: # issue #7995
- var res: string
- template copyRange[T](dest: seq[T], destOffset: int) =
- when supportsCopyMem(T):
- res = "A"
- else:
- res = "B"
- var a = @[1, 2, 3]
- copyRange(a, 0)
- doAssert res == "A"
|