mirror of
https://github.com/BlackMATov/evolved.lua.git
synced 2025-12-16 14:11:16 +07:00
little unroll some defer operations
This commit is contained in:
@@ -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
|
||||
|
||||
Reference in New Issue
Block a user