def test_register_constants_with_decorator(): @polar_class class RegisterDecoratorTest: x = 1 p = Polar() p.load_str("foo_rule(x: RegisterDecoratorTest, y) if y = 1;") p.load_str("foo_class_attr(y) if y = RegisterDecoratorTest.x;") assert ( next(p.query_rule("foo_rule", RegisterDecoratorTest(), Variable("y")))[ "bindings" ]["y"] == 1 ) assert next(p.query_rule("foo_class_attr", Variable("y")))["bindings"]["y"] == 1 p = Polar() p.load_str("foo_rule(x: RegisterDecoratorTest, y) if y = 1;") p.load_str("foo_class_attr(y) if y = RegisterDecoratorTest.x;") assert ( next(p.query_rule("foo_rule", RegisterDecoratorTest(), Variable("y")))[ "bindings" ]["y"] == 1 ) assert next(p.query_rule("foo_class_attr", Variable("y")))["bindings"]["y"] == 1
def test_load_and_query(): p = Polar() p.load_str("f(1); f(2); ?= f(1); ?= not f(3);") with pytest.raises(exceptions.PolarException): p.load_str("g(1); ?= g(2);")