ttypeinfo.nim 1.3 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061
  1. import typeinfo
  2. type
  3. TE = enum
  4. blah, blah2
  5. TestObj = object
  6. test, asd: int
  7. case test2: TE
  8. of blah:
  9. help: string
  10. else:
  11. nil
  12. var test = @[0,1,2,3,4]
  13. var x = toAny(test)
  14. var y = 78
  15. x[4] = toAny(y)
  16. assert x[2].getInt == 2
  17. var test2: tuple[name: string, s: int] = ("test", 56)
  18. var x2 = toAny(test2)
  19. var i = 0
  20. for n, a in fields(x2):
  21. case i
  22. of 0: assert n == "Field0" and $a.kind == "akString"
  23. of 1: assert n == "Field1" and $a.kind == "akInt"
  24. else: assert false
  25. inc i
  26. var test3: TestObj
  27. test3.test = 42
  28. test3 = TestObj(test2: blah2)
  29. var x3 = toAny(test3)
  30. i = 0
  31. for n, a in fields(x3):
  32. case i
  33. of 0: assert n == "test" and $a.kind == "akInt"
  34. of 1: assert n == "asd" and $a.kind == "akInt"
  35. of 2: assert n == "test2" and $a.kind == "akEnum"
  36. else: assert false
  37. inc i
  38. var test4: ref string
  39. new(test4)
  40. test4[] = "test"
  41. var x4 = toAny(test4)
  42. assert($x4[].kind() == "akString")
  43. block:
  44. # gimme a new scope dammit
  45. var myarr: array[0..4, array[0..4, string]] = [
  46. ["test", "1", "2", "3", "4"], ["test", "1", "2", "3", "4"],
  47. ["test", "1", "2", "3", "4"], ["test", "1", "2", "3", "4"],
  48. ["test", "1", "2", "3", "4"]]
  49. var m = toAny(myArr)
  50. for i in 0 .. m.len-1:
  51. for j in 0 .. m[i].len-1:
  52. doAssert getString(m[i][j]) == myArr[i][j]