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