Esempio n. 1
0
    def test_udiv(self):
        x = BitVec(32, "x")
        y = BitVec(32, "y")
        z = x.udiv(y)
        v = x.udiv(1)

        self.assertEqual(z.value, "(bvudiv x y)")
        self.assertEqual(v.value, "(bvudiv x #x00000001)")
Esempio n. 2
0
    def test_umod(self):
        x = BitVec(32, "x")
        y = BitVec(32, "y")
        z = x.umod(y)
        v = x.umod(1)

        self.assertEqual(z.value, "(bvurem x y)")
        self.assertEqual(v.value, "(bvurem x #x00000001)")
    def test_umod(self):
        x = BitVec(32, "x")
        y = BitVec(32, "y")
        z = x.umod(y)
        v = x.umod(1)

        self.assertEqual(z.value, "(bvurem x y)")
        self.assertEqual(v.value, "(bvurem x #x00000001)")
    def test_udiv(self):
        x = BitVec(32, "x")
        y = BitVec(32, "y")
        z = x.udiv(y)
        v = x.udiv(1)

        self.assertEqual(z.value, "(bvudiv x y)")
        self.assertEqual(v.value, "(bvudiv x #x00000001)")
Esempio n. 5
0
    def test_greater_than_equal_unsigned(self):
        x = BitVec(32, "x")
        y = BitVec(32, "y")
        z = x.uge(y)
        v = x.uge(1)

        self.assertEqual(z.value, "(bvuge x y)")
        self.assertEqual(v.value, "(bvuge x #x00000001)")
Esempio n. 6
0
    def test_concat(self):
        x = BitVec(32, "x")
        y = BitVec(32, "y")
        z = concat(32, x, y)
        v = concat(32, x)

        self.assertEqual(z.value, "(concat x y)")
        self.assertEqual(v.value, "x")
    def test_less_than_unsigned(self):
        x = BitVec(32, "x")
        y = BitVec(32, "y")
        z = x.ult(y)
        v = x.ult(1)

        self.assertEqual(z.value, "(bvult x y)")
        self.assertEqual(v.value, "(bvult x #x00000001)")
Esempio n. 8
0
    def test_less_than_unsigned(self):
        x = BitVec(32, "x")
        y = BitVec(32, "y")
        z = x.ult(y)
        v = x.ult(1)

        self.assertEqual(z.value, "(bvult x y)")
        self.assertEqual(v.value, "(bvult x #x00000001)")
    def test_greater_than_equal_unsigned(self):
        x = BitVec(32, "x")
        y = BitVec(32, "y")
        z = x.uge(y)
        v = x.uge(1)

        self.assertEqual(z.value, "(bvuge x y)")
        self.assertEqual(v.value, "(bvuge x #x00000001)")
Esempio n. 10
0
    def test_or(self):
        x = BitVec(32, "x")
        y = BitVec(32, "y")
        z = x | y
        v = x | 1
        w = 1 | x

        self.assertEqual(z.value, "(bvor x y)")
        self.assertEqual(v.value, "(bvor x #x00000001)")
        self.assertEqual(w.value, "(bvor #x00000001 x)")
Esempio n. 11
0
    def test_xor(self):
        x = BitVec(32, "x")
        y = BitVec(32, "y")
        z = x ^ y
        v = x ^ 1
        w = 1 ^ x

        self.assertEqual(z.value, "(bvxor x y)")
        self.assertEqual(v.value, "(bvxor x #x00000001)")
        self.assertEqual(w.value, "(bvxor #x00000001 x)")
Esempio n. 12
0
    def test_and(self):
        x = BitVec(32, "x")
        y = BitVec(32, "y")
        z = x & y
        v = x & 1
        w = 1 & x

        self.assertEqual(z.value, "(bvand x y)")
        self.assertEqual(v.value, "(bvand x #x00000001)")
        self.assertEqual(w.value, "(bvand #x00000001 x)")
Esempio n. 13
0
    def test_mod(self):
        x = BitVec(32, "x")
        y = BitVec(32, "y")
        z = x % y
        v = x % 1
        w = 1 % x

        self.assertEqual(z.value, "(bvsmod x y)")
        self.assertEqual(v.value, "(bvsmod x #x00000001)")
        self.assertEqual(w.value, "(bvsmod #x00000001 x)")
