MCPcopy Index your code
hub / github.com/yuin/gopher-lua / TestCoroutineApi1

Function TestCoroutineApi1

state_test.go:329–399  ·  view source on GitHub ↗
(t *testing.T)

Source from the content-addressed store, hash-verified

327}
328
329func TestCoroutineApi1(t *testing.T) {
330 L := NewState()
331 defer L.Close()
332 co, _ := L.NewThread()
333 errorIfScriptFail(t, L, `
334 function coro(v)
335 assert(v == 10)
336 local ret1, ret2 = coroutine.yield(1,2,3)
337 assert(ret1 == 11)
338 assert(ret2 == 12)
339 coroutine.yield(4)
340 return 5
341 end
342 `)
343 fn := L.GetGlobal("coro").(*LFunction)
344 st, err, values := L.Resume(co, fn, LNumber(10))
345 errorIfNotEqual(t, ResumeYield, st)
346 errorIfNotNil(t, err)
347 errorIfNotEqual(t, 3, len(values))
348 errorIfNotEqual(t, LNumber(1), values[0].(LNumber))
349 errorIfNotEqual(t, LNumber(2), values[1].(LNumber))
350 errorIfNotEqual(t, LNumber(3), values[2].(LNumber))
351
352 st, err, values = L.Resume(co, fn, LNumber(11), LNumber(12))
353 errorIfNotEqual(t, ResumeYield, st)
354 errorIfNotNil(t, err)
355 errorIfNotEqual(t, 1, len(values))
356 errorIfNotEqual(t, LNumber(4), values[0].(LNumber))
357
358 st, err, values = L.Resume(co, fn)
359 errorIfNotEqual(t, ResumeOK, st)
360 errorIfNotNil(t, err)
361 errorIfNotEqual(t, 1, len(values))
362 errorIfNotEqual(t, LNumber(5), values[0].(LNumber))
363
364 L.Register("myyield", func(L *LState) int {
365 return L.Yield(L.ToNumber(1))
366 })
367 errorIfScriptFail(t, L, `
368 function coro_error()
369 coroutine.yield(1,2,3)
370 myyield(4)
371 assert(false, "--failed--")
372 end
373 `)
374 fn = L.GetGlobal("coro_error").(*LFunction)
375 co, _ = L.NewThread()
376 st, err, values = L.Resume(co, fn)
377 errorIfNotEqual(t, ResumeYield, st)
378 errorIfNotNil(t, err)
379 errorIfNotEqual(t, 3, len(values))
380 errorIfNotEqual(t, LNumber(1), values[0].(LNumber))
381 errorIfNotEqual(t, LNumber(2), values[1].(LNumber))
382 errorIfNotEqual(t, LNumber(3), values[2].(LNumber))
383
384 st, err, values = L.Resume(co, fn)
385 errorIfNotEqual(t, ResumeYield, st)
386 errorIfNotNil(t, err)

Callers

nothing calls this directly

Calls 15

errorIfScriptFailFunction · 0.85
LNumberTypeAlias · 0.85
errorIfNotEqualFunction · 0.85
errorIfNotNilFunction · 0.85
errorIfNilFunction · 0.85
errorIfFalseFunction · 0.85
NewStateFunction · 0.70
ErrorMethod · 0.65
CloseMethod · 0.45
NewThreadMethod · 0.45
GetGlobalMethod · 0.45
ResumeMethod · 0.45

Tested by

no test coverage detected

Used in the wild real call sites across dependent graphs

searching dependent graphs…