From 2d4126ef0985fca15f180fb7522bd50fda2755ac Mon Sep 17 00:00:00 2001 From: BlackMATov Date: Sun, 29 Dec 2024 18:54:09 +0700 Subject: [PATCH] evolved.TAG is a TAG :-) --- README.md | 18 +++++++++++ develop/untests.lua | 77 +++++++++++++++++++++++++++++++++++++++++++++ evolved.lua | 2 ++ 3 files changed, 97 insertions(+) diff --git a/README.md b/README.md index 94c1920..44b0293 100644 --- a/README.md +++ b/README.md @@ -1,5 +1,23 @@ # evolved.lua (work in progress) +## Constants + +``` +TAG :: fragment +DEFAULT :: fragment +CONSTRUCT :: fragment + +ON_SET :: fragment +ON_ASSIGN :: fragment +ON_INSERT :: fragment +ON_REMOVE :: fragment + +INCLUDE_LIST :: fragment +EXCLUDE_LIST :: fragment +``` + +## Functions + ``` id :: integer? -> id... diff --git a/develop/untests.lua b/develop/untests.lua index 735ea70..034812a 100644 --- a/develop/untests.lua +++ b/develop/untests.lua @@ -2223,3 +2223,80 @@ do assert(evo.get(e1, f1) == nil) end end + +do + local f1, f2 = evo.id(2) + + local q = evo.id() + evo.set(q, evo.INCLUDE_LIST, { f1 }) + evo.set(q, evo.INCLUDE_LIST, { f2 }) + + local e1 = evo.id() + assert(evo.insert(e1, f1, 41)) + + local e2 = evo.id() + assert(evo.insert(e2, f2, 42)) + + do + local iter, state = evo.execute(q) + local chunk, entities = iter(state) + + assert(chunk == evo.chunk(f2)) + assert(entities and entities[1] == e2) + end + + evo.set(q, evo.INCLUDE_LIST) + + do + local iter, state = evo.execute(q) + local chunk, entities = iter(state) + + assert(not chunk) + assert(not entities) + end +end + +do + local f1, f2 = evo.id(2) + + local q = evo.id() + evo.set(q, evo.INCLUDE_LIST, { f1 }) + + evo.set(q, evo.EXCLUDE_LIST, { f1 }) + evo.set(q, evo.EXCLUDE_LIST, { f2 }) + + local e1 = evo.id() + assert(evo.insert(e1, f1, 41)) + + local e2 = evo.id() + assert(evo.insert(e2, f1, 43)) + assert(evo.insert(e2, f2, 44)) + + do + local iter, state = evo.execute(q) + local chunk, entities = iter(state) + assert(chunk == evo.chunk(f1)) + assert(entities and entities[1] == e1) + + chunk, entities = iter(state) + assert(not chunk) + assert(not entities) + end + + evo.set(q, evo.EXCLUDE_LIST) + + do + local iter, state = evo.execute(q) + local chunk, entities = iter(state) + assert(chunk == evo.chunk(f1)) + assert(entities and entities[1] == e1) + + chunk, entities = iter(state) + assert(chunk == evo.chunk(f1, f2)) + assert(entities and entities[1] == e2) + + chunk, entities = iter(state) + assert(not chunk) + assert(not entities) + end +end diff --git a/evolved.lua b/evolved.lua index d8db45b..1a32d41 100644 --- a/evolved.lua +++ b/evolved.lua @@ -2123,6 +2123,8 @@ local __EXCLUDE_SET = __acquire_id() local __SORTED_INCLUDE_LIST = __acquire_id() local __SORTED_EXCLUDE_LIST = __acquire_id() +assert(evolved.insert(evolved.TAG, evolved.TAG)) + assert(evolved.insert(evolved.INCLUDE_LIST, evolved.CONSTRUCT, function(_, _, include_list) return include_list or {} end))