Added a test to check how gc works in emscripten.

Test will fail in emscripten and pass in normal environment.
This commit is contained in:
Andrey Sobolev
2015-09-23 16:21:00 +06:00
parent df65082370
commit ed103e8e38
2 changed files with 60 additions and 0 deletions

59
tests/gc/gcemscripten.nim Normal file
View File

@@ -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)

View File

@@ -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"