mirror of
https://github.com/BlackMATov/evolved.lua.git
synced 2026-09-27 11:07:08 +07:00
proof of concept ffi component storages
fast batch ops storage swapping was temporary removed
This commit is contained in:
@@ -7,7 +7,7 @@ local N = 10000
|
||||
|
||||
print '----------------------------------------'
|
||||
|
||||
basics.describe_bench(string.format('Scheme Benchmarks: Evolved AoS | %d entities', N),
|
||||
basics.describe_bench(string.format('Scheme Benchmarks: Evolved AoS Processing | %d entities', N),
|
||||
function(w)
|
||||
evo.process(w)
|
||||
end,
|
||||
@@ -20,13 +20,11 @@ basics.describe_bench(string.format('Scheme Benchmarks: Evolved AoS | %d entitie
|
||||
local pf = evo.builder():set(wf):spawn()
|
||||
local vf = evo.builder():set(wf):spawn()
|
||||
|
||||
for _ = 1, N do
|
||||
evo.spawn {
|
||||
[wf] = true,
|
||||
[pf] = { x = 0, y = 0, z = 0, w = 0 },
|
||||
[vf] = { x = 0, y = 0, z = 0, w = 0 },
|
||||
}
|
||||
end
|
||||
evo.multi_spawn(N, {
|
||||
[wf] = true,
|
||||
[pf] = { x = 0, y = 0, z = 0, w = 0 },
|
||||
[vf] = { x = 0, y = 0, z = 0, w = 0 },
|
||||
})
|
||||
|
||||
evo.builder()
|
||||
:set(wf)
|
||||
@@ -50,7 +48,7 @@ basics.describe_bench(string.format('Scheme Benchmarks: Evolved AoS | %d entitie
|
||||
evo.destroy(w)
|
||||
end)
|
||||
|
||||
basics.describe_bench(string.format('Scheme Benchmarks: Evolved SoA | %d entities', N),
|
||||
basics.describe_bench(string.format('Scheme Benchmarks: Evolved SoA Processing | %d entities', N),
|
||||
function(w)
|
||||
evo.process(w)
|
||||
end,
|
||||
@@ -69,13 +67,17 @@ basics.describe_bench(string.format('Scheme Benchmarks: Evolved SoA | %d entitie
|
||||
local vzf = evo.builder():set(wf):spawn()
|
||||
local vwf = evo.builder():set(wf):spawn()
|
||||
|
||||
for _ = 1, N do
|
||||
evo.spawn {
|
||||
[wf] = true,
|
||||
[pxf] = 0, [pyf] = 0, [pzf] = 0, [pwf] = 0,
|
||||
[vxf] = 0, [vyf] = 0, [vzf] = 0, [vwf] = 0,
|
||||
}
|
||||
end
|
||||
evo.multi_spawn(N, {
|
||||
[wf] = true,
|
||||
[pxf] = 0,
|
||||
[pyf] = 0,
|
||||
[pzf] = 0,
|
||||
[pwf] = 0,
|
||||
[vxf] = 0,
|
||||
[vyf] = 0,
|
||||
[vzf] = 0,
|
||||
[vwf] = 0,
|
||||
})
|
||||
|
||||
evo.builder()
|
||||
:set(wf)
|
||||
@@ -101,7 +103,7 @@ basics.describe_bench(string.format('Scheme Benchmarks: Evolved SoA | %d entitie
|
||||
|
||||
print '----------------------------------------'
|
||||
|
||||
basics.describe_bench(string.format('Scheme Benchmarks: Evolved-FFI AoS | %d entities', N),
|
||||
basics.describe_bench(string.format('Scheme Benchmarks: Evolved-FFI AoS Processing | %d entities', N),
|
||||
function(w)
|
||||
evo.process(w)
|
||||
end,
|
||||
@@ -121,13 +123,11 @@ basics.describe_bench(string.format('Scheme Benchmarks: Evolved-FFI AoS | %d ent
|
||||
local pf = evo.builder():set(wf):set(evo.SCHEME, vector4):spawn()
|
||||
local vf = evo.builder():set(wf):set(evo.SCHEME, vector4):spawn()
|
||||
|
||||
for _ = 1, N do
|
||||
evo.spawn {
|
||||
[wf] = true,
|
||||
[pf] = { x = 0, y = 0, z = 0, w = 0 },
|
||||
[vf] = { x = 0, y = 0, z = 0, w = 0 },
|
||||
}
|
||||
end
|
||||
evo.multi_spawn(N, {
|
||||
[wf] = true,
|
||||
[pf] = { x = 0, y = 0, z = 0, w = 0 },
|
||||
[vf] = { x = 0, y = 0, z = 0, w = 0 },
|
||||
})
|
||||
|
||||
evo.builder()
|
||||
:set(wf)
|
||||
@@ -151,7 +151,7 @@ basics.describe_bench(string.format('Scheme Benchmarks: Evolved-FFI AoS | %d ent
|
||||
evo.destroy(w)
|
||||
end)
|
||||
|
||||
basics.describe_bench(string.format('Scheme Benchmarks: Evolved-FFI SoA | %d entities', N),
|
||||
basics.describe_bench(string.format('Scheme Benchmarks: Evolved-FFI SoA Processing | %d entities', N),
|
||||
function(w)
|
||||
evo.process(w)
|
||||
end,
|
||||
@@ -170,13 +170,17 @@ basics.describe_bench(string.format('Scheme Benchmarks: Evolved-FFI SoA | %d ent
|
||||
local vzf = evo.builder():set(wf):set(evo.SCHEME, evo.scheme_number()):spawn()
|
||||
local vwf = evo.builder():set(wf):set(evo.SCHEME, evo.scheme_number()):spawn()
|
||||
|
||||
for _ = 1, N do
|
||||
evo.spawn {
|
||||
[wf] = true,
|
||||
[pxf] = 0, [pyf] = 0, [pzf] = 0, [pwf] = 0,
|
||||
[vxf] = 0, [vyf] = 0, [vzf] = 0, [vwf] = 0,
|
||||
}
|
||||
end
|
||||
evo.multi_spawn(N, {
|
||||
[wf] = true,
|
||||
[pxf] = 0,
|
||||
[pyf] = 0,
|
||||
[pzf] = 0,
|
||||
[pwf] = 0,
|
||||
[vxf] = 0,
|
||||
[vyf] = 0,
|
||||
[vzf] = 0,
|
||||
[vwf] = 0,
|
||||
})
|
||||
|
||||
evo.builder()
|
||||
:set(wf)
|
||||
|
||||
@@ -26,27 +26,6 @@ do
|
||||
for _, e in ipairs(es) do assert(evo.get(e, f1) == 5 and evo.get(e, f2) == 6) end
|
||||
end
|
||||
|
||||
do
|
||||
local ls1 = evo.scheme_list(evo.scheme_number(), 3)
|
||||
local ls2 = evo.scheme_list(evo.scheme_boolean(), 2)
|
||||
|
||||
local f1 = evo.builder():scheme(ls1):spawn()
|
||||
local f2 = evo.builder():scheme(ls2):spawn()
|
||||
|
||||
local e1 = evo.builder():set(f1, { 1, 2, 3 }):spawn()
|
||||
local e2 = evo.builder():set(f2, { true, false }):spawn()
|
||||
|
||||
do
|
||||
local v = evo.get(e1, f1)
|
||||
assert(#v == 3 and v[1] == 1 and v[2] == 2 and v[3] == 3)
|
||||
end
|
||||
|
||||
do
|
||||
local v = evo.get(e2, f2)
|
||||
assert(#v == 2 and v[1] == true and v[2] == false)
|
||||
end
|
||||
end
|
||||
|
||||
do
|
||||
local rs1 = evo.scheme_record { v = evo.scheme_number() }
|
||||
local rs2 = evo.scheme_record { v1 = evo.scheme_number(), v2 = evo.scheme_number() }
|
||||
@@ -64,3 +43,131 @@ do
|
||||
assert(evo.get(e2, f2).v1 == 21 and evo.get(e2, f2).v2 == 84)
|
||||
assert(evo.get(e3, f3).n1.v1 == 1 and evo.get(e3, f3).n1.v2 == 2 and evo.get(e3, f3).n2.v == 3)
|
||||
end
|
||||
|
||||
do
|
||||
local s = evo.scheme_number()
|
||||
|
||||
local f1 = evo.builder():scheme(s):spawn()
|
||||
local f2 = evo.builder():scheme(s):spawn()
|
||||
local f3 = evo.builder():scheme(s):spawn()
|
||||
|
||||
local b = evo.builder():set(f1, 42)
|
||||
|
||||
local es = {}
|
||||
for i = 1, 12 do es[i] = b:spawn() end
|
||||
for _, e in ipairs(es) do assert(evo.get(e, f1) == 42) end
|
||||
|
||||
for _, e in ipairs(es) do evo.set(e, f2, 84) end
|
||||
for _, e in ipairs(es) do assert(evo.get(e, f1) == 42 and evo.get(e, f2) == 84) end
|
||||
|
||||
for _, e in ipairs(es) do evo.remove(e, f1) end
|
||||
for _, e in ipairs(es) do assert(evo.get(e, f1) == nil and evo.get(e, f2) == 84) end
|
||||
|
||||
local q_f2 = evo.builder():include(f2):spawn()
|
||||
|
||||
evo.batch_set(q_f2, f3, 21)
|
||||
for _, e in ipairs(es) do assert(evo.get(e, f2) == 84 and evo.get(e, f3) == 21) end
|
||||
|
||||
evo.batch_remove(q_f2, f2)
|
||||
for _, e in ipairs(es) do assert(evo.get(e, f2) == nil and evo.get(e, f3) == 21) end
|
||||
end
|
||||
|
||||
do
|
||||
local s = evo.scheme_number()
|
||||
|
||||
local f1 = evo.builder():scheme(s):spawn()
|
||||
local f2 = evo.builder():scheme(s):spawn()
|
||||
local f3 = evo.builder():scheme(s):spawn()
|
||||
|
||||
local b = evo.builder():set(f1, 42)
|
||||
|
||||
local es = {}
|
||||
for i = 1, 12 do es[i] = b:spawn() end
|
||||
for _, e in ipairs(es) do assert(evo.get(e, f1) == 42) end
|
||||
|
||||
for _, e in ipairs(es) do evo.set(e, f2, 84) end
|
||||
for _, e in ipairs(es) do assert(evo.get(e, f1) == 42 and evo.get(e, f2) == 84) end
|
||||
|
||||
for _, e in ipairs(es) do evo.remove(e, f1) end
|
||||
for _, e in ipairs(es) do assert(evo.get(e, f1) == nil and evo.get(e, f2) == 84) end
|
||||
|
||||
local q_f2 = evo.builder():include(f2):spawn()
|
||||
|
||||
do
|
||||
b:remove(f1):set(f2, 84):set(f3, 21)
|
||||
for _ = 1, 12 do es[#es + 1] = b:spawn() end
|
||||
end
|
||||
|
||||
evo.batch_set(q_f2, f3, 21)
|
||||
for _, e in ipairs(es) do assert(evo.get(e, f2) == 84 and evo.get(e, f3) == 21) end
|
||||
|
||||
evo.batch_remove(q_f2, f2)
|
||||
for _, e in ipairs(es) do assert(evo.get(e, f2) == nil and evo.get(e, f3) == 21) end
|
||||
end
|
||||
|
||||
do
|
||||
local s = evo.scheme_number()
|
||||
|
||||
local f1 = evo.builder():scheme(s):spawn()
|
||||
local f2 = evo.builder():scheme(s):spawn()
|
||||
local f3 = evo.builder():scheme(s):spawn()
|
||||
|
||||
local b = evo.builder():set(f1, 42)
|
||||
|
||||
local es = {}
|
||||
for i = 1, 12 do es[i] = b:spawn() end
|
||||
for _, e in ipairs(es) do assert(evo.get(e, f1) == 42) end
|
||||
|
||||
for _, e in ipairs(es) do evo.set(e, f2, 84) end
|
||||
for _, e in ipairs(es) do assert(evo.get(e, f1) == 42 and evo.get(e, f2) == 84) end
|
||||
|
||||
for _, e in ipairs(es) do evo.remove(e, f1) end
|
||||
for _, e in ipairs(es) do assert(evo.get(e, f1) == nil and evo.get(e, f2) == 84) end
|
||||
|
||||
local q_f2 = evo.builder():include(f2):spawn()
|
||||
local q_f3 = evo.builder():include(f3):spawn()
|
||||
|
||||
do
|
||||
b:remove(f1):set(f2, 84):set(f3, 21)
|
||||
b:multi_spawn(24)
|
||||
evo.batch_destroy(q_f3)
|
||||
end
|
||||
|
||||
evo.batch_set(q_f2, f3, 21)
|
||||
for _, e in ipairs(es) do assert(evo.get(e, f2) == 84 and evo.get(e, f3) == 21) end
|
||||
|
||||
evo.batch_remove(q_f2, f2)
|
||||
for _, e in ipairs(es) do assert(evo.get(e, f2) == nil and evo.get(e, f3) == 21) end
|
||||
end
|
||||
|
||||
do
|
||||
local s = evo.scheme_number()
|
||||
|
||||
local f1 = evo.builder():scheme(s):spawn()
|
||||
local f2 = evo.builder():scheme(s):spawn()
|
||||
|
||||
local ec = evo.builder():set(f1, 21):set(f2, 42):multi_spawn(11)
|
||||
for _, e in ipairs(ec) do assert(evo.get(e, f1) == 21 and evo.get(e, f2) == 42) end
|
||||
|
||||
local q_f1 = evo.builder():include(f1):spawn()
|
||||
|
||||
evo.batch_remove(q_f1, f1)
|
||||
for _, e in ipairs(ec) do assert(evo.get(e, f1) == nil and evo.get(e, f2) == 42) end
|
||||
end
|
||||
|
||||
do
|
||||
local ns1 = evo.scheme_number()
|
||||
|
||||
local f = evo.builder():scheme(ns1):spawn()
|
||||
|
||||
local e = evo.builder():set(f, 42):spawn()
|
||||
assert(evo.get(e, f) == 42)
|
||||
|
||||
local ns2 = evo.scheme_number()
|
||||
evo.set(f, evo.SCHEME, ns2)
|
||||
assert(evo.get(e, f) == 42)
|
||||
|
||||
local ns3 = evo.scheme_boolean()
|
||||
evo.set(f, evo.SCHEME, ns3)
|
||||
assert(evo.get(e, f) == true)
|
||||
end
|
||||
|
||||
Reference in New Issue
Block a user