mirror of
https://github.com/BlackMATov/evolved.lua.git
synced 2025-12-13 11:38:15 +07:00
330 lines
9.8 KiB
Lua
330 lines
9.8 KiB
Lua
local evo = require 'evolved'
|
|
|
|
do
|
|
do
|
|
local e = evo.spawn()
|
|
assert(evo.alive(e) and evo.empty(e))
|
|
end
|
|
|
|
do
|
|
local e = evo.spawn({})
|
|
assert(evo.alive(e) and evo.empty(e))
|
|
end
|
|
end
|
|
|
|
do
|
|
local f1, f2, f3 = evo.id(3)
|
|
evo.set(f2, evo.REQUIRES, { f1, f3 })
|
|
|
|
do
|
|
local e = evo.spawn({ [f1] = 42 })
|
|
assert(evo.alive(e) and not evo.empty(e) and evo.locate(e) == evo.chunk(f1))
|
|
assert(evo.has(e, f1) and evo.get(e, f1) == 42)
|
|
end
|
|
|
|
do
|
|
local e = evo.spawn({ [f1] = 42, [f2] = 'hello' })
|
|
assert(evo.alive(e) and not evo.empty(e) and evo.locate(e) == evo.chunk(f1, f2, f3))
|
|
assert(evo.has(e, f1) and evo.get(e, f1) == 42)
|
|
assert(evo.has(e, f2) and evo.get(e, f2) == 'hello')
|
|
assert(evo.has(e, f3) and evo.get(e, f3) == true)
|
|
end
|
|
end
|
|
|
|
do
|
|
local f1, f2, f3 = evo.id(3)
|
|
evo.set(f2, evo.REQUIRES, { f1, f3 })
|
|
evo.set(f3, evo.DEFAULT, 21)
|
|
evo.set(f3, evo.REQUIRES, { f2 })
|
|
|
|
do
|
|
local e = evo.spawn({ [f1] = 42 })
|
|
assert(evo.alive(e) and not evo.empty(e) and evo.locate(e) == evo.chunk(f1))
|
|
assert(evo.has(e, f1) and evo.get(e, f1) == 42)
|
|
end
|
|
|
|
do
|
|
local e = evo.spawn({ [f1] = 42, [f2] = 'hello' })
|
|
assert(evo.alive(e) and not evo.empty(e) and evo.locate(e) == evo.chunk(f1, f2, f3))
|
|
assert(evo.has(e, f1) and evo.get(e, f1) == 42)
|
|
assert(evo.has(e, f2) and evo.get(e, f2) == 'hello')
|
|
assert(evo.has(e, f3) and evo.get(e, f3) == 21)
|
|
end
|
|
end
|
|
|
|
do
|
|
local f1, f2, f3, f4 = evo.id(4)
|
|
evo.set(f2, evo.DUPLICATE, function() return nil end)
|
|
evo.set(f2, evo.REQUIRES, { f1, f3, f4 })
|
|
evo.set(f3, evo.DEFAULT, 21)
|
|
evo.set(f3, evo.DUPLICATE, function(v) return v * 3 end)
|
|
evo.set(f3, evo.REQUIRES, { f2 })
|
|
|
|
do
|
|
local e = evo.spawn({ [f1] = 42 })
|
|
assert(evo.alive(e) and not evo.empty(e) and evo.locate(e) == evo.chunk(f1))
|
|
assert(evo.has(e, f1) and evo.get(e, f1) == 42)
|
|
end
|
|
|
|
do
|
|
local e = evo.spawn({ [f1] = 42, [f2] = true })
|
|
assert(evo.alive(e) and not evo.empty(e) and evo.locate(e) == evo.chunk(f1, f2, f3, f4))
|
|
assert(evo.has(e, f1) and evo.get(e, f1) == 42)
|
|
assert(evo.has(e, f2) and evo.get(e, f2) == true)
|
|
assert(evo.has(e, f3) and evo.get(e, f3) == 21 * 3)
|
|
assert(evo.has(e, f4) and evo.get(e, f4) == true)
|
|
end
|
|
end
|
|
|
|
do
|
|
local f1, f2, f3 = evo.id(3)
|
|
evo.set(f2, evo.REQUIRES, { f3 })
|
|
evo.set(f3, evo.TAG)
|
|
|
|
local f2_set_sum, f2_inserted_sum = 0, 0
|
|
local f3_set_count, f3_inserted_count = 0, 0
|
|
|
|
evo.set(f2, evo.ON_SET, function(e, f, c)
|
|
assert(c == 42)
|
|
assert(evo.get(e, f) == c)
|
|
assert(f == f2)
|
|
f2_set_sum = f2_set_sum + c
|
|
end)
|
|
|
|
evo.set(f2, evo.ON_INSERT, function(e, f, c)
|
|
assert(c == 42)
|
|
assert(evo.get(e, f) == c)
|
|
assert(f == f2)
|
|
f2_inserted_sum = f2_inserted_sum + c
|
|
end)
|
|
|
|
evo.set(f3, evo.ON_SET, function(e, f, c)
|
|
assert(c == nil)
|
|
assert(evo.get(e, f) == c)
|
|
assert(f == f3)
|
|
f3_set_count = f3_set_count + 1
|
|
end)
|
|
|
|
evo.set(f3, evo.ON_INSERT, function(e, f, c)
|
|
assert(c == nil)
|
|
assert(evo.get(e, f) == c)
|
|
assert(f == f3)
|
|
f3_inserted_count = f3_inserted_count + 1
|
|
end)
|
|
|
|
do
|
|
f3_set_count, f3_inserted_count = 0, 0
|
|
local e = evo.spawn({ [f1] = 'hello', [f2] = 42 })
|
|
assert(evo.alive(e) and not evo.empty(e) and evo.locate(e) == evo.chunk(f1, f2, f3))
|
|
assert(f2_set_sum == 42 and f2_inserted_sum == 42)
|
|
assert(f3_set_count == 1 and f3_inserted_count == 1)
|
|
end
|
|
end
|
|
|
|
do
|
|
do
|
|
local es, ec = evo.multi_spawn(2)
|
|
assert(#es == 2 and ec == 2)
|
|
|
|
for i = 1, ec do
|
|
assert(evo.alive(es[i]) and evo.empty(es[i]))
|
|
end
|
|
end
|
|
|
|
do
|
|
local es, ec = evo.multi_spawn(2, {})
|
|
assert(#es == 2 and ec == 2)
|
|
|
|
for i = 1, ec do
|
|
assert(evo.alive(es[i]) and evo.empty(es[i]))
|
|
end
|
|
end
|
|
end
|
|
|
|
do
|
|
local f1, f2 = evo.id(2)
|
|
|
|
do
|
|
local es, ec = evo.multi_spawn(3, { [f1] = 42 })
|
|
assert(#es == 3 and ec == 3)
|
|
|
|
for i = 1, ec do
|
|
assert(evo.alive(es[i]) and not evo.empty(es[i]) and evo.locate(es[i]) == evo.chunk(f1))
|
|
assert(evo.has(es[i], f1) and evo.get(es[i], f1) == 42)
|
|
end
|
|
end
|
|
|
|
do
|
|
local es, ec = evo.multi_spawn(3, { [f1] = 42, [f2] = 'hello' })
|
|
assert(#es == 3 and ec == 3)
|
|
|
|
for i = 1, ec do
|
|
assert(evo.alive(es[i]) and not evo.empty(es[i]) and evo.locate(es[i]) == evo.chunk(f1, f2))
|
|
assert(evo.has(es[i], f1) and evo.get(es[i], f1) == 42)
|
|
assert(evo.has(es[i], f2) and evo.get(es[i], f2) == 'hello')
|
|
end
|
|
end
|
|
end
|
|
|
|
do
|
|
local f1, f2 = evo.id(2)
|
|
evo.set(f1, evo.REQUIRES, { f2 })
|
|
|
|
do
|
|
local es, ec = evo.multi_spawn(3, { [f1] = 42 })
|
|
assert(#es == 3 and ec == 3)
|
|
|
|
for i = 1, ec do
|
|
assert(evo.alive(es[i]) and not evo.empty(es[i]) and evo.locate(es[i]) == evo.chunk(f1, f2))
|
|
assert(evo.has(es[i], f1) and evo.get(es[i], f1) == 42)
|
|
assert(evo.has(es[i], f2) and evo.get(es[i], f2) == true)
|
|
end
|
|
end
|
|
end
|
|
|
|
do
|
|
local f1, f2 = evo.id(2)
|
|
evo.set(f1, evo.REQUIRES, { f2 })
|
|
|
|
do
|
|
local es, ec = evo.multi_spawn(1, { [f1] = 42 })
|
|
assert(#es == 1 and ec == 1)
|
|
|
|
for i = 1, ec do
|
|
assert(evo.alive(es[i]) and not evo.empty(es[i]) and evo.locate(es[i]) == evo.chunk(f1, f2))
|
|
assert(evo.has(es[i], f1) and evo.get(es[i], f1) == 42)
|
|
assert(evo.has(es[i], f2) and evo.get(es[i], f2) == true)
|
|
end
|
|
end
|
|
end
|
|
|
|
do
|
|
local f1, f2, f3 = evo.id(3)
|
|
evo.set(f1, evo.REQUIRES, { f2, f3 })
|
|
evo.set(f2, evo.DEFAULT, 'hello')
|
|
|
|
do
|
|
local es, ec = evo.multi_spawn(4, { [f1] = 42 })
|
|
assert(#es == 4 and ec == 4)
|
|
|
|
for i = 1, ec do
|
|
assert(evo.alive(es[i]) and not evo.empty(es[i]) and evo.locate(es[i]) == evo.chunk(f1, f2, f3))
|
|
assert(evo.has(es[i], f1) and evo.get(es[i], f1) == 42)
|
|
assert(evo.has(es[i], f2) and evo.get(es[i], f2) == 'hello')
|
|
assert(evo.has(es[i], f3) and evo.get(es[i], f3) == true)
|
|
end
|
|
end
|
|
|
|
do
|
|
local es, ec = evo.multi_spawn(4, { [f1] = 42, [f2] = 'world' })
|
|
assert(#es == 4 and ec == 4)
|
|
|
|
for i = 1, ec do
|
|
assert(evo.alive(es[i]) and not evo.empty(es[i]) and evo.locate(es[i]) == evo.chunk(f1, f2, f3))
|
|
assert(evo.has(es[i], f1) and evo.get(es[i], f1) == 42)
|
|
assert(evo.has(es[i], f2) and evo.get(es[i], f2) == 'world')
|
|
assert(evo.has(es[i], f3) and evo.get(es[i], f3) == true)
|
|
end
|
|
end
|
|
|
|
do
|
|
local es, ec = evo.multi_spawn(4, { [f1] = 42, [f2] = 'world', [f3] = false })
|
|
assert(#es == 4 and ec == 4)
|
|
|
|
for i = 1, ec do
|
|
assert(evo.alive(es[i]) and not evo.empty(es[i]) and evo.locate(es[i]) == evo.chunk(f1, f2, f3))
|
|
assert(evo.has(es[i], f1) and evo.get(es[i], f1) == 42)
|
|
assert(evo.has(es[i], f2) and evo.get(es[i], f2) == 'world')
|
|
assert(evo.has(es[i], f3) and evo.get(es[i], f3) == false)
|
|
end
|
|
end
|
|
end
|
|
|
|
do
|
|
local f1, f2 = evo.id(2)
|
|
evo.set(f1, evo.REQUIRES, { f2 })
|
|
evo.set(f1, evo.DUPLICATE, function() return nil end)
|
|
evo.set(f2, evo.DEFAULT, 'hello')
|
|
evo.set(f2, evo.DUPLICATE, function(v) return v .. '!' end)
|
|
|
|
do
|
|
local es, ec = evo.multi_spawn(4, { [f1] = 42 })
|
|
assert(#es == 4 and ec == 4)
|
|
|
|
for i = 1, ec do
|
|
assert(evo.alive(es[i]) and not evo.empty(es[i]) and evo.locate(es[i]) == evo.chunk(f1, f2))
|
|
assert(evo.has(es[i], f1) and evo.get(es[i], f1) == true)
|
|
assert(evo.has(es[i], f2) and evo.get(es[i], f2) == 'hello!')
|
|
end
|
|
end
|
|
|
|
do
|
|
local es, ec = evo.multi_spawn(4, { [f1] = 42, [f2] = 'world' })
|
|
assert(#es == 4 and ec == 4)
|
|
|
|
for i = 1, ec do
|
|
assert(evo.alive(es[i]) and not evo.empty(es[i]) and evo.locate(es[i]) == evo.chunk(f1, f2))
|
|
assert(evo.has(es[i], f1) and evo.get(es[i], f1) == true)
|
|
assert(evo.has(es[i], f2) and evo.get(es[i], f2) == 'world!')
|
|
end
|
|
end
|
|
|
|
do
|
|
local es, ec = evo.multi_spawn(4, { [f2] = 'hello world' })
|
|
assert(#es == 4 and ec == 4)
|
|
|
|
for i = 1, ec do
|
|
assert(evo.alive(es[i]) and not evo.empty(es[i]) and evo.locate(es[i]) == evo.chunk(f2))
|
|
assert(evo.has(es[i], f2) and evo.get(es[i], f2) == 'hello world!')
|
|
end
|
|
end
|
|
end
|
|
|
|
do
|
|
local f1, f2, f3 = evo.id(3)
|
|
evo.set(f2, evo.REQUIRES, { f3 })
|
|
evo.set(f3, evo.TAG)
|
|
|
|
local f2_set_sum, f2_inserted_sum = 0, 0
|
|
local f3_set_count, f3_inserted_count = 0, 0
|
|
|
|
evo.set(f2, evo.ON_SET, function(e, f, c)
|
|
assert(c == 42)
|
|
assert(evo.get(e, f) == c)
|
|
assert(f == f2)
|
|
f2_set_sum = f2_set_sum + c
|
|
end)
|
|
|
|
evo.set(f2, evo.ON_INSERT, function(e, f, c)
|
|
assert(c == 42)
|
|
assert(evo.get(e, f) == c)
|
|
assert(f == f2)
|
|
f2_inserted_sum = f2_inserted_sum + c
|
|
end)
|
|
|
|
evo.set(f3, evo.ON_SET, function(e, f, c)
|
|
assert(c == nil)
|
|
assert(evo.get(e, f) == c)
|
|
assert(f == f3)
|
|
f3_set_count = f3_set_count + 1
|
|
end)
|
|
|
|
evo.set(f3, evo.ON_INSERT, function(e, f, c)
|
|
assert(c == nil)
|
|
assert(evo.get(e, f) == c)
|
|
assert(f == f3)
|
|
f3_inserted_count = f3_inserted_count + 1
|
|
end)
|
|
|
|
do
|
|
local es, ec = evo.multi_spawn(3, { [f1] = 'hello', [f2] = 42 })
|
|
assert(#es == 3 and ec == 3)
|
|
|
|
for i = 1, ec do
|
|
assert(evo.alive(es[i]) and not evo.empty(es[i]) and evo.locate(es[i]) == evo.chunk(f1, f2, f3))
|
|
assert(f2_set_sum == 42 * 3 and f2_inserted_sum == 42 * 3)
|
|
assert(f3_set_count == 3 and f3_inserted_count == 3)
|
|
end
|
|
end
|
|
end
|