def test_combo(self): x_obj = qterm.Variable('x', pq('obj')) x_var = qterm.Variable('x', pq('?a')) phi_var = qterm.Constant('phi', pq('?b->bool')) phi_obj = qterm.Constant('phi', pq('obj->bool')) combo_var = term_builder.build_combination(phi_var, x_var) combo_obj = term_builder.build_combination(phi_obj, x_obj) combo_var2 = term_builder.build_combination(phi_var, x_obj) x, combo = unify_types([x_obj, combo_var]) assert x == x_obj assert combo == combo_obj phi_a, phi_b = unify_types([phi_var, phi_obj]) assert phi_a == phi_var assert phi_b == phi_obj combo_a, combo_b = unify_types([combo_var, combo_obj]) assert combo_a == combo_obj assert combo_b == combo_obj combo_a, combo_b = unify_types([combo_var2, combo_obj]) assert combo_a == combo_obj assert combo_b == combo_obj f = qterm.Variable('f', pq('?x->?y')) raises(UnificationError, term_builder.build_combination, f, f) raises(UnificationError, term_builder.build_combination, x_var, x_var)
def test_parse_function(self): t = qfun(qobj(), qobj()) f = qterm.Variable('f', t) g = qterm.Variable('g', t) h = qterm.Variable('h', qfun(qobj(), t)) x = qterm.Variable('x', qobj()) y = qterm.Variable('y', qobj()) assert_equal(self.parser.parse('f:obj->obj(x)'), term_builder.build_combination(f, x)) assert (self.parser.parse('f:obj->obj(g:obj->obj(x))') == term_builder.build_combination(f, term_builder.build_combination(g, x))) assert (self.parser.parse('h:obj->obj->obj(x, y)') == term_builder.build_binary_op(h, x, y))
def test_parse_operator(self): assert (self.parser.parse('not a') == term_builder.build_combination(self.not_, qterm.Variable('a', qbool()))) assert (self.parser.parse('a:obj = b:obj') == term_builder.build_binary_op(self.equals, qterm.Variable('a', qobj()), qterm.Variable('b', qobj())))