Esempio n. 14
0
    def test_greater_than(self):
        x = BitVec(32, "x")
        y = BitVec(32, "y")
        z = x > y
        v = x > 1
        w = 1 > x

        self.assertEqual(z.value, "(bvsgt x y)")
        self.assertEqual(v.value, "(bvsgt x #x00000001)")
        self.assertEqual(w.value, "(bvslt x #x00000001)")
Esempio n. 15
0
    def test_equal(self):
        x = BitVec(32, "x")
        y = BitVec(32, "y")
        z = x == y
        v = x == 1
        w = 1 == x

        self.assertEqual(z.value, "(= x y)")
        self.assertEqual(v.value, "(= x #x00000001)")
        self.assertEqual(w.value, "(= x #x00000001)")
Esempio n. 16
0
    def test_less_than(self):
        x = BitVec(32, "x")
        y = BitVec(32, "y")
        z = x < y
        v = x < 1
        w = 1 < x

        self.assertEqual(z.value, "(bvslt x y)")
        self.assertEqual(v.value, "(bvslt x #x00000001)")
        self.assertEqual(w.value, "(bvsgt x #x00000001)")
Esempio n. 17
0
    def test_ite(self):
        b = Bool("b")
        x = BitVec(32, "x")
        y = BitVec(32, "y")
        z = BitVec(32, "z")
        v = ite(32, x == 0, y, z)
        w = ite(32, b, y, z)

        self.assertEqual(v.value, "(ite (= x #x00000000) y z)")
        self.assertEqual(w.value, "(ite b y z)")
Esempio n. 18
0
    def test_rshift(self):
        x = BitVec(32, "x")
        y = BitVec(32, "y")
        z = x >> y
        v = x >> 1
        w = 1 >> x

        self.assertEqual(z.value, "(bvlshr x y)")
        self.assertEqual(v.value, "(bvlshr x #x00000001)")
        self.assertEqual(w.value, "(bvlshr #x00000001 x)")
Esempio n. 19
0
    def test_add(self):
        x = BitVec(32, "x")
        y = BitVec(32, "y")
        z = x + y
        v = x + 1
        w = 1 + x

        self.assertEqual(z.value, "(bvadd x y)")
        self.assertEqual(v.value, "(bvadd x #x00000001)")
        self.assertEqual(w.value, "(bvadd #x00000001 x)")
Esempio n. 20
0
    def test_less_than_equal(self):
        x = BitVec(32, "x")
        y = BitVec(32, "y")
        z = x <= y
        v = x <= 1
        w = 1 <= x

        self.assertEqual(z.value, "(bvsle x y)")
        self.assertEqual(v.value, "(bvsle x #x00000001)")
        self.assertEqual(w.value, "(bvsge x #x00000001)")
Esempio n. 21
0
    def test_sub(self):
        x = BitVec(32, "x")
        y = BitVec(32, "y")
        z = x - y
        v = x - 1
        w = 1 - x

        self.assertEqual(z.value, "(bvsub x y)")
        self.assertEqual(v.value, "(bvsub x #x00000001)")
        self.assertEqual(w.value, "(bvsub #x00000001 x)")
Esempio n. 22
0
    def test_not_equal(self):
        x = BitVec(32, "x")
        y = BitVec(32, "y")
        z = x != y
        v = x != 1
        w = 1 != x

        self.assertEqual(z.value, "(not (= x y))")
        self.assertEqual(v.value, "(not (= x #x00000001))")
        self.assertEqual(w.value, "(not (= x #x00000001))")
Esempio n. 23
0
    def test_mul(self):
        x = BitVec(32, "x")
        y = BitVec(32, "y")
        z = x * y
        v = x * 1
        w = 1 * x

        self.assertEqual(z.value, "(bvmul x y)")
        self.assertEqual(v.value, "(bvmul x #x00000001)")
        self.assertEqual(w.value, "(bvmul #x00000001 x)")
Esempio n. 24
0
    def test_greater_than_equal(self):
        x = BitVec(32, "x")
        y = BitVec(32, "y")
        z = x >= y
        v = x >= 1
        w = 1 >= x

        self.assertEqual(z.value, "(bvsge x y)")
        self.assertEqual(v.value, "(bvsge x #x00000001)")
        self.assertEqual(w.value, "(bvsle x #x00000001)")
