def test_macher_ltgt_multiply(): m1 = Rule('A', 'a', lambda f: True, multiply=Decimal('1')) m2 = Rule('A', 'a', lambda f: True, multiply=Decimal('2')) assert m1 < m2 assert not (m2 < m1) assert m2 > m1 assert not (m1 > m2)
def test_macher_ltgt_incompatible(): m1 = Rule('A', 'a', lambda f: True, add=Decimal('1')) m2 = Rule('A', 'a', lambda f: True, multiply=Decimal('2')) with pytest.raises(Exception): m1 < m2 with pytest.raises(Exception): m1 > m2
def test_rule_call_passing_1(): args = None def impl(a): nonlocal args args = [a] return True m = Rule('A', 'a', impl, add=Decimal('1')) m.match(0, 1, 2) assert args == [0]
def test_rule_init_add_and_multiply(): with pytest.raises(AssertionError): Rule('A', 'a', lambda x: False, add=Decimal('1'), multiply=Decimal('2'))
def make_rule(slug, **kwargs): return Rule( 'R_' + slug, 'Rule', lambda m: True, **kwargs, )
def test_estg3bbase_add_rules_extend(): e = EStG3b('DE')(add_rules=[ RuleGroup('GRP_DE_NIGHT', '', rules=[ Rule('SPECIAL', 'Special', lambda m: True, multiply=Decimal("1")), ]), ]) group = dict((g._slug, g) for g in e._groups)['GRP_DE_NIGHT'] assert 'SPECIAL' in group
def test_macher_str(): m = Rule('SLUG', 'description', lambda f: True, add=Decimal('1')) assert 'SLUG' in str(m) assert 'description' in str(m)
def test_rule_init__no_add_or_multiply(): with pytest.raises(AssertionError): Rule('A', 'a', lambda x: False)
def test_rule_call_rtn_type(impl): m = Rule('A', 'a', impl, add=Decimal('1')) m.match(None, None, None)
def test_rule_call_rtn_type_crash(): m = Rule('A', 'a', lambda x: None, add=Decimal('1')) with pytest.raises(AssertionError): m.match(None, None, None)
def test_rule_init_no_description(): with pytest.raises(AssertionError): Rule('X', '', lambda x: False)
def test_rule_init_impl_nargs_crash(impl): with pytest.raises(AssertionError): Rule('A', 'a', impl)
def test_rule_init_no_slug(): with pytest.raises(AssertionError): Rule('', 'xx', lambda x: False)
def test_rule_init(): m = Rule('A', 'a', lambda x: False, add=Decimal('1')) m.match(None, None, None)
def test_macher_eq(): m1 = Rule('A', 'a', lambda f: True, add=Decimal('1')) m2 = Rule('A', 'a', lambda f: True, add=Decimal('2')) assert m1 == m2
def test_rule_init_decimal_add(): with pytest.raises(AssertionError): Rule('A', 'a', lambda x: False, add=0.1)
def test_rule_init_decimal_multiply(): with pytest.raises(AssertionError): Rule('A', 'a', lambda x: False, multiply=0.1)