Implemented a first and basic version of a Rete rule engine
This commit is contained in:
@@ -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",)
|
||||
Reference in New Issue
Block a user