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)