From ed103e8e382853a1fe7a377c2fc451c6b159f0b7 Mon Sep 17 00:00:00 2001 From: Andrey Sobolev Date: Wed, 23 Sep 2015 16:21:00 +0600 Subject: [PATCH] Added a test to check how gc works in emscripten. Test will fail in emscripten and pass in normal environment. --- tests/gc/gcemscripten.nim | 59 ++++++++++++++++++++++++++++++++++ tests/testament/categories.nim | 1 + 2 files changed, 60 insertions(+) create mode 100644 tests/gc/gcemscripten.nim diff --git a/tests/gc/gcemscripten.nim b/tests/gc/gcemscripten.nim new file mode 100644 index 0000000000..bbef13d98f --- /dev/null +++ b/tests/gc/gcemscripten.nim @@ -0,0 +1,59 @@ +discard """ + outputsub: "77\n77" +""" + +## Check how GC/Alloc works in Emscripten +import strutils + +type + X = ref XObj + XObj = object + name: string + value: int +when defined(allow_print): + const print = true +else: + const print = false + +proc myResult3*(i:int):X {.exportc.} = + if print: echo "3" + new(result) + if print: echo "3-2" + result.value = i + +proc myResult5*(i:int, x:X):X {.exportc.} = + if print: echo "5" + system.GC_fullCollect() + new(result) + if print: echo "5-2" + result.value = i + x.value = i+1 + if result.value == x.value: + echo "This should not happen. Just allocated variable points to parameter" + +proc myResult2*(val: string, i: int): X {.exportc.} = + if print: echo "2-1" + result = myResult3(i) + if print: echo "2-2" + system.GC_fullCollect() + if print: echo "2-3" + var t = new(X) + if print: echo "2-4" + result.name = val + if t.name == "qwe": + echo "This should not happen. Variable is GC collected and new one on same place are allocated." + if print: echo "2-5" + +proc myResult4*(val: string, i: int): X {.exportc.} = + if print: echo "4-1" + result = myResult5(i, X()) + if print: echo "4-2" + +var x = myResult2("qwe", 77) +echo intToStr(x.value) + +var x2 = myResult4("qwe", 77) +echo intToStr(x2.value) + + + diff --git a/tests/testament/categories.nim b/tests/testament/categories.nim index 4de1edeee1..afaf6c2f88 100644 --- a/tests/testament/categories.nim +++ b/tests/testament/categories.nim @@ -121,6 +121,7 @@ proc gcTests(r: var TResults, cat: Category, options: string) = testSpec r, makeTest("tests/gc" / filename, options & " -d:release --gc:markAndSweep", cat, actionRun) + test "gcemscripten" test "growobjcrash" test "gcbench" test "gcleak"