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 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135
|
discard """
targets: "c cpp"
matrix: "--gc:refc; --gc:orc"
"""
import std/[isolation, json]
import std/[assertions, objectdollar]
proc main(moveZeroesOut: static bool) =
block:
type
Empty = ref object
var x = isolate(Empty())
discard extract(x)
block: # string literals
var data = isolate("string")
doAssert data.extract == "string"
if moveZeroesOut:
doAssert data.extract == ""
block: # string literals
var data = isolate("")
doAssert data.extract == ""
if moveZeroesOut:
doAssert data.extract == ""
block:
var src = "string"
var data = isolate(move src)
doAssert data.extract == "string"
if moveZeroesOut:
doAssert src.len == 0
block: # int literals
var data = isolate(1)
doAssert data.extract == 1
if moveZeroesOut:
doAssert data.extract == 0
block: # float literals
var data = isolate(1.6)
doAssert data.extract == 1.6
if moveZeroesOut:
doAssert data.extract == 0.0
block:
var data = isolate(@["1", "2"])
doAssert data.extract == @["1", "2"]
if moveZeroesOut:
doAssert data.extract == @[]
block:
var data = isolate(@["1", "2", "3", "4", "5"])
doAssert data.extract == @["1", "2", "3", "4", "5"]
if moveZeroesOut:
doAssert data.extract == @[]
block:
var data = isolate(@["", ""])
doAssert data.extract == @["", ""]
if moveZeroesOut:
doAssert data.extract == @[]
block:
var src = @["1", "2"]
var data = isolate(move src)
doAssert data.extract == @["1", "2"]
if moveZeroesOut:
doAssert src.len == 0
block:
var data = isolate(@[1, 2])
doAssert data.extract == @[1, 2]
if moveZeroesOut:
doAssert data.extract == @[]
block:
var data = isolate(["1", "2"])
doAssert data.extract == ["1", "2"]
if moveZeroesOut:
doAssert data.extract == ["", ""]
block:
var data = isolate([1, 2])
doAssert data.extract == [1, 2]
if moveZeroesOut:
doAssert data.extract == [0, 0]
block:
type
Test = object
id: int
var data = isolate(Test(id: 12))
doAssert data.extract.id == 12
block:
type
Test = object
id: int
var src = Test(id: 12)
var data = isolate(src)
doAssert data.extract.id == 12
block:
type
Test = object
id: int
var src = Test(id: 12)
var data = isolate(move src)
doAssert data.extract.id == 12
block:
type
Test = ref object
id: int
var data = isolate(Test(id: 12))
doAssert data.extract.id == 12
block:
var x: seq[Isolated[JsonNode]]
x.add isolate(newJString("1234"))
doAssert $x == """@[(value: "1234")]"""
static: main(moveZeroesOut = false)
main(moveZeroesOut = true)
|