/
niceSOFT
/
swig
Обзор
Документация
Войти
/
niceSOFT
/
swig
Код
Задачи
Вики
Пакеты
0
Релизы
0
Аналитика
Безопасность
master
Examples/test-suite/lua/li_std_map_runme.lua
93 строки
3 KB
William S Fulton
[Lua] Fix flaky li_std_map test caused by garbage collected Struct objects
01 авг 2026, 11:42
01 авг 2026, 11:42
ae445a8
Код
Авторство
О чём код?
local v=require("li_std_map") local i, k -- Test StringIntMap = std::map<std::string, int> local simap = v.StringIntMap() for i = 0,19 do simap:set(tostring(i), i * 18) end assert(simap:size() == 20, "simap:size()") for i = 0,19 do k = tostring(i) assert(simap:has_key(k), "simap:has_key(" .. i .. ")") assert(simap:get(k) == i * 18) end -- Copy StringIntMap local simap2 = v.StringIntMap(simap) assert(simap2:size() == 20, "simap2:size()") for i = 0,19 do k = tostring(i) assert(simap2:has_key(k), "simap2:has_key(" .. i .. ")") assert(simap2:get(k) == i * 18) end -- set and delete test for i = 100,110 do k = tostring(i) simap:set(k, i * 18) assert(simap:has_key(k)) assert(not simap2:has_key(k)) simap:del(k) assert(not simap:has_key(k), "delete simap index " .. i) end -- clear test simap:clear() assert(simap:size() == 0, "clear") assert(simap:empty(), "empty") -- Average local avg = v.valueAverage(simap2) assert(avg == 171, "valueAverage(simap2) = " .. avg) -- Create string with all keys local keyStringified = v.stringifyKeys(simap2) -- map do not remember order of insertion but order by string assert(keyStringified == " 0 1 10 11 12 13 14 15 16 17 18 19 2 3 4 5 6 7 8 9", "stringifyKeys = " .. keyStringified) -- Test a map with a new complex type (Struct) local ismap = v.IntStructMap() for i = 0,9 do ismap:set(i, v.Struct(i * 10.1)) end assert(ismap:size() == 10, "ismap:size()") for i = 0,9 do assert(cmp_flt(ismap:get(i).num , i * 10.1), "ismap:get(" .. i .. ")") end -- Test a map of pointers -- The map only stores the raw pointers, so the Struct objects must be kept -- referenced from Lua, otherwise they are collected and the map dangles local ispmap = v.IntStructPtrMap() local ispmap_values = {} for i = 0,9 do ispmap_values[i] = v.Struct(i * 10.1) ispmap:set(i, ispmap_values[i]) end assert(ispmap:size() == 10, "ispmap:size()") for i = 0,9 do assert(cmp_flt(ispmap:get(i).num, i * 10.1), "ispmap:get(" .. i .. ")") end -- Test a map of constant pointers local iscpmap = v.IntStructConstPtrMap() local iscpmap_values = {} for i = 0,9 do iscpmap_values[i] = v.Struct(i * 10.1) iscpmap:set(i, iscpmap_values[i]) end assert(iscpmap:size() == 10, "iscpmap:size()") for i = 0,9 do assert(cmp_flt(iscpmap:get(i).num, i * 10.1), "iscpmap:get(" .. i .. ")") end -- Test complex type as key (Struct) local limap = v.StructIntMap() local s7 = v.Struct(7) limap:set(s7, 8) assert(limap:get(s7) == 8, "limap:get(s7)") assert(limap:has_key(s7), "limap:has_key(s7)") assert(not limap:has_key(v.Struct(8)), "limap:has_key(v.Struct(8))")