Fixed #20: I can parse simple concepts
This commit is contained in:
@@ -92,3 +92,16 @@ class TestDefConceptEvaluator(BaseTest):
|
||||
new_concept = res.new[0].value
|
||||
assert context.sheerka.isinstance(new_concept, BuiltinConcepts.NEW_CONCEPT)
|
||||
assert new_concept.body.variables == expected
|
||||
assert new_concept.body.parameters == set(item[0] for item in expected)
|
||||
|
||||
def test_i_can_define_variables_that_are_not_parameters(self, context, evaluator):
|
||||
with NewOntology(context, "test_i_can_define_variables_that_are_not_parameters"):
|
||||
ret_val_input = get_ret_val_from(context, "def concept color def_var color_name")
|
||||
res = evaluator.eval(context, None, ret_val_input)
|
||||
|
||||
assert len(res.new) == 1
|
||||
assert res.new[0].status
|
||||
new_concept = res.new[0].value
|
||||
assert context.sheerka.isinstance(new_concept, BuiltinConcepts.NEW_CONCEPT)
|
||||
assert new_concept.body.variables == [("color_name", NotInit)]
|
||||
assert new_concept.body.parameters == set()
|
||||
|
||||
@@ -0,0 +1,51 @@
|
||||
import pytest
|
||||
|
||||
from base import BaseTest
|
||||
from evaluators.FilterSuccessful import FilterSuccessful
|
||||
from helpers import _rv, _rvf
|
||||
|
||||
|
||||
class TestFilterSuccessful(BaseTest):
|
||||
@pytest.fixture()
|
||||
def evaluator(self, sheerka):
|
||||
return sheerka.evaluators[FilterSuccessful.NAME]
|
||||
|
||||
def test_i_can_match_and_eval(self, context, evaluator):
|
||||
true1 = _rv("some_value1")
|
||||
true2 = _rv("some_value2")
|
||||
false1 = _rvf("some_value1")
|
||||
false2 = _rvf("some_value2")
|
||||
|
||||
return_values = [true1]
|
||||
m = evaluator.matches(context, return_values)
|
||||
assert m.status is False
|
||||
|
||||
return_values = [true1, true2]
|
||||
m = evaluator.matches(context, return_values)
|
||||
assert m.status is False
|
||||
|
||||
return_values = [false1]
|
||||
m = evaluator.matches(context, return_values)
|
||||
assert m.status is False
|
||||
|
||||
return_values = [false1, false2]
|
||||
m = evaluator.matches(context, return_values)
|
||||
assert m.status is False
|
||||
|
||||
return_values = [true1, false1]
|
||||
m = evaluator.matches(context, return_values)
|
||||
assert m.status is True
|
||||
assert m.obj == {'to_keep': [true1], 'to_drop': [false1]}
|
||||
|
||||
r = evaluator.eval(context, m.obj, return_values)
|
||||
assert r.new == [true1]
|
||||
assert r.eaten == [false1]
|
||||
|
||||
return_values = [true1, true2, false1, false2]
|
||||
m = evaluator.matches(context, return_values)
|
||||
assert m.status is True
|
||||
assert m.obj == {'to_keep': [true1, true2], 'to_drop': [false1, false2]}
|
||||
|
||||
r = evaluator.eval(context, m.obj, return_values)
|
||||
assert r.new == [true1, true2]
|
||||
assert r.eaten == [false1, false2]
|
||||
@@ -0,0 +1,48 @@
|
||||
import pytest
|
||||
|
||||
from base import BaseParserTest
|
||||
from conftest import NewOntology
|
||||
from core.BuiltinConcepts import BuiltinConcepts
|
||||
from evaluators.RecognizeSimpleConcept import RecognizeSimpleConcept
|
||||
from evaluators.base_evaluator import NotForMe
|
||||
from helpers import _rv, _rvf, get_concepts
|
||||
from parsers.ParserInput import ParserInput
|
||||
|
||||
|
||||
class TestRecognizeSimpleConcept(BaseParserTest):
|
||||
@pytest.fixture()
|
||||
def evaluator(self, sheerka):
|
||||
return sheerka.evaluators[RecognizeSimpleConcept.NAME]
|
||||
|
||||
def test_i_can_match(self, sheerka, context, evaluator):
|
||||
ret_val = _rv(sheerka.newn(BuiltinConcepts.PARSER_INPUT, pi=ParserInput("some text")))
|
||||
assert evaluator.matches(context, ret_val).status is True
|
||||
|
||||
ret_val = _rv(sheerka.newn(BuiltinConcepts.UNKNOWN_CONCEPT)) # it responds to USER_INPUT only
|
||||
assert evaluator.matches(context, ret_val).status is False
|
||||
|
||||
ret_val = _rvf(sheerka.newn(BuiltinConcepts.PARSER_INPUT, pi=ParserInput("some text"))) # status is false
|
||||
assert evaluator.matches(context, ret_val).status is False
|
||||
|
||||
def test_i_can_recognize_a_concept(self, context, evaluator):
|
||||
with NewOntology(context, "test_i_can_recognize_a_def_concept"):
|
||||
concept, = get_concepts(context, "I am a new concept", use_sheerka=True)
|
||||
|
||||
ret_val_input = self.get_parser_input(context, "I am a new concept")
|
||||
res = evaluator.eval(context, None, ret_val_input)
|
||||
|
||||
assert len(res.new) == 1
|
||||
assert res.new[0].status
|
||||
assert context.sheerka.isinstance(res.new[0].value, concept)
|
||||
|
||||
assert res.eaten == [ret_val_input]
|
||||
|
||||
def test_i_do_not_eat_when_not_for_me(self, context, evaluator):
|
||||
with NewOntology(context, "test_i_can_recognize_a_def_concept"):
|
||||
ret_val_input = self.get_parser_input(context, "unknown concept")
|
||||
res = evaluator.eval(context, None, ret_val_input)
|
||||
|
||||
assert len(res.new) == 1
|
||||
assert not res.new[0].status
|
||||
assert isinstance(res.new[0].value, NotForMe)
|
||||
assert len(res.eaten) == 0
|
||||
@@ -0,0 +1,57 @@
|
||||
import pytest
|
||||
|
||||
from base import BaseTest
|
||||
from evaluators.PythonParser import PythonParser
|
||||
from evaluators.RecognizeDefConcept import RecognizeDefConcept
|
||||
from evaluators.RecognizeSimpleConcept import RecognizeSimpleConcept
|
||||
from evaluators.ResolvePythonVsSimpleConcept import ResolvePythonVsSimpleConcept
|
||||
from helpers import _rv, _rvf
|
||||
|
||||
|
||||
class TestResolvePythonVsSimpleConcept(BaseTest):
|
||||
@pytest.fixture()
|
||||
def evaluator(self, sheerka):
|
||||
return sheerka.evaluators[ResolvePythonVsSimpleConcept.NAME]
|
||||
|
||||
def test_i_can_match_and_eval(self, context, evaluator):
|
||||
python = _rv("some_value", who=PythonParser.NAME)
|
||||
concept = _rv("some_value", who=RecognizeSimpleConcept.NAME)
|
||||
other = _rv("some_value", who=RecognizeDefConcept.NAME)
|
||||
python_nok = _rvf("some_value", who=PythonParser.NAME)
|
||||
concept_nok = _rvf("some_value", who=RecognizeSimpleConcept.NAME)
|
||||
other_nok = _rvf("some_value", who=RecognizeDefConcept.NAME)
|
||||
|
||||
# at least the two
|
||||
return_values = [python, concept]
|
||||
m = evaluator.matches(context, return_values)
|
||||
assert m.status is True
|
||||
assert m.obj == {'to_keep': concept, 'to_drop': python, 'others': []}
|
||||
|
||||
r = evaluator.eval(context, m.obj, return_values)
|
||||
assert r.new == [concept]
|
||||
assert r.eaten == [python]
|
||||
|
||||
# the two and other successful
|
||||
return_values = [python, concept, other, other_nok]
|
||||
m = evaluator.matches(context, return_values)
|
||||
assert m.status is True
|
||||
assert m.obj == {'to_keep': concept, 'to_drop': python, 'others': [other, other_nok]}
|
||||
|
||||
r = evaluator.eval(context, m.obj, return_values)
|
||||
assert r.new == [concept, other, other_nok]
|
||||
assert r.eaten == [python]
|
||||
|
||||
# python is not ok
|
||||
return_values = [python_nok, concept]
|
||||
m = evaluator.matches(context, return_values)
|
||||
assert m.status is False
|
||||
|
||||
# concept is not ok
|
||||
return_values = [python, concept_nok]
|
||||
m = evaluator.matches(context, return_values)
|
||||
assert m.status is False
|
||||
|
||||
# neither is not
|
||||
return_values = [python_nok, concept_nok]
|
||||
m = evaluator.matches(context, return_values)
|
||||
assert m.status is False
|
||||
Reference in New Issue
Block a user