Пример #1
0
    def test_pysmt_integer_from_integer(self):
        from fractions import Fraction as pyFraction

        self.assertEqual(Integer(4), pysmt_integer_from_integer(4))
        self.assertEqual(Integer(4), pysmt_integer_from_integer(Integer(4)))
        self.assertEqual(Integer(4), pysmt_integer_from_integer(Fraction(4)))
        self.assertEqual(Integer(4), pysmt_integer_from_integer(pyFraction(4)))
Пример #2
0
    def test_pysmt_integer_from_integer(self):
        from fractions import Fraction as pyFraction

        self.assertEqual(Integer(4), pysmt_integer_from_integer(4))
        self.assertEqual(Integer(4), pysmt_integer_from_integer(Integer(4)))
        self.assertEqual(Integer(4), pysmt_integer_from_integer(Fraction(4)))
        self.assertEqual(Integer(4), pysmt_integer_from_integer(pyFraction(4)))
Пример #3
0
    def test_to_python_integer(self):
        from fractions import Fraction as pyFraction

        res = long(4) if PY2 else int(4)
        self.assertEqual(res, to_python_integer(pysmt_integer_from_integer(4)))
        self.assertEqual(res, to_python_integer(pysmt_integer_from_integer(Integer(4))))
        self.assertEqual(res, to_python_integer(pysmt_integer_from_integer(Fraction(4))))
        self.assertEqual(res, to_python_integer(pysmt_integer_from_integer(pyFraction(4))))
Пример #4
0
 def test_to_python_integer(self):
     res = long(4) if PY2 else int(4)
     self.assertEqual(res, to_python_integer(pysmt_integer_from_integer(4)))
     self.assertEqual(
         res, to_python_integer(pysmt_integer_from_integer(Integer(4))))
     self.assertEqual(
         res, to_python_integer(pysmt_integer_from_integer(Fraction(4))))
     self.assertEqual(
         res, to_python_integer(pysmt_integer_from_integer(pyFraction(4))))
Пример #5
0
    def BV(self, value, width=None):
        """Return a constant of type BitVector.

        value can be either:
        - a string of 0s and 1s
        - a string starting with "#b" followed by a sequence of 0s and 1s
        - an integer number s.t. 0 <= value < 2**width

        In order to create the BV representation of a signed integer,
        the SBV() method shall be used.
        """

        if type(value) is str:
            if value.startswith("#b"):
                str_width = len(value)-2
                value = int(value[2:],2)
            elif all(v in ["0", "1"] for v in value):
                str_width = len(value)
                value = int(value, 2)
            else:
                raise PysmtValueError("Expecting binary value as string, got " \
                                      "%s instead." % value)

            if width is not None and width != str_width:
                raise PysmtValueError("Specified width does not match string " \
                                      "width (%d != %d)" % (width, str_width))
            width = str_width

        if width is None:
            raise PysmtValueError("Need to specify a width for the constant")

        if is_pysmt_integer(value):
            _value = value
        elif is_python_integer(value):
            _value = pysmt_integer_from_integer(value)
        else:
            raise PysmtTypeError("Invalid type in constant. The type was: %s" \
                                 % str(type(value)))
        if _value < 0:
            raise PysmtValueError("Cannot specify a negative value: %d" \
                                  % _value)
        if _value >= 2**width:
            raise PysmtValueError("Cannot express %d in %d bits" \
                                  % (_value, width))

        return self.create_node(node_type=op.BV_CONSTANT,
                                args=tuple(),
                                payload=(_value, width))
Пример #6
0
    def BV(self, value, width=None):
        """Return a constant of type BitVector.

        value can be either:
        - a string of 0s and 1s
        - a string starting with "#b" followed by a sequence of 0s and 1s
        - an integer number s.t. 0 <= value < 2**width

        In order to create the BV representation of a signed integer,
        the SBV() method shall be used.
        """

        if type(value) is str:
            if value.startswith("#b"):
                str_width = len(value)-2
                value = int(value[2:],2)
            elif all(v in ["0", "1"] for v in value):
                str_width = len(value)
                value = int(value, 2)
            else:
                raise PysmtValueError("Expecting binary value as string, got " \
                                      "%s instead." % value)

            if width is not None and width != str_width:
                raise PysmtValueError("Specified width does not match string " \
                                      "width (%d != %d)" % (width, str_width))
            width = str_width

        if width is None:
            raise PysmtValueError("Need to specify a width for the constant")

        if is_pysmt_integer(value):
            _value = value
        elif is_python_integer(value):
            _value = pysmt_integer_from_integer(value)
        else:
            raise PysmtTypeError("Invalid type in constant. The type was: %s" \
                                 % str(type(value)))
        if _value < 0:
            raise PysmtValueError("Cannot specify a negative value: %d" \
                                  % _value)
        if _value >= 2**width:
            raise PysmtValueError("Cannot express %d in %d bits" \
                                  % (_value, width))

        return self.create_node(node_type=op.BV_CONSTANT,
                                args=tuple(),
                                payload=(_value, width))
Пример #7
0
    def Int(self, value):
        """Return a constant of type INT."""
        if value in self.int_constants:
            return self.int_constants[value]

        if is_pysmt_integer(value):
            val = value
        elif is_python_integer(value):
            val = pysmt_integer_from_integer(value)
        else:
            raise PysmtTypeError("Invalid type in constant. The type was:" + \
                                 str(type(value)))
        n = self.create_node(node_type=op.INT_CONSTANT,
                             args=tuple(),
                             payload=val)
        self.int_constants[value] = n
        return n
Пример #8
0
    def Int(self, value):
        """Return a constant of type INT."""
        if value in self.int_constants:
            return self.int_constants[value]

        if is_pysmt_integer(value):
            val = value
        elif is_python_integer(value):
            val = pysmt_integer_from_integer(value)
        else:
            raise PysmtTypeError("Invalid type in constant. The type was:" + \
                                 str(type(value)))
        n = self.create_node(node_type=op.INT_CONSTANT,
                             args=tuple(),
                             payload=val)
        self.int_constants[value] = n
        return n
Пример #9
0
 def test_pysmt_integer_from_integer(self):
     self.assertEqual(Integer(4), pysmt_integer_from_integer(4))
     self.assertEqual(Integer(4), pysmt_integer_from_integer(Integer(4)))
     self.assertEqual(Integer(4), pysmt_integer_from_integer(Fraction(4)))
     self.assertEqual(Integer(4), pysmt_integer_from_integer(pyFraction(4)))
Пример #10
0
 def test_pysmt_integer_from_integer(self):
     self.assertEqual(Integer(4), pysmt_integer_from_integer(4))
     self.assertEqual(Integer(4), pysmt_integer_from_integer(Integer(4)))
     self.assertEqual(Integer(4), pysmt_integer_from_integer(Fraction(4)))
     self.assertEqual(Integer(4), pysmt_integer_from_integer(pyFraction(4)))