aboutsummaryrefslogtreecommitdiff
path: root/testes
diff options
context:
space:
mode:
Diffstat (limited to 'testes')
-rw-r--r--testes/api.lua71
1 files changed, 71 insertions, 0 deletions
diff --git a/testes/api.lua b/testes/api.lua
index 6e11c6ed..988250f7 100644
--- a/testes/api.lua
+++ b/testes/api.lua
@@ -967,6 +967,77 @@ T.closestate(L1)
967L1 = nil 967L1 = nil
968 968
969print('+') 969print('+')
970-------------------------------------------------------------------------
971-- testing to-be-closed variables
972-------------------------------------------------------------------------
973print"testing to-be-closed variables"
974
975do
976 local openresource = {}
977
978 local function newresource ()
979 local x = setmetatable({10}, {__close = function(y)
980 assert(openresource[#openresource] == y)
981 openresource[#openresource] = nil
982 y[1] = y[1] + 1
983 end})
984 openresource[#openresource + 1] = x
985 return x
986 end
987
988 local a = T.testC([[
989 call 0 1 # create resource
990 tobeclosed # mark it to be closed
991 return 1
992 ]], newresource)
993 assert(a[1] == 11)
994 assert(#openresource == 0) -- was closed
995
996 -- repeat the test, but calling function in a 'multret' context
997 local a = {T.testC([[
998 call 0 1 # create resource
999 tobeclosed # mark it to be closed
1000 return 2
1001 ]], newresource)}
1002 assert(type(a[1]) == "string" and a[2][1] == 11)
1003 assert(#openresource == 0) -- was closed
1004
1005 -- error
1006 local a, b = pcall(T.testC, [[
1007 call 0 1 # create resource
1008 tobeclosed # mark it to be closed
1009 error # resource is the error object
1010 ]], newresource)
1011 assert(a == false and b[1] == 11)
1012 assert(#openresource == 0) -- was closed
1013
1014 local function check (n)
1015 assert(#openresource == n)
1016 end
1017
1018 -- closing resources with 'settop'
1019 local a = T.testC([[
1020 pushvalue 2
1021 call 0 1 # create resource
1022 tobeclosed # mark it to be closed
1023 pushvalue 2
1024 call 0 1 # create another resource
1025 tobeclosed # mark it to be closed
1026 pushvalue 3
1027 pushint 2 # there should be two open resources
1028 call 1 0
1029 pop 1 # pop second resource from the stack
1030 pushvalue 3
1031 pushint 1 # there should be one open resource
1032 call 1 0
1033 pop 1 # pop second resource from the stack
1034 pushint *
1035 return 1 # return stack size
1036 ]], newresource, check)
1037 assert(a == 3) -- no extra items left in the stack
1038
1039end
1040
970 1041
971------------------------------------------------------------------------- 1042-------------------------------------------------------------------------
972-- testing memory limits 1043-- testing memory limits