Esempio n. 25
0
    def test_div(self):
        x = BitVec(32, "x")
        y = BitVec(32, "y")
        z = x / y
        v = x / 1
        w = 1 / x

        self.assertEqual(z.value, "(bvsdiv x y)")
        self.assertEqual(v.value, "(bvsdiv x #x00000001)")
        self.assertEqual(w.value, "(bvsdiv #x00000001 x)")
Esempio n. 26
0
    def test_lshift(self):
        x = BitVec(32, "x")
        y = BitVec(32, "y")
        z = x << y
        v = x << 1
        w = 1 << x

        self.assertEqual(z.value, "(bvshl x y)")
        self.assertEqual(v.value, "(bvshl x #x00000001)")
        self.assertEqual(w.value, "(bvshl #x00000001 x)")
Esempio n. 27
0
    def test_store(self):
        a = BitVecArray(32, 8, "a")
        k = BitVec(32, "k")
        v = BitVec(8, "v")
        b = a.store(k, v)
        c = a.store(k, 1)
        d = a.store(1, v)
        e = a.store(1, 1)

        self.assertEqual(b.value, "(store a k v)")
        self.assertEqual(c.value, "(store a k #x01)")
        self.assertEqual(d.value, "(store a #x00000001 v)")
        self.assertEqual(e.value, "(store a #x00000001 #x01)")
Esempio n. 28
0
def sign_extend(s, size):
    assert type(s) in (Constant, BitVec) and size - s.size >= 0

    if size == s.size:
        return s

    return BitVec(size, "(_ sign_extend {})".format(size - s.size), s)
Esempio n. 29
0
    def test_select(self):
        a = BitVecArray(32, 8, "a")
        k = BitVec(32, "k")
        b = a.select(k)
        c = a.select(1)

        self.assertEqual(b.value, "(select a k)")
        self.assertEqual(c.value, "(select a #x00000001)")
Esempio n. 30
0
def extract(s, offset, size):
    assert type(s) in (Constant, BitVec)

    if offset == 0 and size == s.size:
        return s

    return BitVec(size, "(_ extract {} {})".format(offset + size - 1, offset),
                  s)
Esempio n. 31
0
    def test_neg(self):
        x = BitVec(32, "x")
        z = BitVec(32, "z")

        self._solver.declare_fun("x", x)
        self._solver.declare_fun("z", z)

        self._solver.add(-x == z)

        # Add constraints to avoid trivial solutions.
        self._solver.add(x > 1)

        self.assertEqual(self._solver.check(), "sat")

        x_val = self._solver.get_value(x)
        z_val = self._solver.get_value(z)

        self.assertTrue(-x_val & 0xffffffff == z_val)
Esempio n. 32
0
    def test_ge(self):
        x = BitVec(32, "x")
        y = BitVec(32, "y")

        self._solver.declare_fun("x", x)
        self._solver.declare_fun("y", y)

        self._solver.add(x >= y)

        # Add constraints to avoid trivial solutions.
        self._solver.add(x > 1)
        self._solver.add(y > 1)

        self.assertEqual(self._solver.check(), "sat")

        x_val = self._solver.get_value(x)
        y_val = self._solver.get_value(y)

        self.assertTrue(x_val >= y_val)
Esempio n. 33
0
    def test_extract(self):
        x = BitVec(32, "x")
        x0 = extract(x, 0, 8)
        x1 = extract(x, 8, 8)
        x2 = extract(x, 16, 8)
        x3 = extract(x, 24, 8)

        self.assertEqual(x0.value, "((_ extract 7 0) x)")
        self.assertEqual(x1.value, "((_ extract 15 8) x)")
        self.assertEqual(x2.value, "((_ extract 23 16) x)")
        self.assertEqual(x3.value, "((_ extract 31 24) x)")
Esempio n. 34
0
    def test_mul(self):
        x = BitVec(32, "x")
        y = BitVec(32, "y")
        z = BitVec(32, "z")

        self._solver.declare_fun("x", x)
        self._solver.declare_fun("y", y)
        self._solver.declare_fun("z", z)

        self._solver.add(x * y == z)

        # Add constraints to avoid trivial solutions.
        self._solver.add(x > 1)
        self._solver.add(y > 1)
        self._solver.add(x != y)

        self.assertEqual(self._solver.check(), "sat")

        x_val = self._solver.get_value(x)
        y_val = self._solver.get_value(y)
        z_val = self._solver.get_value(z)

        self.assertTrue(x_val * y_val == z_val)