Implemented a first and basic version of a Rete rule engine

This commit is contained in:
2021-02-09 16:06:32 +01:00
parent 821dbed189
commit a2a8d5c5e5
110 changed files with 7301 additions and 1654 deletions
+1 -1
View File
@@ -1230,7 +1230,7 @@ as:
assert res[0].body == 21
def test_i_can_define_rules_priorities(self):
sheerka, context, r1, r2 = self.init_test().with_rules(("True", "True"), ("False", "False")).unpack()
sheerka, context, r1, r2 = self.init_test().with_format_rules(("True", "True"), ("False", "False")).unpack()
sheerka.evaluate_user_input("def concept rule x > rule y where isinstance(x, int) and isinstance(y, int) as set_is_greater_than(__PRECEDENCE, r:|x:, r:|y:, 'Rule')")
res = sheerka.evaluate_user_input(f"eval rule {r1.id} > rule {r2.id}")
@@ -51,6 +51,23 @@ post : None
ret : None
vars : []
props : {}
"""
def test_i_can_describe_a_rule(self, capsys):
sheerka = self.get_sheerka()
sheerka.enable_process_return_values = True
sheerka.evaluate_user_input("desc(r:|1:)")
captured = capsys.readouterr()
assert captured.out == """id : 1
name : Print return values
type : print
predicate: __rets
action : list(__rets)
priority : 4
compiled : True
enabled : True
"""
def test_i_can_display_multiple_success(self, capsys):
@@ -0,0 +1,25 @@
from core.builtin_concepts_ids import BuiltinConcepts
from evaluators.PythonEvaluator import PythonEvalError
from tests.TestUsingMemoryBasedSheerka import TestUsingMemoryBasedSheerka
class TestSheerkaNonRegDisplay(TestUsingMemoryBasedSheerka):
def test_i_can_apply_simple_rule(self):
init = [
"def concept one as 1",
"when __ret.status then test_error()",
]
sheerka = self.init_scenario(init)
sheerka.enable_process_rules = True
res = sheerka.evaluate_user_input("one")
assert len(res) == 1
ret = res[0]
assert not ret.status
assert sheerka.isinstance(ret.body, BuiltinConcepts.ERROR)
assert isinstance(ret.body.body, PythonEvalError)
assert isinstance(ret.body.body.error, Exception)
assert ret.body.body.error.args == ("I can raise an error",)