mirror of
https://github.com/BlackMATov/evolved.lua.git
synced 2026-09-27 11:07:08 +07:00
optimize batch operations for cases with moving entities to empty chunks
This commit is contained in:
+111
-2
@@ -3856,8 +3856,8 @@ do
|
||||
assert(chunk and entities)
|
||||
assert(#entities == 2)
|
||||
assert(entities[1] == e3, entities[2] == e4)
|
||||
assert(evo.select(chunk, f3)[1] == 33)
|
||||
assert(evo.select(chunk, f3)[2] == 43)
|
||||
assert(evo.select(chunk, f2)[1] == 32 and evo.select(chunk, f3)[1] == 33)
|
||||
assert(evo.select(chunk, f2)[2] == 42 and evo.select(chunk, f3)[2] == 43)
|
||||
end
|
||||
|
||||
do
|
||||
@@ -6399,3 +6399,112 @@ do
|
||||
assert(evo.get(e2, f1) == true)
|
||||
assert(evo.get(e2, f2) == 42)
|
||||
end
|
||||
|
||||
do
|
||||
local f1, f2 = evo.id(2)
|
||||
|
||||
local q1 = evo.query():include(f1):build()
|
||||
|
||||
local e1a = evo.entity():set(f1, 1):build()
|
||||
local e1b = evo.entity():set(f1, 11):build()
|
||||
|
||||
do
|
||||
local c1, c1_es = evo.chunk(f1)
|
||||
assert(c1 and c1_es and #c1_es == 2)
|
||||
assert(c1_es[1] == e1a and c1_es[2] == e1b)
|
||||
assert(evo.select(c1, f1)[1] == 1 and evo.select(c1, f1)[2] == 11)
|
||||
end
|
||||
|
||||
assert(evo.batch_insert(q1, f2, 2) == 2)
|
||||
|
||||
do
|
||||
local c1, c1_es = evo.chunk(f1)
|
||||
assert(c1 and c1_es and #c1_es == 0)
|
||||
|
||||
local c12, c12_es = evo.chunk(f1, f2)
|
||||
assert(c12 and c12_es and #c12_es == 2)
|
||||
assert(c12_es[1] == e1a and c12_es[2] == e1b)
|
||||
assert(evo.select(c12, f1)[1] == 1 and evo.select(c12, f1)[2] == 11)
|
||||
assert(evo.select(c12, f2)[1] == 2 and evo.select(c12, f2)[2] == 2)
|
||||
end
|
||||
|
||||
local e1c = evo.entity():set(f1, 111):build()
|
||||
local e1d = evo.entity():set(f1, 1111):build()
|
||||
|
||||
do
|
||||
local c1, c1_es = evo.chunk(f1)
|
||||
assert(c1 and c1_es and #c1_es == 2)
|
||||
assert(c1_es[1] == e1c and c1_es[2] == e1d)
|
||||
assert(evo.select(c1, f1)[1] == 111 and evo.select(c1, f1)[2] == 1111)
|
||||
end
|
||||
|
||||
assert(evo.batch_insert(q1, f2, 22) == 2)
|
||||
|
||||
do
|
||||
local c1, c1_es = evo.chunk(f1)
|
||||
assert(c1 and c1_es and #c1_es == 0)
|
||||
|
||||
local c12, c12_es = evo.chunk(f1, f2)
|
||||
assert(c12 and c12_es and #c12_es == 4)
|
||||
assert(c12_es[1] == e1a and c12_es[2] == e1b)
|
||||
assert(c12_es[3] == e1c and c12_es[4] == e1d)
|
||||
assert(evo.select(c12, f1)[1] == 1 and evo.select(c12, f1)[2] == 11)
|
||||
assert(evo.select(c12, f1)[3] == 111 and evo.select(c12, f1)[4] == 1111)
|
||||
assert(evo.select(c12, f2)[1] == 2 and evo.select(c12, f2)[2] == 2)
|
||||
assert(evo.select(c12, f2)[3] == 22 and evo.select(c12, f2)[4] == 22)
|
||||
end
|
||||
end
|
||||
|
||||
do
|
||||
local f1, f2, f3 = evo.id(3)
|
||||
|
||||
local q1 = evo.query():include(f1):build()
|
||||
|
||||
local e123a = evo.entity():set(f1, 1):set(f2, 2):set(f3, 3):build()
|
||||
local e123b = evo.entity():set(f1, 11):set(f2, 22):set(f3, 33):build()
|
||||
|
||||
do
|
||||
local c123, c123_es = evo.chunk(f1, f2, f3)
|
||||
assert(c123 and c123_es and #c123_es == 2)
|
||||
assert(c123_es[1] == e123a and c123_es[2] == e123b)
|
||||
assert(evo.select(c123, f1)[1] == 1 and evo.select(c123, f1)[2] == 11)
|
||||
assert(evo.select(c123, f2)[1] == 2 and evo.select(c123, f2)[2] == 22)
|
||||
assert(evo.select(c123, f3)[1] == 3 and evo.select(c123, f3)[2] == 33)
|
||||
end
|
||||
|
||||
assert(evo.batch_remove(q1, f2) == 2)
|
||||
|
||||
do
|
||||
local c13, c13_es = evo.chunk(f3, f1)
|
||||
assert(c13 and c13_es and #c13_es == 2)
|
||||
assert(c13_es[1] == e123a and c13_es[2] == e123b)
|
||||
assert(evo.select(c13, f1)[1] == 1 and evo.select(c13, f1)[2] == 11)
|
||||
assert(evo.select(c13, f2)[1] == nil and evo.select(c13, f2)[2] == nil)
|
||||
assert(evo.select(c13, f3)[1] == 3 and evo.select(c13, f3)[2] == 33)
|
||||
end
|
||||
|
||||
local e3a = evo.entity():set(f3, 3):build()
|
||||
local e3b = evo.entity():set(f3, 33):build()
|
||||
|
||||
do
|
||||
local c3, c3_es = evo.chunk(f3)
|
||||
assert(c3 and c3_es and #c3_es == 2)
|
||||
assert(c3_es[1] == e3a and c3_es[2] == e3b)
|
||||
assert(evo.select(c3, f3)[1] == 3 and evo.select(c3, f3)[2] == 33)
|
||||
end
|
||||
|
||||
assert(evo.batch_remove(q1, f1) == 2)
|
||||
|
||||
do
|
||||
local c3, c3_es = evo.chunk(f3)
|
||||
assert(c3 and c3_es and #c3_es == 4)
|
||||
assert(c3_es[1] == e3a and c3_es[2] == e3b)
|
||||
assert(c3_es[3] == e123a and c3_es[4] == e123b)
|
||||
assert(evo.select(c3, f1)[1] == nil and evo.select(c3, f1)[2] == nil)
|
||||
assert(evo.select(c3, f1)[3] == nil and evo.select(c3, f1)[4] == nil)
|
||||
assert(evo.select(c3, f2)[1] == nil and evo.select(c3, f2)[2] == nil)
|
||||
assert(evo.select(c3, f2)[3] == nil and evo.select(c3, f2)[4] == nil)
|
||||
assert(evo.select(c3, f3)[1] == 3 and evo.select(c3, f3)[2] == 33)
|
||||
assert(evo.select(c3, f3)[3] == 3 and evo.select(c3, f3)[4] == 33)
|
||||
end
|
||||
end
|
||||
|
||||
Reference in New Issue
Block a user