aboutsummaryrefslogtreecommitdiff
path: root/testes/coroutine.lua
diff options
context:
space:
mode:
Diffstat (limited to 'testes/coroutine.lua')
-rw-r--r--testes/coroutine.lua45
1 files changed, 45 insertions, 0 deletions
diff --git a/testes/coroutine.lua b/testes/coroutine.lua
index 7d42eadd..5674a4dd 100644
--- a/testes/coroutine.lua
+++ b/testes/coroutine.lua
@@ -119,6 +119,51 @@ end
119assert(#a == 25 and a[#a] == 97) 119assert(#a == 25 and a[#a] == 97)
120x, a = nil 120x, a = nil
121 121
122
123-- coroutine kill
124do
125 -- ok to kill a dead coroutine
126 local co = coroutine.create(print)
127 assert(coroutine.resume(co, "testing 'coroutine.kill'"))
128 assert(coroutine.status(co) == "dead")
129 assert(coroutine.kill(co))
130
131 -- cannot kill the running coroutine
132 local st, msg = pcall(coroutine.kill, coroutine.running())
133 assert(not st and string.find(msg, "running"))
134
135 local main = coroutine.running()
136
137 -- cannot kill a "normal" coroutine
138 ;(coroutine.wrap(function ()
139 local st, msg = pcall(coroutine.kill, main)
140 assert(not st and string.find(msg, "normal"))
141 end))()
142
143 -- to-be-closed variables in coroutines
144 local X
145 co = coroutine.create(function ()
146 local *toclose x = function (err) assert(err == nil); X = false end
147 X = true
148 coroutine.yield()
149 end)
150 coroutine.resume(co)
151 assert(X)
152 assert(coroutine.kill(co))
153 assert(not X and coroutine.status(co) == "dead")
154
155 -- error killing a coroutine
156 co = coroutine.create(function()
157 local *toclose x = function (err) assert(err == nil); error(111) end
158 coroutine.yield()
159 end)
160 coroutine.resume(co)
161 local st, msg = coroutine.kill(co)
162 assert(not st and coroutine.status(co) == "dead" and msg == 111)
163
164end
165
166
122-- yielding across C boundaries 167-- yielding across C boundaries
123 168
124co = coroutine.wrap(function() 169co = coroutine.wrap(function()