summary refs log tree commit diff stats
path: root/tests
diff options
context:
space:
mode:
Diffstat (limited to 'tests')
-rw-r--r--tests/metatype/ttypetraits.nim98
-rw-r--r--tests/metatype/ttypetraits2.nim45
2 files changed, 41 insertions, 102 deletions
diff --git a/tests/metatype/ttypetraits.nim b/tests/metatype/ttypetraits.nim
index 2765a4231..8c92122af 100644
--- a/tests/metatype/ttypetraits.nim
+++ b/tests/metatype/ttypetraits.nim
@@ -1,60 +1,44 @@
-discard """
-  nimout:    "int\nstring\nTBar[int]"
-  output: "int\nstring\nTBar[int]\nint\nrange 0..2(int)\nstring"
-  disabled: true
-"""
-
 import typetraits
 
-# simple case of type trait usage inside/outside of static blocks
-proc foo(x) =
-  static:
-    var t = type(x)
-    echo t.name
-
-  echo x.type.name
-
-type
-  TBar[U] = object
-    x: U
-
-var bar: TBar[int]
-
-foo 10
-foo "test"
-foo bar
-
-# generic params on user types work too
-proc foo2[T](x: TBar[T]) =
-  echo T.name
-
-foo2 bar
-
-# less usual generic params on built-in types
-var arr: array[0..2, int] = [1, 2, 3]
-
-proc foo3[R, T](x: array[R, T]) =
-  echo name(R)
-
-foo3 arr
-
-const TypeList = [int, string, seq[int]]
-
-macro selectType(inType: typedesc): typedesc =
-  var typeSeq = @[float, TBar[int]]
-
-  for t in TypeList:
-    typeSeq.add(t)
-
-  typeSeq.add(inType)
-  typeSeq.add(type(10))
-
-  var typeSeq2: seq[typedesc] = @[]
-  typeSeq2 = typeSeq
-
-  result = typeSeq2[5]
-
-var xvar: selectType(string)
-xvar = "proba"
-echo xvar.type.name
+block: # isNamedTuple
+  type Foo1 = (a:1,).type
+  type Foo2 = (Field0:1,).type
+  type Foo3 = ().type
+  type Foo4 = object
+
+  doAssert (a:1,).type.isNamedTuple
+  doAssert Foo1.isNamedTuple
+  doAssert Foo2.isNamedTuple
+  doAssert not Foo3.isNamedTuple
+  doAssert not Foo4.isNamedTuple
+  doAssert not (1,).type.isNamedTuple
+
+proc typeToString*(t: typedesc, prefer = "preferTypeName"): string {.magic: "TypeTrait".}
+  ## Returns the name of the given type, with more flexibility than `name`,
+  ## and avoiding the potential clash with a variable named `name`.
+  ## prefer = "preferResolved" will resolve type aliases recursively.
+  # Move to typetraits.nim once api stabilized.
+
+block: # typeToString
+  type MyInt = int
+  type
+    C[T0, T1] = object
+  type C2=C # alias => will resolve as C
+  type C2b=C # alias => will resolve as C (recursively)
+  type C3[U,V] = C[V,U]
+  type C4[X] = C[X,X]
+  template name2(T): string = typeToString(T, "preferResolved")
+  doAssert MyInt.name2 == "int"
+  doAssert C3[MyInt, C2b].name2 == "C3[int, C]"
+    # C3 doesn't get resolved to C, not an alias (nor does C4)
+  doAssert C2b[MyInt, C4[cstring]].name2 == "C[int, C4[cstring]]"
+  doAssert C4[MyInt].name2 == "C4[int]"
+  when BiggestFloat is float and cint is int:
+    doAssert C2b[cint, BiggestFloat].name2 == "C3[int, C3[float, int32]]"
+
+  template name3(T): string = typeToString(T, "preferMixed")
+  doAssert MyInt.name3 == "MyInt{int}"
+  doAssert (tuple[a: MyInt, b: float]).name3 == "tuple[a: MyInt{int}, b: float]"
+  doAssert (tuple[a: C2b[MyInt, C4[cstring]], b: cint, c: float]).name3 ==
+    "tuple[a: C2b{C}[MyInt{int}, C4[cstring]], b: cint{int32}, c: float]"
 
diff --git a/tests/metatype/ttypetraits2.nim b/tests/metatype/ttypetraits2.nim
deleted file mode 100644
index e07b51660..000000000
--- a/tests/metatype/ttypetraits2.nim
+++ /dev/null
@@ -1,45 +0,0 @@
-# todo: merge with $nimc_D/tests/metatype/ttypetraits.nim (currently disabled)
-
-import typetraits
-
-block: # isNamedTuple
-  type Foo1 = (a:1,).type
-  type Foo2 = (Field0:1,).type
-  type Foo3 = ().type
-  type Foo4 = object
-
-  doAssert (a:1,).type.isNamedTuple
-  doAssert Foo1.isNamedTuple
-  doAssert Foo2.isNamedTuple
-  doAssert not Foo3.isNamedTuple
-  doAssert not Foo4.isNamedTuple
-  doAssert not (1,).type.isNamedTuple
-
-proc typeToString*(t: typedesc, prefer = "preferTypeName"): string {.magic: "TypeTrait".}
-  ## Returns the name of the given type, with more flexibility than `name`,
-  ## and avoiding the potential clash with a variable named `name`.
-  ## prefer = "preferResolved" will resolve type aliases recursively.
-  # Move to typetraits.nim once api stabilized.
-
-block: # typeToString
-  type MyInt = int
-  type
-    C[T0, T1] = object
-  type C2=C # alias => will resolve as C
-  type C2b=C # alias => will resolve as C (recursively)
-  type C3[U,V] = C[V,U]
-  type C4[X] = C[X,X]
-  template name2(T): string = typeToString(T, "preferResolved")
-  doAssert MyInt.name2 == "int"
-  doAssert C3[MyInt, C2b].name2 == "C3[int, C]"
-    # C3 doesn't get resolved to C, not an alias (nor does C4)
-  doAssert C2b[MyInt, C4[cstring]].name2 == "C[int, C4[cstring]]"
-  doAssert C4[MyInt].name2 == "C4[int]"
-  when BiggestFloat is float and cint is int:
-    doAssert C2b[cint, BiggestFloat].name2 == "C3[int, C3[float, int32]]"
-
-  template name3(T): string = typeToString(T, "preferMixed")
-  doAssert MyInt.name3 == "MyInt{int}"
-  doAssert (tuple[a: MyInt, b: float]).name3 == "tuple[a: MyInt{int}, b: float]"
-  doAssert (tuple[a: C2b[MyInt, C4[cstring]], b: cint, c: float]).name3 ==
-    "tuple[a: C2b{C}[MyInt{int}, C4[cstring]], b: cint{int32}, c: float]"