Fixed #3: Added sheerka.resolve_rule()
Fixed #5: Refactored SheerkaComparisonManager Fixed #6: Sya parser no longer works after restart
This commit is contained in:
@@ -87,4 +87,21 @@ ReturnValue(who=evaluators.Concept, status=True, value=(1002)foo)
|
||||
test 1
|
||||
#unit_test#
|
||||
__default__
|
||||
"""
|
||||
|
||||
def test_i_can_display_objects_in_memory(self, capsys):
|
||||
init = [
|
||||
"def concept one as 1",
|
||||
"def concept two as 2",
|
||||
"one",
|
||||
"two"
|
||||
]
|
||||
sheerka = self.init_scenario(init)
|
||||
capsys.readouterr()
|
||||
|
||||
sheerka.enable_process_return_values = True
|
||||
sheerka.evaluate_user_input("in_memory()")
|
||||
captured = capsys.readouterr()
|
||||
assert captured.out == """one: (1001)one
|
||||
two: (1002)two
|
||||
"""
|
||||
|
||||
@@ -116,7 +116,7 @@ as:
|
||||
assert service.has_id(concept_saved.id)
|
||||
assert service.has_name(concept_saved.name)
|
||||
assert service.has_hash(concept_saved.get_definition_hash())
|
||||
assert sheerka.om.copy(sheerka.CONCEPTS_BY_FIRST_KEYWORD_ENTRY) == {'+': ['1001']}
|
||||
assert sheerka.om.copy(SheerkaConceptManager.CONCEPTS_BY_FIRST_KEYWORD_ENTRY) == {'+': ['1001']}
|
||||
|
||||
# sdp is up to date
|
||||
assert sheerka.om.current_sdp().exists(SheerkaConceptManager.CONCEPTS_BY_KEY_ENTRY, expected.key)
|
||||
@@ -865,7 +865,7 @@ as:
|
||||
res = sheerka.evaluate_user_input("set_is_less_than('some_prop', two, three)")
|
||||
assert res[0].status
|
||||
|
||||
res = sheerka.evaluate_user_input("get_concepts_weights('some_prop')")
|
||||
res = sheerka.evaluate_user_input("get_weights('some_prop')")
|
||||
assert res[0].status
|
||||
assert res[0].body == {'c:one|1001:': 1, 'c:two|1002:': 2, 'c:three|1003:': 3}
|
||||
|
||||
@@ -874,7 +874,7 @@ as:
|
||||
res = sheerka.evaluate_user_input("eval four > three")
|
||||
assert res[0].status
|
||||
|
||||
assert sheerka.get_concepts_weights("some_prop") == {'c:one|1001:': 1,
|
||||
assert sheerka.get_weights("some_prop") == {'c:one|1001:': 1,
|
||||
'c:two|1002:': 2,
|
||||
'c:three|1003:': 3,
|
||||
'c:four|1004:': 4}
|
||||
@@ -898,14 +898,14 @@ as:
|
||||
res = sheerka.evaluate_user_input(expression)
|
||||
assert res[0].status
|
||||
assert sheerka.isinstance(res[0].body, BuiltinConcepts.SUCCESS)
|
||||
assert sheerka.get_concepts_weights("some_prop") == {'c:one|1001:': 1, 'c:two|1002:': 2}
|
||||
assert sheerka.get_weights("some_prop") == {'c:one|1001:': 1, 'c:two|1002:': 2}
|
||||
|
||||
# it now also works using the concepts names
|
||||
expression = "eval two < three"
|
||||
res = sheerka.evaluate_user_input(expression)
|
||||
assert res[0].status
|
||||
assert sheerka.isinstance(res[0].body, BuiltinConcepts.SUCCESS)
|
||||
assert sheerka.get_concepts_weights("some_prop") == {'c:one|1001:': 1, 'c:two|1002:': 2, 'c:three|1003:': 3}
|
||||
assert sheerka.get_weights("some_prop") == {'c:one|1001:': 1, 'c:two|1002:': 2, 'c:three|1003:': 3}
|
||||
|
||||
def test_i_can_detect_multiple_errors_when_evaluating_a_concept(self):
|
||||
sheerka, context, foo, plus_one = self.init_concepts(
|
||||
@@ -1229,6 +1229,19 @@ as:
|
||||
assert res[0].status
|
||||
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.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}")
|
||||
|
||||
assert len(res) == 1
|
||||
assert res[0].status
|
||||
assert sheerka.isinstance(res[0].body, BuiltinConcepts.SUCCESS)
|
||||
|
||||
weights = sheerka.get_weights(BuiltinConcepts.PRECEDENCE, 'Rule')
|
||||
assert weights[r1.str_id] == weights[r2.str_id] + 1
|
||||
|
||||
|
||||
class TestSheerkaNonRegFile(TestUsingFileBasedSheerka):
|
||||
def test_i_can_def_several_concepts(self):
|
||||
|
||||
Reference in New Issue
Block a user