コード例 #1
0
 def test_translate(self):
     fp = z3.Fixedpoint()
     atom1 = ast.Atom('p', [
         ast.NumConstant(2, 'int4'),
         ast.NumConstant(3, 'int4'),
         ast.Variable('X', 'int4')
     ])
     atom2 = ast.Atom('p', [
         ast.NumConstant(2, 'int4'),
         ast.NumConstant(3, 'int4'),
         ast.Variable('Y', 'int4')
     ])
     int4 = z3.BitVecSort(4)
     p = z3.Function('p', int4, int4, int4, z3.BoolSort())
     a0 = z3.BitVecVal(2, int4)
     a1 = z3.BitVecVal(3, int4)
     a2 = z3.Const('X', int4)
     a3 = z3.Const('Y', int4)
     args1 = [a0, a1, a2]
     args2 = [a0, a1, a3]
     project = projection.Projection([], None)
     project.grounded = {'p': (0, 1)}
     project.items = {'p': {}}
     project.relations = {'p': p}
     result = project.translate(fp, atom1, args1)
     self.assertIn((0, 1), project.items['p'])
     self.assertIn((a0, a1), project.items['p'][(0, 1)])
     p0 = project.items['p'][(0, 1)][(a0, a1)]
     self.assertIs(True, z3.is_true(z3.simplify(p0(a2) == result)))
     result2 = project.translate(fp, atom2, args2)
     self.assertIs(True, z3.is_true(z3.simplify(p0(a3) == result2)))
コード例 #2
0
 def test_constants_unknown(self):
     rules = pp(PROG1.format('a', 'b', 'd'))
     constants = {
         'a': ast.StringConstant('n'),
         'b': ast.NumConstant(2),
         'c': ast.NumConstant(0)}
     comp = compiler.Z3Compiler(rules, constants, None)
     self.assertRaises(obase.Z3NotWellFormed, comp.substitute_constants)
コード例 #3
0
 def test_num(self):
     c = ast.NumConstant(5)
     self.assertEqual(5, c.val)
     self.assertEqual('int', c.type)
     self.assertEqual(0, len(c.variables()))
     c = ast.NumConstant(3, dtype='int4')
     self.assertEqual(3, c.val)
     self.assertEqual('int4', c.type)
コード例 #4
0
 def test_constants(self):
     ast.Rule.rule_counter = 0
     rules = pp(PROG1.format('a', 'b', 'c'))
     constants = {
         'a': ast.StringConstant('n'),
         'b': ast.NumConstant(2),
         'c': ast.NumConstant(0)}
     comp = compiler.Z3Compiler(rules, constants, None)
     comp.substitute_constants()
     ast.Rule.rule_counter = 0
     expected = pp(PROG1.format('"n"', '2', '0'))
     self.assertEqual(expected, rules)
コード例 #5
0
 def test_eq(self):
     v = ast.Variable('V')
     n = ast.NumConstant(3)
     self.assertIs(
         True, ast.Operation('+', [v, n]) == ast.Operation('+', [v, n]))
     self.assertIs(
         False, ast.Operation('+', [v, n]) == ast.Operation('+', [n, n]))
コード例 #6
0
 def test_string(self):
     c = ast.StringConstant('foo')
     self.assertEqual('foo', c.val)
     self.assertEqual('string', c.type)
     self.assertEqual(0, len(c.variables()))
     c = ast.NumConstant('aaa-bbb', dtype='id')
     self.assertEqual('aaa-bbb', c.val)
     self.assertEqual('id', c.type)
コード例 #7
0
 def test_eq(self):
     v = ast.Variable('V')
     n = ast.NumConstant(3)
     self.assertIs(True, ast.Atom('p', [v]) == ast.Atom('p', [v]))
     self.assertIs(
         False, ast.Atom('p', [v], negated=True) == ast.Atom('p', [v]))
     self.assertIs(
         False, ast.Atom('p', [v]) == ast.Atom('p', [n]))
コード例 #8
0
def mk_o():
    v1 = ast.Variable('V1')
    v2 = ast.Variable('V2')
    v3 = ast.Variable('V3')
    n = ast.NumConstant(1)
    o1 = ast.Operation('+', [v1, n])
    o2 = ast.Operation('+', [v1, v2])
    o = ast.Operation('+', [o1, o2, v3])
    return o, v1, v2, v3
コード例 #9
0
 def test_atom(self):
     v = ast.Variable('V')
     n = ast.NumConstant(3)
     a = ast.Atom('p', [v, n])
     self.assertEqual('p', a.table)
     self.assertEqual([v, n], a.args)
     self.assertIs(False, a.negated)
     self.assertEqual('p', str(a)[0])
     a = ast.Atom('p', [v, n], negated=True)
     self.assertEqual('p', a.table)
     self.assertIs(True, a.negated)
     self.assertEqual('~p', str(a)[0:2])
コード例 #10
0
def p_sexpr_number(t):
    'sexpr : NUMBER'
    t[0] = ast.NumConstant(t[1])
コード例 #11
0
 def test_num_eq(self):
     self.assertIs(True, ast.NumConstant(2) == ast.NumConstant(2))
     self.assertIs(False, ast.NumConstant(3) == ast.NumConstant(2))
     self.assertIs(False,
                   ast.NumConstant(2) == ast.NumConstant(2, dtype='int4'))
コード例 #12
0
 def test_operation(self):
     v = ast.Variable('V')
     n = ast.NumConstant(3)
     o = ast.Operation('+', [v, n])
     self.assertEqual('+', o.operation)
     self.assertEqual([v, n], o.args)