122 lines
4.4 KiB
Python
122 lines
4.4 KiB
Python
import pytest
|
|
from core.builtin_concepts import ReturnValueConcept, BuiltinConcepts
|
|
from core.concept import Concept
|
|
from evaluators.TooManySuccessEvaluator import TooManySuccessEvaluator
|
|
|
|
from tests.TestUsingMemoryBasedSheerka import TestUsingMemoryBasedSheerka
|
|
|
|
|
|
def r(name, status=True, value=None):
|
|
value = value or name
|
|
return ReturnValueConcept(name, status, value)
|
|
|
|
|
|
reduce_requested = ReturnValueConcept("some_name", True, Concept(key=BuiltinConcepts.REDUCE_REQUESTED))
|
|
|
|
|
|
class TestTooManySuccessEvaluator(TestUsingMemoryBasedSheerka):
|
|
|
|
@pytest.mark.parametrize("return_values, expected", [
|
|
([r("evaluators.success1"), r("evaluators.success2"), reduce_requested], True),
|
|
([r("evaluators.success1"), r("evaluators.success2"), r("other"), reduce_requested], True),
|
|
([r("evaluators.success1"), r("evaluators.success2"), r("other", False), reduce_requested], True),
|
|
([r("evaluators.a", value=Concept("c1", body="1")),
|
|
r("evaluators.a", value=Concept("c2", body="1")),
|
|
r("other"),
|
|
reduce_requested], True),
|
|
([r("evaluators.a", value=Concept("c1", body="1")),
|
|
r("evaluators.a", value=Concept("c2", body="1")),
|
|
r("parsers.other", False),
|
|
reduce_requested], True),
|
|
([r("evaluators.a", value=Concept("c1", body="1")),
|
|
r("evaluators.a", value=Concept("c2", body="1")),
|
|
r("parsers.other"),
|
|
reduce_requested], False),
|
|
([r("evaluators.success1"), reduce_requested], False),
|
|
([reduce_requested], False),
|
|
([r("evaluators.success1"), r("evaluators.success2")], False),
|
|
])
|
|
def test_i_can_match(self, return_values, expected):
|
|
context = self.get_context()
|
|
assert TooManySuccessEvaluator().matches(context, return_values) == expected
|
|
|
|
def test_i_can_eval(self):
|
|
context = self.get_context()
|
|
|
|
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,
|
|
r("other", False),
|
|
reduce_requested
|
|
]
|
|
|
|
evaluator = TooManySuccessEvaluator()
|
|
matches = evaluator.matches(context, return_values)
|
|
res = evaluator.eval(context, return_values)
|
|
|
|
assert matches
|
|
assert not res.status
|
|
assert context.sheerka.isinstance(res.body, BuiltinConcepts.TOO_MANY_SUCCESS)
|
|
assert res.body.body == [value1, value2]
|
|
assert len(res.parents) == 4
|
|
|
|
def test_i_can_eval_when_same_success(self):
|
|
context = self.get_context()
|
|
|
|
return_values = [
|
|
r("evaluators.a", value=Concept("c1", body="1").auto_init()),
|
|
r("evaluators.a", value=Concept("c2", body="1").auto_init()),
|
|
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_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()
|
|
|
|
value1 = r("evaluators.a", value=Concept("c1", body="1").auto_init())
|
|
value2 = r("evaluators.a", value=Concept("c2", body="2").auto_init())
|
|
other_success = r("other")
|
|
return_values = [
|
|
value1,
|
|
value2,
|
|
other_success,
|
|
reduce_requested
|
|
]
|
|
|
|
evaluator = TooManySuccessEvaluator()
|
|
matches = evaluator.matches(context, return_values)
|
|
res = evaluator.eval(context, return_values)
|
|
|
|
assert matches
|
|
assert not res.status
|
|
assert context.sheerka.isinstance(res.body, BuiltinConcepts.TOO_MANY_SUCCESS)
|
|
assert res.body.body == [value1, value2]
|
|
assert len(res.parents) == 3
|
|
assert other_success not in res.parents
|