Lua: Fix off-by-one preventing accessing last df-other-vectors item by ID, add tests

develop
lethosor 2020-07-26 02:11:20 -04:00
parent 4e218c7de3
commit f0ad730a37
No known key found for this signature in database
GPG Key ID: 76A269552F4F58C1
2 changed files with 28 additions and 1 deletions

@ -1451,7 +1451,7 @@ void other_vectors_identity::build_metatable(lua_State *state)
auto keys = &index_enum->getKeys()[-index_enum->getFirstItem()]; auto keys = &index_enum->getKeys()[-index_enum->getFirstItem()];
for (int64_t i = 0; i < index_enum->getLastItem(); i++) for (int64_t i = 0; i <= index_enum->getLastItem(); i++)
{ {
lua_getfield(state, base+2, keys[i]); lua_getfield(state, base+2, keys[i]);
lua_rawseti(state, base+2, int(i)); lua_rawseti(state, base+2, int(i));

@ -0,0 +1,27 @@
function test.index_name()
for _, k in ipairs(df.units_other_id) do
expect.eq(df.global.world.units.other[k]._kind, 'container')
end
end
function test.index_name_bad()
expect.error_match(function()
expect.eq(df.global.world.units.other.SOME_FAKE_NAME, 'container')
end, 'not found.$')
end
function test.index_id()
for i in ipairs(df.units_other_id) do
expect.eq(df.global.world.units.other[i]._kind, 'container')
end
end
function test.index_id_bad()
expect.error_match(function()
expect.eq(df.global.world.units.other[df.units_other_id._first_item - 1], 'container')
end, 'Cannot read field')
expect.error_match(function()
expect.eq(df.global.world.units.other[df.units_other_id._last_item + 1], 'container')
end, 'Cannot read field')
end