tnewlit.nim 3.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170
  1. import macros
  2. type
  3. MyType = object
  4. a : int
  5. b : string
  6. macro test_newLit_MyType: untyped =
  7. let mt = MyType(a: 123, b:"foobar")
  8. result = newLit(mt)
  9. doAssert test_newLit_MyType == MyType(a: 123, b:"foobar")
  10. macro test_newLit_array: untyped =
  11. let arr = [1,2,3,4,5]
  12. result = newLit(arr)
  13. doAssert test_newLit_array == [1,2,3,4,5]
  14. macro test_newLit_seq_int: untyped =
  15. let s: seq[int] = @[1,2,3,4,5]
  16. result = newLit(s)
  17. block:
  18. let tmp: seq[int] = test_newLit_seq_int
  19. doAssert tmp == @[1,2,3,4,5]
  20. macro test_newLit_seq_int8: untyped =
  21. let s: seq[int8] = @[1'i8,2,3,4,5]
  22. result = newLit(s)
  23. block:
  24. let tmp: seq[int8] = test_newLit_seq_int8
  25. doAssert tmp == @[1'i8,2,3,4,5]
  26. macro test_newLit_seq_int16: untyped =
  27. let s: seq[int16] = @[1'i16,2,3,4,5]
  28. result = newLit(s)
  29. block:
  30. let tmp: seq[int16] = test_newLit_seq_int16
  31. doAssert tmp == @[1'i16,2,3,4,5]
  32. macro test_newLit_seq_int32: untyped =
  33. let s: seq[int32] = @[1'i32,2,3,4,5]
  34. result = newLit(s)
  35. block:
  36. let tmp: seq[int32] = test_newLit_seq_int32
  37. doAssert tmp == @[1'i32,2,3,4,5]
  38. macro test_newLit_seq_int64: untyped =
  39. let s: seq[int64] = @[1'i64,2,3,4,5]
  40. result = newLit(s)
  41. block:
  42. let tmp: seq[int64] = test_newLit_seq_int64
  43. doAssert tmp == @[1'i64,2,3,4,5]
  44. macro test_newLit_seq_uint: untyped =
  45. let s: seq[uint] = @[1u,2,3,4,5]
  46. result = newLit(s)
  47. block:
  48. let tmp: seq[uint] = test_newLit_seq_uint
  49. doAssert tmp == @[1u,2,3,4,5]
  50. macro test_newLit_seq_uint8: untyped =
  51. let s: seq[uint8] = @[1'u8,2,3,4,5]
  52. result = newLit(s)
  53. block:
  54. let tmp: seq[uint8] = test_newLit_seq_uint8
  55. doAssert tmp == @[1'u8,2,3,4,5]
  56. macro test_newLit_seq_uint16: untyped =
  57. let s: seq[uint16] = @[1'u16,2,3,4,5]
  58. result = newLit(s)
  59. block:
  60. let tmp: seq[uint16] = test_newLit_seq_uint16
  61. doAssert tmp == @[1'u16,2,3,4,5]
  62. macro test_newLit_seq_uint32: untyped =
  63. let s: seq[uint32] = @[1'u32,2,3,4,5]
  64. result = newLit(s)
  65. block:
  66. let tmp: seq[uint32] = test_newLit_seq_uint32
  67. doAssert tmp == @[1'u32,2,3,4,5]
  68. macro test_newLit_seq_uint64: untyped =
  69. let s: seq[uint64] = @[1'u64,2,3,4,5]
  70. result = newLit(s)
  71. block:
  72. let tmp: seq[uint64] = test_newLit_seq_uint64
  73. doAssert tmp == @[1'u64,2,3,4,5]
  74. macro test_newLit_seq_float: untyped =
  75. let s: seq[float] = @[1.0, 2,3,4,5]
  76. result = newLit(s)
  77. block:
  78. let tmp: seq[float] = test_newLit_seq_float
  79. doAssert tmp == @[1.0, 2,3,4,5]
  80. macro test_newLit_seq_float32: untyped =
  81. let s: seq[float32] = @[1.0'f32, 2,3,4,5]
  82. result = newLit(s)
  83. block:
  84. let tmp: seq[float32] = test_newLit_seq_float32
  85. doAssert tmp == @[1.0'f32, 2,3,4,5]
  86. macro test_newLit_seq_float64: untyped =
  87. let s: seq[float64] = @[1.0'f64, 2,3,4,5]
  88. result = newLit(s)
  89. block:
  90. let tmp: seq[float64] = test_newLit_seq_float64
  91. doAssert tmp == @[1.0'f64, 2,3,4,5]
  92. macro test_newLit_tuple: untyped =
  93. let tup: tuple[a:int,b:string] = (a: 123, b: "223")
  94. result = newLit(tup)
  95. doAssert test_newLit_tuple == (a: 123, b: "223")
  96. type
  97. ComposedType = object
  98. mt: MyType
  99. arr: array[4,int]
  100. data: seq[byte]
  101. macro test_newLit_ComposedType: untyped =
  102. let ct = ComposedType(mt: MyType(a: 123, b:"abc"), arr: [1,2,3,4], data: @[1.byte, 3, 7, 127])
  103. result = newLit(ct)
  104. doAssert test_newLit_ComposedType == ComposedType(mt: MyType(a: 123, b:"abc"), arr: [1,2,3,4], data: @[1.byte, 3, 7, 127])
  105. macro test_newLit_empty_seq_string: untyped =
  106. var strSeq = newSeq[string](0)
  107. result = newLit(strSeq)
  108. block:
  109. # x needs to be of type seq[string]
  110. var x = test_newLit_empty_seq_string
  111. x.add("xyz")
  112. type
  113. MyEnum = enum
  114. meA
  115. meB
  116. macro test_newLit_Enum: untyped =
  117. result = newLit(meA)
  118. block:
  119. let tmp: MyEnum = meA
  120. doAssert tmp == test_newLit_Enum
  121. macro test_newLit_set: untyped =
  122. let myset = {MyEnum.low .. MyEnum.high}
  123. result = newLit(myset)
  124. block:
  125. let tmp: set[MyEnum] = {MyEnum.low .. MyEnum.high}
  126. doAssert tmp == test_newLit_set