little unroll some defer operations

This commit is contained in:
BlackMATov
2025-01-22 13:06:21 +07:00
parent c1a259ed3d
commit 85ff3c4a57
2 changed files with 783 additions and 24 deletions

View File

@@ -5120,3 +5120,450 @@ do
assert(c4 and #c4 == 1 and c4[1] == 4)
end
end
do
local f0, f1, f2, f3, f4 = evo.id(5)
evo.set(f0, evo.CONSTRUCT, function()
return 42
end)
evo.set(f1, evo.CONSTRUCT, function(a1)
return a1
end)
evo.set(f2, evo.CONSTRUCT, function(a1, a2)
return a1 + a2
end)
evo.set(f3, evo.CONSTRUCT, function(a1, a2, a3)
return a1 + a2 + a3
end)
evo.set(f4, evo.CONSTRUCT, function(a1, a2, a3, a4)
return a1 + a2 + a3 + a4
end)
do
local e1 = evo.id()
evo.set(e1, f0)
evo.set(e1, f1, 1)
evo.set(e1, f2, 1, 2)
evo.set(e1, f3, 1, 2, 3)
evo.set(e1, f4, 1, 2, 3, 4)
assert(evo.get(e1, f0) == 42)
assert(evo.get(e1, f1) == 1)
assert(evo.get(e1, f2) == 1 + 2)
assert(evo.get(e1, f3) == 1 + 2 + 3)
assert(evo.get(e1, f4) == 1 + 2 + 3 + 4)
end
do
local e1 = evo.id()
evo.insert(e1, f0)
evo.insert(e1, f1, 1)
evo.insert(e1, f2, 1, 2)
evo.insert(e1, f3, 1, 2, 3)
evo.insert(e1, f4, 1, 2, 3, 4)
assert(evo.get(e1, f0) == 42)
assert(evo.get(e1, f1) == 1)
assert(evo.get(e1, f2) == 1 + 2)
assert(evo.get(e1, f3) == 1 + 2 + 3)
assert(evo.get(e1, f4) == 1 + 2 + 3 + 4)
end
do
local e1 = evo.id()
evo.multi_insert(e1, { f0, f1, f2, f3, f4 })
evo.assign(e1, f0)
evo.assign(e1, f1, 1)
evo.assign(e1, f2, 1, 2)
evo.assign(e1, f3, 1, 2, 3)
evo.assign(e1, f4, 1, 2, 3, 4)
assert(evo.get(e1, f0) == 42)
assert(evo.get(e1, f1) == 1)
assert(evo.get(e1, f2) == 1 + 2)
assert(evo.get(e1, f3) == 1 + 2 + 3)
assert(evo.get(e1, f4) == 1 + 2 + 3 + 4)
end
do
local e1, e2, e3, e4 = evo.id(4)
evo.multi_insert(e1, { f1, f2, f3, f4 })
evo.multi_insert(e2, { f1, f2, f3, f4 })
evo.multi_insert(e3, { f1, f2, f3, f4 })
evo.multi_insert(e4, { f1, f2, f3, f4 })
evo.remove(e1, f0, f1)
evo.remove(e2, f0, f1, f2)
evo.remove(e3, f0, f1, f2, f3)
evo.remove(e4, f0, f1, f2, f3, f4)
assert(evo.get(e1, f1) == nil and evo.get(e1, f2) == true and evo.get(e1, f3) == true and evo.get(e1, f4) == true)
assert(evo.get(e2, f1) == nil and evo.get(e2, f2) == nil and evo.get(e2, f3) == true and evo.get(e2, f4) == true)
assert(evo.get(e3, f1) == nil and evo.get(e3, f2) == nil and evo.get(e3, f3) == nil and evo.get(e3, f4) == true)
assert(evo.get(e4, f1) == nil and evo.get(e4, f2) == nil and evo.get(e4, f3) == nil and evo.get(e4, f4) == nil)
end
do
local e1, e2 = evo.id(2)
assert(evo.defer())
evo.set(e1, f0)
evo.set(e1, f1, 1)
evo.set(e1, f2, 1, 2)
evo.set(e1, f3, 1, 2, 3)
evo.set(e1, f4, 1, 2, 3, 4)
evo.set(e2, f0)
evo.set(e2, f1, 1)
evo.set(e2, f2, 1, 2)
evo.set(e2, f3, 1, 2, 3)
evo.set(e2, f4, 1, 2, 3, 4)
assert(evo.commit())
assert(evo.get(e1, f0) == 42)
assert(evo.get(e1, f1) == 1)
assert(evo.get(e1, f2) == 1 + 2)
assert(evo.get(e1, f3) == 1 + 2 + 3)
assert(evo.get(e1, f4) == 1 + 2 + 3 + 4)
assert(evo.get(e2, f0) == 42)
assert(evo.get(e2, f1) == 1)
assert(evo.get(e2, f2) == 1 + 2)
assert(evo.get(e2, f3) == 1 + 2 + 3)
assert(evo.get(e2, f4) == 1 + 2 + 3 + 4)
end
do
local e1, e2 = evo.id(2)
assert(evo.defer())
evo.insert(e1, f0)
evo.insert(e1, f1, 1)
evo.insert(e1, f2, 1, 2)
evo.insert(e1, f3, 1, 2, 3)
evo.insert(e1, f4, 1, 2, 3, 4)
evo.insert(e2, f0)
evo.insert(e2, f1, 1)
evo.insert(e2, f2, 1, 2)
evo.insert(e2, f3, 1, 2, 3)
evo.insert(e2, f4, 1, 2, 3, 4)
assert(evo.commit())
assert(evo.get(e1, f0) == 42)
assert(evo.get(e1, f1) == 1)
assert(evo.get(e1, f2) == 1 + 2)
assert(evo.get(e1, f3) == 1 + 2 + 3)
assert(evo.get(e1, f4) == 1 + 2 + 3 + 4)
assert(evo.get(e2, f0) == 42)
assert(evo.get(e2, f1) == 1)
assert(evo.get(e2, f2) == 1 + 2)
assert(evo.get(e2, f3) == 1 + 2 + 3)
assert(evo.get(e2, f4) == 1 + 2 + 3 + 4)
end
do
local e1, e2 = evo.id(2)
evo.multi_insert(e1, { f0, f1, f2, f3, f4 })
evo.multi_insert(e2, { f0, f1, f2, f3, f4 })
assert(evo.defer())
evo.assign(e1, f0)
evo.assign(e1, f1, 1)
evo.assign(e1, f2, 1, 2)
evo.assign(e1, f3, 1, 2, 3)
evo.assign(e1, f4, 1, 2, 3, 4)
evo.assign(e2, f0)
evo.assign(e2, f1, 1)
evo.assign(e2, f2, 1, 2)
evo.assign(e2, f3, 1, 2, 3)
evo.assign(e2, f4, 1, 2, 3, 4)
assert(evo.commit())
assert(evo.get(e1, f0) == 42)
assert(evo.get(e1, f1) == 1)
assert(evo.get(e1, f2) == 1 + 2)
assert(evo.get(e1, f3) == 1 + 2 + 3)
assert(evo.get(e1, f4) == 1 + 2 + 3 + 4)
assert(evo.get(e2, f0) == 42)
assert(evo.get(e2, f1) == 1)
assert(evo.get(e2, f2) == 1 + 2)
assert(evo.get(e2, f3) == 1 + 2 + 3)
assert(evo.get(e2, f4) == 1 + 2 + 3 + 4)
end
do
local e1, e2, e3, e4 = evo.id(4)
evo.multi_insert(e1, { f1, f2, f3, f4 })
evo.multi_insert(e2, { f1, f2, f3, f4 })
evo.multi_insert(e3, { f1, f2, f3, f4 })
evo.multi_insert(e4, { f1, f2, f3, f4 })
assert(evo.defer())
evo.remove(e1, f1)
evo.remove(e2, f1, f2)
evo.remove(e3, f1, f2, f3)
evo.remove(e4, f1, f2, f3, f4)
assert(evo.commit())
assert(evo.get(e1, f1) == nil and evo.get(e1, f2) == true and evo.get(e1, f3) == true and evo.get(e1, f4) == true)
assert(evo.get(e2, f1) == nil and evo.get(e2, f2) == nil and evo.get(e2, f3) == true and evo.get(e2, f4) == true)
assert(evo.get(e3, f1) == nil and evo.get(e3, f2) == nil and evo.get(e3, f3) == nil and evo.get(e3, f4) == true)
assert(evo.get(e4, f1) == nil and evo.get(e4, f2) == nil and evo.get(e4, f3) == nil and evo.get(e4, f4) == nil)
end
end
do
local fa, f0, f1, f2, f3, f4 = evo.id(6)
local q0 = evo.query():include(fa):build()
evo.set(f0, evo.CONSTRUCT, function()
return 42
end)
evo.set(f1, evo.CONSTRUCT, function(a1)
return a1
end)
evo.set(f2, evo.CONSTRUCT, function(a1, a2)
return a1 + a2
end)
evo.set(f3, evo.CONSTRUCT, function(a1, a2, a3)
return a1 + a2 + a3
end)
evo.set(f4, evo.CONSTRUCT, function(a1, a2, a3, a4)
return a1 + a2 + a3 + a4
end)
do
local e1 = evo.entity():set(fa):build()
local e2 = evo.entity():set(fa):build()
assert(evo.defer())
evo.batch_set(q0, f0)
assert(evo.commit())
assert(evo.get(e1, f0) == 42)
assert(evo.get(e2, f0) == 42)
assert(evo.defer())
evo.batch_set(q0, f1, 1)
assert(evo.commit())
assert(evo.get(e1, f1) == 1)
assert(evo.get(e2, f1) == 1)
assert(evo.defer())
evo.batch_set(q0, f2, 1, 2)
assert(evo.commit())
assert(evo.get(e1, f0) == 42)
assert(evo.get(e2, f0) == 42)
assert(evo.get(e1, f1) == 1)
assert(evo.get(e1, f2) == 1 + 2)
assert(evo.get(e2, f1) == 1)
assert(evo.get(e2, f2) == 1 + 2)
assert(evo.defer())
evo.batch_set(q0, f3, 1, 2, 3)
assert(evo.commit())
assert(evo.get(e1, f0) == 42)
assert(evo.get(e2, f0) == 42)
assert(evo.get(e1, f1) == 1)
assert(evo.get(e1, f2) == 1 + 2)
assert(evo.get(e1, f3) == 1 + 2 + 3)
assert(evo.get(e2, f1) == 1)
assert(evo.get(e2, f2) == 1 + 2)
assert(evo.get(e2, f3) == 1 + 2 + 3)
assert(evo.defer())
evo.batch_set(q0, f4, 1, 2, 3, 4)
assert(evo.commit())
assert(evo.get(e1, f0) == 42)
assert(evo.get(e2, f0) == 42)
assert(evo.get(e1, f1) == 1)
assert(evo.get(e1, f2) == 1 + 2)
assert(evo.get(e1, f3) == 1 + 2 + 3)
assert(evo.defer())
evo.batch_set(q0, f4, 1, 2, 3, 4)
assert(evo.commit())
assert(evo.get(e1, f0) == 42)
assert(evo.get(e2, f0) == 42)
assert(evo.get(e1, f1) == 1)
assert(evo.get(e1, f2) == 1 + 2)
assert(evo.get(e1, f3) == 1 + 2 + 3)
assert(evo.get(e1, f4) == 1 + 2 + 3 + 4)
assert(evo.get(e2, f1) == 1)
assert(evo.get(e2, f2) == 1 + 2)
assert(evo.get(e2, f3) == 1 + 2 + 3)
assert(evo.get(e2, f4) == 1 + 2 + 3 + 4)
end
do
local e1 = evo.entity():set(fa):build()
local e2 = evo.entity():set(fa):build()
assert(evo.defer())
evo.batch_insert(q0, f0)
assert(evo.commit())
assert(evo.get(e1, f0) == 42)
assert(evo.get(e2, f0) == 42)
assert(evo.defer())
evo.batch_insert(q0, f1, 1)
assert(evo.commit())
assert(evo.get(e1, f1) == 1)
assert(evo.get(e2, f1) == 1)
assert(evo.defer())
evo.batch_insert(q0, f2, 1, 2)
assert(evo.commit())
assert(evo.get(e1, f1) == 1)
assert(evo.get(e1, f2) == 1 + 2)
assert(evo.get(e2, f1) == 1)
assert(evo.get(e2, f2) == 1 + 2)
assert(evo.defer())
evo.batch_insert(q0, f3, 1, 2, 3)
assert(evo.commit())
assert(evo.get(e1, f1) == 1)
assert(evo.get(e1, f2) == 1 + 2)
assert(evo.get(e1, f3) == 1 + 2 + 3)
assert(evo.get(e2, f1) == 1)
assert(evo.get(e2, f2) == 1 + 2)
assert(evo.get(e2, f3) == 1 + 2 + 3)
assert(evo.defer())
evo.batch_insert(q0, f4, 1, 2, 3, 4)
assert(evo.commit())
assert(evo.get(e1, f1) == 1)
assert(evo.get(e1, f2) == 1 + 2)
assert(evo.get(e1, f3) == 1 + 2 + 3)
assert(evo.get(e1, f4) == 1 + 2 + 3 + 4)
assert(evo.get(e2, f1) == 1)
assert(evo.get(e2, f2) == 1 + 2)
assert(evo.get(e2, f3) == 1 + 2 + 3)
assert(evo.get(e2, f4) == 1 + 2 + 3 + 4)
end
do
local e1 = evo.entity():set(fa):build()
local e2 = evo.entity():set(fa):build()
assert(evo.defer())
evo.batch_insert(q0, f0, 0)
evo.batch_assign(q0, f0)
assert(evo.commit())
assert(evo.get(e1, f0) == 42)
assert(evo.get(e2, f0) == 42)
assert(evo.defer())
evo.batch_insert(q0, f1, 0)
evo.batch_assign(q0, f1, 1)
assert(evo.commit())
assert(evo.get(e1, f0) == 42)
assert(evo.get(e2, f0) == 42)
assert(evo.get(e1, f1) == 1)
assert(evo.get(e2, f1) == 1)
assert(evo.defer())
evo.batch_insert(q0, f2, 0, 0)
evo.batch_assign(q0, f2, 1, 2)
assert(evo.commit())
assert(evo.get(e1, f0) == 42)
assert(evo.get(e2, f0) == 42)
assert(evo.get(e1, f1) == 1)
assert(evo.get(e1, f2) == 1 + 2)
assert(evo.get(e2, f1) == 1)
assert(evo.get(e2, f2) == 1 + 2)
assert(evo.defer())
evo.batch_insert(q0, f3, 0, 0, 0)
evo.batch_assign(q0, f3, 1, 2, 3)
assert(evo.commit())
assert(evo.get(e1, f0) == 42)
assert(evo.get(e2, f0) == 42)
assert(evo.get(e1, f1) == 1)
assert(evo.get(e1, f2) == 1 + 2)
assert(evo.get(e1, f3) == 1 + 2 + 3)
assert(evo.get(e2, f1) == 1)
assert(evo.get(e2, f2) == 1 + 2)
assert(evo.get(e2, f3) == 1 + 2 + 3)
assert(evo.defer())
evo.batch_insert(q0, f4, 0, 0, 0, 0)
evo.batch_assign(q0, f4, 1, 2, 3, 4)
assert(evo.commit())
assert(evo.get(e1, f0) == 42)
assert(evo.get(e2, f0) == 42)
assert(evo.get(e1, f1) == 1)
assert(evo.get(e1, f2) == 1 + 2)
assert(evo.get(e1, f3) == 1 + 2 + 3)
assert(evo.get(e1, f4) == 1 + 2 + 3 + 4)
assert(evo.get(e2, f1) == 1)
assert(evo.get(e2, f2) == 1 + 2)
assert(evo.get(e2, f3) == 1 + 2 + 3)
assert(evo.get(e2, f4) == 1 + 2 + 3 + 4)
end
do
local e1 = evo.entity()
:set(fa)
:build()
local e2 = evo.entity()
:set(fa)
:build()
assert(evo.defer())
evo.batch_remove(q0)
assert(evo.commit())
assert(evo.get(e1, fa) == true)
assert(evo.get(e2, fa) == true)
end
do
local e1 = evo.entity()
:set(fa)
:set(f1, 1)
:build()
local e2 = evo.entity()
:set(fa)
:set(f1, 1)
:build()
assert(evo.defer())
evo.batch_remove(q0, f1)
assert(evo.commit())
assert(evo.get(e1, f1) == nil)
assert(evo.get(e2, f1) == nil)
end
do
local e1 = evo.entity()
:set(fa)
:set(f1, 1)
:set(f2, 1, 2)
:build()
local e2 = evo.entity()
:set(fa)
:set(f1, 1)
:set(f2, 1, 2)
:build()
assert(evo.defer())
evo.batch_remove(q0, f1, f2)
assert(evo.commit())
assert(evo.get(e1, f1) == nil)
assert(evo.get(e2, f1) == nil)
assert(evo.get(e1, f2) == nil)
assert(evo.get(e2, f2) == nil)
end
do
local e1 = evo.entity()
:set(fa)
:set(f1, 1)
:set(f2, 1, 2)
:set(f3, 1, 2, 3)
:build()
local e2 = evo.entity()
:set(fa)
:set(f1, 1)
:set(f2, 1, 2)
:set(f3, 1, 2, 3)
:build()
assert(evo.defer())
evo.batch_remove(q0, f1, f2, f3)
assert(evo.commit())
assert(evo.get(e1, f1) == nil)
assert(evo.get(e2, f1) == nil)
assert(evo.get(e1, f2) == nil)
assert(evo.get(e2, f2) == nil)
assert(evo.get(e1, f3) == nil)
assert(evo.get(e2, f3) == nil)
end
do
local e1 = evo.entity()
:set(fa)
:set(f1, 1)
:set(f2, 1, 2)
:set(f3, 1, 2, 3)
:set(f4, 1, 2, 3, 4)
:build()
local e2 = evo.entity()
:set(fa)
:set(f1, 1)
:set(f2, 1, 2)
:set(f3, 1, 2, 3)
:set(f4, 1, 2, 3, 4)
:build()
assert(evo.defer())
evo.batch_remove(q0, f1, f2, f3, f4)
assert(evo.commit())
assert(evo.get(e1, f1) == nil)
assert(evo.get(e2, f1) == nil)
assert(evo.get(e1, f2) == nil)
assert(evo.get(e2, f2) == nil)
assert(evo.get(e1, f3) == nil)
assert(evo.get(e2, f3) == nil)
assert(evo.get(e1, f4) == nil)
assert(evo.get(e2, f4) == nil)
end
end