effil/tests/lua/shared-table.lua

102 lines
2.6 KiB
Lua

require "bootstrap-tests"
test.shared_table.tear_down = default_tear_down
test.shared_table.constructor = function ()
local share = effil.table {
key = "value"
}
test.equal(share.key, "value")
test.equal(pcall(effil.table, ""), false)
test.equal(pcall(effil.table, 22), false)
test.equal(pcall(effil.table, effil.table()), false)
end
if LUA_VERSION > 51 then
test.shared_table.pairs = function ()
local share = effil.table()
local data = { 0, 0, 0, ["key1"] = 0, ["key2"] = 0, ["key3"] = 0 }
for k, _ in pairs(data) do
share[k] = k .. "-value"
end
for k,v in pairs(share) do
test.equal(data[k], 0)
data[k] = 1
test.equal(v, k .. "-value")
end
for k,v in pairs(data) do
test.equal(v, 1)
end
for k,v in ipairs(share) do
test.equal(data[k], 1)
data[k] = 2
test.equal(v, k .. "-value")
end
for k,v in ipairs(data) do
test.equal(v, 2)
end
end
end -- LUA_VERSION > 51
test.shared_table.length = function ()
local share = effil.table()
share[1] = 10
share[2] = 20
share[3] = 30
share[4] = 40
share["str"] = 50
test.equal(#share, 4)
share[3] = nil
test.equal(#share, 2)
share[1] = nil
test.equal(#share, 0)
end
test.shared_table.size = function ()
local share = effil.table()
test.equal(effil.size(share), 0)
share[1] = 10
test.equal(effil.size(share), 1)
share[2] = "value1"
share["key1"] = function() end
test.equal(effil.size(share), 3)
share[2] = nil
test.equal(effil.size(share), 2)
end
test.shared_table.user_data_classification = function ()
local share = effil.table()
share.thread = effil.thread(function(a, b) return a + b end)(19, 33)
share.sub_table = effil.table()
share.sub_table.some_key = "some_value"
local result = share.thread:get()
test.equal(result, 52)
test.equal(share.sub_table.some_key, "some_value")
end
test.shared_table.global = function ()
test.not_equal(effil.G, nil)
effil.G.test_key = "test_value"
local thr = effil.thread(function()
local effil = require "effil"
if effil.G == nil or effil.G.test_key ~= "test_value" then
error("Invalid value of global table: " .. tostring(effil.G and effil.G.test_key or nil))
end
effil.G.test_key = "checked"
end)()
local status, err = thr:wait()
if status == "failed" then
print("Thread failed with message: " .. err)
end
test.equal(status, "completed")
test.equal(effil.G.test_key, "checked")
end