ttypeinfo.nim 1.8 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394
  1. discard """
  2. matrix: "--mm:refc; --mm:orc"
  3. """
  4. import std/typeinfo
  5. import std/assertions
  6. type
  7. TE = enum
  8. blah, blah2
  9. TestObj = object
  10. test, asd: int
  11. case test2: TE
  12. of blah:
  13. help: string
  14. else:
  15. nil
  16. var test = @[0,1,2,3,4]
  17. var x = toAny(test)
  18. var y = 78
  19. x[4] = toAny(y)
  20. doAssert x[2].getInt == 2
  21. var test2: tuple[name: string, s: int] = ("test", 56)
  22. var x2 = toAny(test2)
  23. var i = 0
  24. for n, a in fields(x2):
  25. case i
  26. of 0: doAssert n == "Field0" and $a.kind == "akString"
  27. of 1: doAssert n == "Field1" and $a.kind == "akInt"
  28. else: doAssert false
  29. inc i
  30. var test3: TestObj
  31. test3.test = 42
  32. test3 = TestObj(test2: blah2)
  33. var x3 = toAny(test3)
  34. i = 0
  35. for n, a in fields(x3):
  36. case i
  37. of 0: doAssert n == "test" and $a.kind == "akInt"
  38. of 1: doAssert n == "asd" and $a.kind == "akInt"
  39. of 2: doAssert n == "test2" and $a.kind == "akEnum"
  40. else: doAssert false
  41. inc i
  42. var test4: ref string
  43. new(test4)
  44. test4[] = "test"
  45. var x4 = toAny(test4)
  46. doAssert($x4[].kind() == "akString")
  47. block:
  48. # gimme a new scope dammit
  49. var myArr: array[0..4, array[0..4, string]] = [
  50. ["test", "1", "2", "3", "4"], ["test", "1", "2", "3", "4"],
  51. ["test", "1", "2", "3", "4"], ["test", "1", "2", "3", "4"],
  52. ["test", "1", "2", "3", "4"]]
  53. var m = toAny(myArr)
  54. for i in 0 .. m.len-1:
  55. for j in 0 .. m[i].len-1:
  56. doAssert getString(m[i][j]) == myArr[i][j]
  57. block:
  58. type
  59. Test = enum
  60. Hello, he_llo
  61. var x = hello
  62. var y = x.toAny
  63. doAssert getEnumOrdinal(y, "Hello") == 0
  64. doAssert getEnumOrdinal(y, "hello") == 1
  65. block: # bug #23556
  66. proc test =
  67. var
  68. t: seq[int] = @[]
  69. aseq = toAny(t)
  70. invokeNewSeq(aseq, 0)
  71. # Got random value only when loop 8 times.
  72. for i in 1 .. 8:
  73. extendSeq(aseq)
  74. doAssert t == @[0, 0, 0, 0, 0, 0, 0, 0]
  75. for i in 1 .. 7:
  76. test()