diff options
author | Benoit Giannangeli <giann008@gmail.com> | 2017-05-25 15:22:41 +0200 |
---|---|---|
committer | Benoit Giannangeli <giann008@gmail.com> | 2017-05-25 15:22:41 +0200 |
commit | e6217e63be392351e491eb292d26da533f408d7d (patch) | |
tree | cf0edb7534e1e6716862f21cca7c643362442a10 /tests/test-suite/inprogress/coroutine.js | |
parent | 3cb56ad565fca7408eaaacb74fe8ccfcd92729e1 (diff) | |
download | fengari-e6217e63be392351e491eb292d26da533f408d7d.tar.gz fengari-e6217e63be392351e491eb292d26da533f408d7d.tar.bz2 fengari-e6217e63be392351e491eb292d26da533f408d7d.zip |
[test-suite] coroutine.js
Diffstat (limited to 'tests/test-suite/inprogress/coroutine.js')
-rw-r--r-- | tests/test-suite/inprogress/coroutine.js | 94 |
1 files changed, 94 insertions, 0 deletions
diff --git a/tests/test-suite/inprogress/coroutine.js b/tests/test-suite/inprogress/coroutine.js index 8bf2664..29461d3 100644 --- a/tests/test-suite/inprogress/coroutine.js +++ b/tests/test-suite/inprogress/coroutine.js @@ -1197,6 +1197,100 @@ test("[test-suite] coroutine: testing debug library on last function in a suspen }); +test("[test-suite] coroutine: reusing a thread", function (t) { + let luaCode = ` + assert(T.testC([[ + newthread # create thread + pushvalue 2 # push body + pushstring 'a a a' # push argument + xmove 0 3 2 # move values to new thread + resume -1, 1 # call it first time + pushstatus + xmove 3 0 0 # move results back to stack + setglobal X # result + setglobal Y # status + pushvalue 2 # push body (to call it again) + pushstring 'b b b' + xmove 0 3 2 + resume -1, 1 # call it again + pushstatus + xmove 3 0 0 + return 1 # return result + ]], function (...) return ... end) == 'b b b') + + assert(X == 'a a a' and Y == 'OK') + `, L; + + t.plan(2); + + t.doesNotThrow(function () { + + L = lauxlib.luaL_newstate(); + + lualib.luaL_openlibs(L); + + ltests.luaopen_tests(L); + + lauxlib.luaL_loadstring(L, lua.to_luastring(luaCode)); + + }, "Lua program loaded without error"); + + t.doesNotThrow(function () { + + lua.lua_call(L, 0, -1); + + }, "Lua program ran without error"); +}); + + +test("[test-suite] coroutine: resuming running coroutine", function (t) { + let luaCode = ` + C = coroutine.create(function () + return T.testC([[ + pushnum 10; + pushnum 20; + resume -3 2; + pushstatus + gettop; + return 3]], C) + end) + local a, b, c, d = coroutine.resume(C) + assert(a == true and string.find(b, "non%-suspended") and + c == "ERRRUN" and d == 4) + + a, b, c, d = T.testC([[ + rawgeti R 1 # get main thread + pushnum 10; + pushnum 20; + resume -3 2; + pushstatus + gettop; + return 4]]) + assert(a == coroutine.running() and string.find(b, "non%-suspended") and + c == "ERRRUN" and d == 4) + `, L; + + t.plan(2); + + t.doesNotThrow(function () { + + L = lauxlib.luaL_newstate(); + + lualib.luaL_openlibs(L); + + ltests.luaopen_tests(L); + + lauxlib.luaL_loadstring(L, lua.to_luastring(luaCode)); + + }, "Lua program loaded without error"); + + t.doesNotThrow(function () { + + lua.lua_call(L, 0, -1); + + }, "Lua program ran without error"); +}); + test("[test-suite] coroutine: tests for coroutine API", { skip: true }, function (t) { t.comment("TODO"); }); |