first queries wip

This commit is contained in:
BlackMATov
2024-12-26 00:48:48 +07:00
parent 27484ceeca
commit 755c3ddfff
3 changed files with 284 additions and 0 deletions

View File

@@ -1,5 +1,18 @@
local evo = require 'evolved'
---@generic V
---@param list V[]
---@return boolean
---@nodiscard
local function __is_sorted(list)
for i = 1, #list - 1 do
if list[i] > list[i + 1] then
return false
end
end
return true
end
do
local e1, e2 = evo.id(), evo.id()
assert(e1 ~= e2)
@@ -663,3 +676,74 @@ do
assert(evo.get(e, f2) == nil)
end
end
do
local f1, f2, f3, f4 = evo.id(4)
do
local q = evo.id()
evo.set(q, evo.INCLUDE_LIST)
assert(evo.has_all(q, evo.INCLUDE_LIST, evo.EXCLUDE_LIST))
local include_list, exclude_list = evo.get(q, evo.INCLUDE_LIST, evo.EXCLUDE_LIST)
assert(type(include_list) == "table" and next(include_list) == nil)
assert(type(exclude_list) == "table" and next(exclude_list) == nil)
end
do
local q = evo.id()
evo.set(q, evo.EXCLUDE_LIST)
assert(evo.has_all(q, evo.EXCLUDE_LIST, evo.INCLUDE_LIST))
local include_list, exclude_list = evo.get(q, evo.INCLUDE_LIST, evo.EXCLUDE_LIST)
assert(type(include_list) == "table" and next(include_list) == nil)
assert(type(exclude_list) == "table" and next(exclude_list) == nil)
end
do
local q = evo.id()
evo.set(q, evo.INCLUDE_LIST, { f2, f1 })
assert(__is_sorted(evo.get(q, evo.INCLUDE_LIST)))
evo.set(q, evo.EXCLUDE_LIST, { f4, f3 })
assert(__is_sorted(evo.get(q, evo.EXCLUDE_LIST)))
end
end
do
local f1, f2, f3, f4 = evo.id(4)
local q = evo.id()
evo.set(q, evo.INCLUDE_LIST, { f2, f1 })
evo.set(q, evo.EXCLUDE_LIST, { f3 })
do
local e1 = evo.id()
assert(evo.insert(e1, f1, 41))
local e2 = evo.id()
assert(evo.insert(e2, f1, 41))
assert(evo.insert(e2, f2, 42))
local e3 = evo.id()
assert(evo.insert(e3, f1, 43))
assert(evo.insert(e3, f2, 44))
assert(evo.insert(e3, f3, 45))
local e4 = evo.id()
assert(evo.insert(e4, f1, 45))
assert(evo.insert(e4, f2, 46))
assert(evo.insert(e4, f3, 47))
assert(evo.insert(e4, f4, 48))
local e5 = evo.id()
assert(evo.insert(e5, f1, 49))
assert(evo.insert(e5, f2, 50))
assert(evo.insert(e5, f4, 51))
for chunk in evo.execute(q) do
print(chunk)
end
end
end