From 9a2a62ec8979bddb9c826fe21938e008e2b8c8a3 Mon Sep 17 00:00:00 2001 From: BlackMATov Date: Mon, 16 Jun 2025 21:31:41 +0700 Subject: [PATCH] empty function set for pairs --- develop/testing/pairs_tests.lua | 15 +++++++++++++++ evolved.lua | 19 +++++++++---------- 2 files changed, 24 insertions(+), 10 deletions(-) diff --git a/develop/testing/pairs_tests.lua b/develop/testing/pairs_tests.lua index 8669471..d80ea93 100644 --- a/develop/testing/pairs_tests.lua +++ b/develop/testing/pairs_tests.lua @@ -72,3 +72,18 @@ do assert(evo.has_all(e12, evo.pair(p1, evo.ANY), evo.pair(p2, evo.ANY))) assert(evo.has_any(e12, evo.pair(p1, evo.ANY), evo.pair(p2, evo.ANY))) end + +do + local p1, s1, p2, s2 = evo.id(4) + evo.set(p1, s1) + evo.set(s1, p1) + evo.set(p2, s2) + assert(evo.empty(evo.pair(p1, s1))) + assert(evo.empty(evo.pair(p2, s2))) + assert(evo.empty_all(evo.pair(p1, s1), evo.pair(p2, s2))) + assert(evo.empty_any(evo.pair(p1, s1), evo.pair(p2, s2))) + assert(not evo.empty_all(evo.pair(p1, s1), evo.pair(p2, s2), p1)) + assert(evo.empty_any(evo.pair(p1, s1), evo.pair(p2, s2), p1)) + assert(evo.empty_all(evo.pair(p1, s1), evo.pair(p2, s2), s2)) + assert(evo.empty_any(evo.pair(p1, s1), evo.pair(p2, s2), s2)) +end diff --git a/evolved.lua b/evolved.lua index 1817964..00f4a3e 100644 --- a/evolved.lua +++ b/evolved.lua @@ -4228,8 +4228,13 @@ end ---@return boolean ---@nodiscard function __evolved_empty(entity) - local entity_index = entity % 0x100000 - return __freelist_ids[entity_index] ~= entity or not __entity_chunks[entity_index] + if entity > 0 then + local entity_index = entity % 0x100000 + return __freelist_ids[entity_index] ~= entity or not __entity_chunks[entity_index] + else + -- pairs are always empty + return true + end end ---@param ... evolved.entity entities @@ -4242,13 +4247,10 @@ function __evolved_empty_all(...) return true end - local freelist_ids = __freelist_ids - for argument_index = 1, argument_count do ---@type evolved.entity local entity = __lua_select(argument_index, ...) - local entity_index = entity % 0x100000 - if freelist_ids[entity_index] == entity and __entity_chunks[entity_index] then + if not __evolved_empty(entity) then return false end end @@ -4266,13 +4268,10 @@ function __evolved_empty_any(...) return false end - local freelist_ids = __freelist_ids - for argument_index = 1, argument_count do ---@type evolved.entity local entity = __lua_select(argument_index, ...) - local entity_index = entity % 0x100000 - if freelist_ids[entity_index] ~= entity or not __entity_chunks[entity_index] then + if __evolved_empty(entity) then return true end end