mirror of
https://github.com/BlackMATov/evolved.lua.git
synced 2025-12-13 11:38:15 +07:00
128 lines
4.3 KiB
Lua
128 lines
4.3 KiB
Lua
local evolved = require 'evolved'
|
|
|
|
local iterators = require 'develop.iterators'
|
|
local utilities = require 'develop.utilities'
|
|
|
|
---@param name string
|
|
---@param func fun(...):...
|
|
---@param ... any
|
|
local function describe(name, func, ...)
|
|
collectgarbage('stop')
|
|
|
|
print(string.format('| untests | %s ...', name))
|
|
|
|
local start_s = os.clock()
|
|
local start_kb = collectgarbage('count')
|
|
|
|
local success, result = pcall(func, ...)
|
|
|
|
local finish_s = os.clock() - start_s
|
|
local finish_kb = collectgarbage('count') - start_kb
|
|
|
|
print(string.format(' %s | ms: %.2f | mb: %.2f',
|
|
success and 'OK' or 'FAILED', finish_s * 1000, finish_kb / 1024))
|
|
|
|
if not success then print(' ' .. result) end
|
|
|
|
collectgarbage('restart')
|
|
end
|
|
|
|
describe('entity:chunk', function()
|
|
for _ = 1, 500 do
|
|
local registry = evolved.registry()
|
|
|
|
---@type evolved.entity[]
|
|
local all_fragments = {}
|
|
local all_fragment_count = math.random(1, 10)
|
|
for i = 1, all_fragment_count do all_fragments[i] = registry:entity() end
|
|
|
|
for _ = 1, 100 do
|
|
local e1, e2 = registry:entity(), registry:entity()
|
|
|
|
---@type evolved.entity[]
|
|
local insert_fragments = {}
|
|
local insert_fragment_count = math.random(1, 10)
|
|
for i = 1, insert_fragment_count do insert_fragments[i] = all_fragments[math.random(1, all_fragment_count)] end
|
|
|
|
---@type evolved.entity[]
|
|
local remove_fragments = {}
|
|
local remove_fragment_count = math.random(1, 10)
|
|
for i = 1, remove_fragment_count do remove_fragments[i] = all_fragments[math.random(1, all_fragment_count)] end
|
|
|
|
utilities.shuffle_array(insert_fragments)
|
|
for _, fragment in ipairs(insert_fragments) do e1:insert(fragment) end
|
|
|
|
utilities.shuffle_array(insert_fragments)
|
|
for _, fragment in ipairs(insert_fragments) do e2:insert(fragment) end
|
|
|
|
assert(e1.chunk == e2.chunk)
|
|
|
|
utilities.shuffle_array(remove_fragments)
|
|
for _, fragment in ipairs(remove_fragments) do e1:remove(fragment) end
|
|
|
|
utilities.shuffle_array(remove_fragments)
|
|
for _, fragment in ipairs(remove_fragments) do e2:remove(fragment) end
|
|
|
|
assert(e1.chunk == e2.chunk)
|
|
end
|
|
end
|
|
end)
|
|
|
|
describe('query:chunks', function()
|
|
for _ = 1, 500 do
|
|
local registry = evolved.registry()
|
|
|
|
---@type evolved.entity[]
|
|
local all_fragments = {}
|
|
local all_fragment_count = math.random(1, 10)
|
|
for i = 1, all_fragment_count do all_fragments[i] = registry:entity() end
|
|
|
|
local function check_all_queries()
|
|
for _, q in ipairs(registry.queries) do
|
|
local query_chunk_count = iterators.count(q:chunks())
|
|
local registry_chunk_count = iterators.count(iterators.filter(
|
|
iterators.values(registry.chunks),
|
|
function(chunk) return chunk:has_all_fragments(unpack(q.fragments)) end))
|
|
assert(query_chunk_count == registry_chunk_count)
|
|
end
|
|
end
|
|
|
|
---@param n integer
|
|
local function create_queries(n)
|
|
for _ = 1, n do
|
|
---@type evolved.entity[]
|
|
local query_fragments = {}
|
|
local query_fragment_count = math.random(1, 5)
|
|
for i = 1, query_fragment_count do
|
|
query_fragments[i] = all_fragments[math.random(1, all_fragment_count)]
|
|
end
|
|
|
|
registry:query(unpack(query_fragments))
|
|
end
|
|
end
|
|
|
|
---@param n integer
|
|
local function create_entities(n)
|
|
for _ = 1, n do
|
|
---@type evolved.entity[]
|
|
local insert_fragments = {}
|
|
local insert_fragment_count = math.random(1, 10)
|
|
for i = 1, insert_fragment_count do
|
|
insert_fragments[i] = all_fragments[math.random(1, all_fragment_count)]
|
|
end
|
|
|
|
local e = registry:entity()
|
|
for _, fragment in ipairs(insert_fragments) do e:insert(fragment) end
|
|
end
|
|
end
|
|
|
|
create_entities(50)
|
|
create_queries(10)
|
|
check_all_queries()
|
|
|
|
create_entities(50)
|
|
create_queries(10)
|
|
check_all_queries()
|
|
end
|
|
end)
|