Exemplo n.º 1
0
    def _signed_add(self, a, b, c=0) -> int:
        self._reset()

        value = a + b + c
        # self.carry = (value + 2 ** 31) > max_32_bits
        self.overflow = BinaryUtils.overflow(value)

        self.carry, value = BinaryUtils.add_2cb(a, b, c)
        self.overflow = BinaryUtils.overflow_msb(a, b, value)

        result = self._value_common(value)
        return result
Exemplo n.º 2
0
def test_add_2cb():
    assert BinaryUtils.add_2cb(0, 0) == (False, 0)
    assert BinaryUtils.add_2cb(0, -1) == (False, -1)
    assert BinaryUtils.add_2cb(0, min_32_bits_signed) == (False, min_32_bits_signed)
    assert BinaryUtils.add_2cb(0, max_32_bits_signed) == (False, max_32_bits_signed)
    assert BinaryUtils.add_2cb(min_32_bits_signed, min_32_bits_signed) == (True, 0)
    assert BinaryUtils.add_2cb(-1, -1) == (True, -1 -1)