Fixed memory() and RET usage
This commit is contained in:
@@ -24,7 +24,6 @@ class TestAddConceptEvaluator(TestUsingMemoryBasedSheerka):
|
||||
concept = Concept(name="foo",
|
||||
where="True",
|
||||
pre="2 > 1",
|
||||
ret="3",
|
||||
post="4").def_var("a", "5").def_var("b", "6")
|
||||
|
||||
evaluator = ConceptEvaluator()
|
||||
@@ -36,7 +35,6 @@ class TestAddConceptEvaluator(TestUsingMemoryBasedSheerka):
|
||||
assert result.value.name == "foo"
|
||||
assert result.value.get_value(ConceptParts.WHERE) == True
|
||||
assert result.value.get_value(ConceptParts.PRE) == True
|
||||
assert result.value.get_value(ConceptParts.RET) == 3
|
||||
assert result.value.get_value(ConceptParts.POST) == 4
|
||||
assert result.value.get_value("a") == 5
|
||||
assert result.value.get_value("b") == 6
|
||||
|
||||
@@ -8,6 +8,7 @@ from core.tokenizer import Tokenizer
|
||||
from evaluators.PythonEvaluator import PythonEvaluator, PythonEvalError
|
||||
from parsers.BaseNodeParser import SourceCodeNode, SourceCodeWithConceptNode
|
||||
from parsers.PythonParser import PythonNode, PythonParser
|
||||
from parsers.PythonWithConceptsParser import PythonWithConceptsParser
|
||||
|
||||
from tests.TestUsingMemoryBasedSheerka import TestUsingMemoryBasedSheerka
|
||||
|
||||
@@ -17,6 +18,15 @@ def get_concept_name(concept):
|
||||
|
||||
|
||||
def get_source_code_node(source_code, concepts=None):
|
||||
if concepts:
|
||||
for concept_name, concept in sorted(concepts.items(), key=lambda kv: len(kv[0]), reverse=True):
|
||||
identifier = "__C__" + PythonWithConceptsParser.sanitize(concept.name)
|
||||
if concept.id:
|
||||
identifier += "__" + concept.id
|
||||
identifier += "__C__"
|
||||
source_code = source_code.replace(concept_name, identifier)
|
||||
concepts[identifier] = concept
|
||||
|
||||
if source_code:
|
||||
python_node = PythonNode(source_code, ast.parse(source_code, f"<source>", 'eval'))
|
||||
else:
|
||||
@@ -32,6 +42,11 @@ def get_source_code_node(source_code, concepts=None):
|
||||
return scwcn
|
||||
|
||||
|
||||
def get_ret_val_from_source_code(context, source_code, concepts):
|
||||
parsed = get_source_code_node(source_code, concepts)
|
||||
return context.sheerka.ret("parsers.??", True, ParserResultConcept(value=parsed))
|
||||
|
||||
|
||||
class TestPythonEvaluator(TestUsingMemoryBasedSheerka):
|
||||
|
||||
@pytest.mark.parametrize("ret_val, expected", [
|
||||
@@ -289,3 +304,14 @@ class TestPythonEvaluator(TestUsingMemoryBasedSheerka):
|
||||
|
||||
assert evaluated.status
|
||||
assert evaluated.value == 11
|
||||
|
||||
def test_i_can_eval_concept_with_ret(self):
|
||||
sheerka, context, one, the = self.init_concepts("one", Concept("the a", ret="a").def_var("a"))
|
||||
ret_val = get_ret_val_from_source_code(context, "test_using_context(one, the one)", {
|
||||
"the one": self.get_concept_instance(sheerka, the, a="one"),
|
||||
"one": self.get_concept_instance(sheerka, "one")
|
||||
})
|
||||
|
||||
evaluated = PythonEvaluator().eval(context, ret_val)
|
||||
assert evaluated.status
|
||||
assert evaluated.value.startswith("I have access to Sheerka ! param1=(1001)one, param2=(1001)one, event=")
|
||||
|
||||
@@ -1,47 +1,47 @@
|
||||
import pytest
|
||||
from core.builtin_concepts import ReturnValueConcept
|
||||
from core.concept import Concept
|
||||
from evaluators.RetEvaluator import RetEvaluator
|
||||
|
||||
from tests.BaseTest import BaseTest
|
||||
from tests.TestUsingMemoryBasedSheerka import TestUsingMemoryBasedSheerka
|
||||
|
||||
|
||||
class TestRetEvaluator(TestUsingMemoryBasedSheerka):
|
||||
|
||||
@pytest.mark.parametrize("ret_val, expected", [
|
||||
(ReturnValueConcept("who", True, Concept("foo", ret="bar")), True),
|
||||
(ReturnValueConcept("who", False, Concept("foo", ret="bar")), False),
|
||||
(ReturnValueConcept("who", True, Concept("foo")), False),
|
||||
(BaseTest.pretval(Concept("foo", ret="bar")), False),
|
||||
(ReturnValueConcept("who", True, "not even a concept"), False),
|
||||
])
|
||||
def test_i_can_match(self, ret_val, expected):
|
||||
context = self.get_context()
|
||||
assert RetEvaluator().matches(context, ret_val) == expected
|
||||
|
||||
def test_i_can_evaluate_fully_initialized(self):
|
||||
sheerka, context, foo, the_concept = self.init_concepts("foo", Concept("the concept", ret="a").def_var("a"))
|
||||
|
||||
instance = sheerka.new("the concept")
|
||||
instance.set_value("a", sheerka.new("foo"))
|
||||
ret_value = self.tretval(sheerka, instance)
|
||||
|
||||
res = RetEvaluator().eval(context, ret_value)
|
||||
assert res.status
|
||||
assert sheerka.isinstance(res.body, "foo")
|
||||
|
||||
@pytest.mark.parametrize("instance, expected", [
|
||||
(Concept("with ret", ret="a").def_var("a", "foo"), "foo"),
|
||||
(Concept("with ret", ret="a", body="10").def_var("a", "foo"), "foo"),
|
||||
(Concept("with ret", ret="a").def_var("a", "bar"), "bar"),
|
||||
])
|
||||
def test_i_can_evaluate(self, instance, expected):
|
||||
sheerka, context, foo, bar = self.init_concepts("foo", Concept("bar", body="10"))
|
||||
|
||||
ret_value = self.tretval(sheerka, instance)
|
||||
|
||||
res = RetEvaluator().eval(context, ret_value)
|
||||
assert res.status
|
||||
assert sheerka.isinstance(res.body, expected)
|
||||
|
||||
# import pytest
|
||||
# from core.builtin_concepts import ReturnValueConcept
|
||||
# from core.concept import Concept
|
||||
# from evaluators.RetEvaluator import RetEvaluator
|
||||
#
|
||||
# from tests.BaseTest import BaseTest
|
||||
# from tests.TestUsingMemoryBasedSheerka import TestUsingMemoryBasedSheerka
|
||||
#
|
||||
#
|
||||
# class TestRetEvaluator(TestUsingMemoryBasedSheerka):
|
||||
#
|
||||
# @pytest.mark.parametrize("ret_val, expected", [
|
||||
# (ReturnValueConcept("who", True, Concept("foo", ret="bar")), True),
|
||||
# (ReturnValueConcept("who", False, Concept("foo", ret="bar")), False),
|
||||
# (ReturnValueConcept("who", True, Concept("foo")), False),
|
||||
# (BaseTest.pretval(Concept("foo", ret="bar")), False),
|
||||
# (ReturnValueConcept("who", True, "not even a concept"), False),
|
||||
# ])
|
||||
# def test_i_can_match(self, ret_val, expected):
|
||||
# context = self.get_context()
|
||||
# assert RetEvaluator().matches(context, ret_val) == expected
|
||||
#
|
||||
# def test_i_can_evaluate_fully_initialized(self):
|
||||
# sheerka, context, foo, the_concept = self.init_concepts("foo", Concept("the concept", ret="a").def_var("a"))
|
||||
#
|
||||
# instance = sheerka.new("the concept")
|
||||
# instance.set_value("a", sheerka.new("foo"))
|
||||
# ret_value = self.tretval(sheerka, instance)
|
||||
#
|
||||
# res = RetEvaluator().eval(context, ret_value)
|
||||
# assert res.status
|
||||
# assert sheerka.isinstance(res.body, "foo")
|
||||
#
|
||||
# @pytest.mark.parametrize("instance, expected", [
|
||||
# (Concept("with ret", ret="a").def_var("a", "foo"), "foo"),
|
||||
# (Concept("with ret", ret="a", body="10").def_var("a", "foo"), "foo"),
|
||||
# (Concept("with ret", ret="a").def_var("a", "bar"), "bar"),
|
||||
# ])
|
||||
# def test_i_can_evaluate(self, instance, expected):
|
||||
# sheerka, context, foo, bar = self.init_concepts("foo", Concept("bar", body="10"))
|
||||
#
|
||||
# ret_value = self.tretval(sheerka, instance)
|
||||
#
|
||||
# res = RetEvaluator().eval(context, ret_value)
|
||||
# assert res.status
|
||||
# assert sheerka.isinstance(res.body, expected)
|
||||
#
|
||||
|
||||
@@ -1,5 +1,4 @@
|
||||
import pytest
|
||||
|
||||
from core.builtin_concepts import ReturnValueConcept, BuiltinConcepts
|
||||
from core.concept import Concept
|
||||
from evaluators.TooManySuccessEvaluator import TooManySuccessEvaluator
|
||||
@@ -44,8 +43,8 @@ class TestTooManySuccessEvaluator(TestUsingMemoryBasedSheerka):
|
||||
def test_i_can_eval(self):
|
||||
context = self.get_context()
|
||||
|
||||
value1 = r("evaluators.a", value=Concept("c1", body="1"))
|
||||
value2 = r("evaluators.a", value=Concept("c2", body="2"))
|
||||
value1 = r("evaluators.a", value=Concept("c1", body="1").auto_init())
|
||||
value2 = r("evaluators.a", value=Concept("c2", body="2").auto_init())
|
||||
return_values = [
|
||||
value1,
|
||||
value2,
|
||||
@@ -80,6 +79,23 @@ class TestTooManySuccessEvaluator(TestUsingMemoryBasedSheerka):
|
||||
assert matches
|
||||
assert res is None
|
||||
|
||||
def test_i_do_not_eval_when_the_concepts_are_not_evaluated(self):
|
||||
context = self.get_context()
|
||||
|
||||
return_values = [
|
||||
r("evaluators.a", value=Concept("c1", body="1")),
|
||||
r("evaluators.a", value=Concept("c2", body="2")),
|
||||
r("other", False),
|
||||
reduce_requested
|
||||
]
|
||||
|
||||
evaluator = TooManySuccessEvaluator()
|
||||
matches = evaluator.matches(context, return_values)
|
||||
res = evaluator.eval(context, return_values)
|
||||
|
||||
assert matches
|
||||
assert res is None
|
||||
|
||||
def test_other_success_are_not_reduced(self):
|
||||
context = self.get_context()
|
||||
|
||||
|
||||
Reference in New Issue
Block a user