Fixed some misbehaviours regarding question() + added #import functionality when restoring
This commit is contained in:
@@ -215,7 +215,6 @@ class TestSheerkaCreateNewConcept(TestUsingMemoryBasedSheerka):
|
||||
assert sheerka.cache_manager.get(sheerka.CONCEPTS_REFERENCES_ENTRY, twenties.id) is None
|
||||
|
||||
|
||||
|
||||
class TestSheerkaCreateNewConceptFileBased(TestUsingFileBasedSheerka):
|
||||
def test_i_can_add_several_concepts(self):
|
||||
sheerka = self.get_sheerka()
|
||||
|
||||
@@ -146,8 +146,11 @@ class TestBuiltinHelpers(TestUsingMemoryBasedSheerka):
|
||||
|
||||
@pytest.mark.parametrize("concepts, expected", [
|
||||
([], []),
|
||||
([Concept("foo", pre="False"), Concept("bar")], ["bar"]),
|
||||
([Concept("foo", pre="True"), Concept("bar")], ["foo"]),
|
||||
([Concept("foo").def_var("a"), Concept("bar")], ["bar"]),
|
||||
([Concept("foo").def_var("a"), Concept("bar")], ["bar"]), # less variables is better
|
||||
([Concept("foo"), Concept("bar")], ["foo", "bar"]),
|
||||
([Concept("foo", pre="is_question()"), Concept("bar")], ["bar"]),
|
||||
])
|
||||
def test_i_can_resolve_ambiguity_when_empty(self, concepts, expected):
|
||||
context = self.get_context()
|
||||
|
||||
@@ -119,7 +119,7 @@ class TestAddConceptEvaluator(TestUsingMemoryBasedSheerka):
|
||||
def_concept_return_value = self.get_def_concept(
|
||||
name="x plus y",
|
||||
where=self.pretval(Concept("u is a v").def_var("u").def_var("v"), source="x is a number"),
|
||||
body=self.pretval(Concept("add a b").def_var("a").def_var("b"), source="add x y"),)
|
||||
body=self.pretval(Concept("add a b").def_var("a").def_var("b"), source="add x y"), )
|
||||
|
||||
evaluated = AddConceptEvaluator().eval(context, def_concept_return_value)
|
||||
|
||||
@@ -186,8 +186,10 @@ class TestAddConceptEvaluator(TestUsingMemoryBasedSheerka):
|
||||
|
||||
@pytest.mark.parametrize("expression, name, expected", [
|
||||
("isinstance(a, str)", "a b", {"a"}),
|
||||
("a.location=b", "a is in b", {"a", "b"}),
|
||||
("a.location=b", "'a' is in b", {"b"}),
|
||||
("a.location = b", "a is in b", {"a", "b"}),
|
||||
("a.location = b", "'a' is in b", {"b"}),
|
||||
("date.today()", "what is the date", set()),
|
||||
("a.location", "where is a", {"a"})
|
||||
])
|
||||
def test_i_can_get_variables_from_python_node_when_long_name(self, expression, name, expected):
|
||||
ret_val = self.get_concept_part(expression)
|
||||
|
||||
@@ -45,5 +45,6 @@ class TestPrepareEvalQuestionEvaluator(TestUsingMemoryBasedSheerka):
|
||||
assert res.body.body == expected
|
||||
|
||||
assert BuiltinConcepts.EVAL_QUESTION_REQUESTED in context.protected_hints
|
||||
assert BuiltinConcepts.EVAL_UNTIL_SUCCESS_REQUESTED in context.protected_hints
|
||||
assert BuiltinConcepts.EVAL_BODY_REQUESTED in context.protected_hints
|
||||
assert BuiltinConcepts.RETURN_BODY_REQUESTED in context.protected_hints
|
||||
|
||||
@@ -1061,26 +1061,27 @@ as:
|
||||
"def concept number",
|
||||
"set_isa(one, number)",
|
||||
"def concept q from q ? as question(q)",
|
||||
"set_auto_eval(q)",
|
||||
"def concept is_a from x is a y as isa(x,y) pre in_context(BuiltinConcepts.EVAL_QUESTION_REQUESTED)",
|
||||
"set_is_greater_than(BuiltinConcepts.PRECEDENCE, c:is_a:, c:q:)"
|
||||
"set_is_greater_than(BuiltinConcepts.PRECEDENCE, c:is_a:, c:q:)",
|
||||
]
|
||||
|
||||
sheerka = self.init_scenario(init)
|
||||
res = sheerka.evaluate_user_input("one is a number ?") # automatically evaluated
|
||||
assert len(res) == 1
|
||||
assert res[0].status
|
||||
assert res[0].body
|
||||
assert res[0].body == True # the body MUST be a boolean
|
||||
|
||||
res = sheerka.evaluate_user_input("foo is a number ?") # automatically evaluated
|
||||
assert len(res) == 1
|
||||
assert res[0].status
|
||||
assert not res[0].body
|
||||
assert res[0].body == False # the body MUST be a boolean
|
||||
|
||||
# Sanity, when there is only one 'is a' concept. It's chosen regardless of the PRE condition
|
||||
# x is a y is supposed to be a question. It cannot be used if not in a context of a question
|
||||
res = sheerka.evaluate_user_input("one is a number")
|
||||
assert len(res) == 1
|
||||
assert res[0].status
|
||||
assert res[0].body
|
||||
assert not res[0].status
|
||||
assert sheerka.isinstance(res[0].body, BuiltinConcepts.CONDITION_FAILED)
|
||||
|
||||
def test_i_can_evaluate_source_code_with_concept(self):
|
||||
init = [
|
||||
|
||||
Reference in New Issue
Block a user