Fixed BnfNodeParser to allow expressions like 'number hundred' when number is a group
This commit is contained in:
@@ -494,3 +494,32 @@ class TestSheerkaEvaluateConcept(TestUsingMemoryBasedSheerka):
|
||||
evaluated = sheerka.evaluate_concept(self.get_context(sheerka, True), one)
|
||||
assert evaluated.key == one.key
|
||||
assert evaluated.body == 1
|
||||
|
||||
def test_i_can_evaluate_thousand_concept(self):
|
||||
sheerka, context, thousand, number, forties, forty, one = self.init_concepts(
|
||||
Concept("thousand", body="number * 1000").def_var("number"),
|
||||
Concept("number"),
|
||||
Concept("forties", body="forty + number").def_var("forty").def_var("number"),
|
||||
Concept("forty", body="40"),
|
||||
Concept("one", body="1"),
|
||||
eval_body=True
|
||||
)
|
||||
|
||||
one = sheerka.new("one")
|
||||
number2 = sheerka.new("number")
|
||||
number2.compiled["one"] = one
|
||||
number2.compiled[ConceptParts.BODY] = one
|
||||
forties = sheerka.new("forties")
|
||||
forties.compiled["forty"] = sheerka.new("forty")
|
||||
forties.compiled["number"] = number2
|
||||
|
||||
number1 = sheerka.new("number")
|
||||
number1.compiled["forties"] = forties
|
||||
number1.compiled[ConceptParts.BODY] = forties
|
||||
|
||||
forty_one_thousand = sheerka.new("thousand")
|
||||
forty_one_thousand.compiled["number"] = number1
|
||||
|
||||
evaluated = sheerka.evaluate_concept(context, forty_one_thousand)
|
||||
|
||||
assert evaluated.body == 41000
|
||||
|
||||
@@ -1,9 +1,20 @@
|
||||
from dataclasses import dataclass
|
||||
|
||||
import core.utils
|
||||
import pytest
|
||||
from core.concept import ConceptParts, Concept
|
||||
from core.tokenizer import Token, TokenKind
|
||||
|
||||
|
||||
@dataclass
|
||||
class Obj:
|
||||
prop1: str
|
||||
prop2: str
|
||||
|
||||
def __hash__(self):
|
||||
return hash((self.prop1, self.prop1))
|
||||
|
||||
|
||||
def get_tokens(lst):
|
||||
res = []
|
||||
for e in lst:
|
||||
@@ -229,3 +240,9 @@ def test_decode_concept_key_id():
|
||||
])
|
||||
def test_dict_product(a, b, expected):
|
||||
assert core.utils.dict_product(a, b) == expected
|
||||
|
||||
|
||||
def test_i_can_make_unique():
|
||||
assert core.utils.make_unique(["a", "a", "b", "c", "c"]) == ["a", "b", "c"]
|
||||
assert core.utils.make_unique([Obj("a", "b"), Obj("a", "c"), Obj("a", "b")]) == [Obj("a", "b"), Obj("a", "c")]
|
||||
assert core.utils.make_unique([Obj("a", "b"), Obj("a", "c")], lambda o: o.prop1) == [Obj("a", "b")]
|
||||
|
||||
Reference in New Issue
Block a user