Beispiel #1
0
 def test_rfloordiv_ibm(self, a, b):
     ibm_a = IBMFloat.from_float(a)
     ibm_b = IBMFloat.from_float(b)
     assume(not ibm_b.is_zero())
     ieee_a = float(ibm_a)
     ieee_b = float(ibm_b)
     assert ieee_a // ibm_b == ieee_a // ieee_b
Beispiel #2
0
 def test_rfloordiv_ibm(self, a, b):
     ibm_a = IBMFloat.from_float(a)
     ibm_b = IBMFloat.from_float(b)
     assume(not ibm_b.is_zero())
     ieee_a = float(ibm_a)
     ieee_b = float(ibm_b)
     assert ieee_a // ibm_b == ieee_a // ieee_b
Beispiel #3
0
 def test_rfloordiv_ibm_division_by_zero_raises_zero_division_error(
         self, a, b):
     ibm_a = IBMFloat.from_float(a)
     ibm_b = IBMFloat.from_float(0.0)
     ieee_a = float(ibm_a)
     with raises(ZeroDivisionError):
         _ = ieee_a // ibm_b
Beispiel #4
0
    def test_sub(self, a, b):
        ibm_a = IBMFloat.from_float(a)
        ibm_b = IBMFloat.from_float(b)
        ibm_c = ibm_a - ibm_b

        ieee_a = float(ibm_a)
        ieee_b = float(ibm_b)
        ieee_c = ieee_a - ieee_b

        self.assertTrue(almost_equal(ieee_c, ibm_c, epsilon=EPSILON_IBM_FLOAT))
Beispiel #5
0
    def test_sub(self, a, b):
        ibm_a = IBMFloat.from_float(a)
        ibm_b = IBMFloat.from_float(b)
        ibm_c = ibm_a - ibm_b

        ieee_a = float(ibm_a)
        ieee_b = float(ibm_b)
        ieee_c = ieee_a - ieee_b

        self.assertTrue(almost_equal(ieee_c, ibm_c, epsilon=EPSILON_IBM_FLOAT))
Beispiel #6
0
 def test_mul_ibm(self, a, b):
     ibm_a = IBMFloat.from_float(a)
     ibm_b = IBMFloat.from_float(b)
     ieee_a = float(ibm_a)
     ieee_b = float(ibm_b)
     try:
         ibm_c = ibm_a * ibm_b
     except OverflowError:
         raise UnsatisfiedAssumption
     ieee_c = ieee_a * ieee_b
     assert almost_equal(ibm_c, ieee_c, epsilon=EPSILON_IBM_FLOAT)
Beispiel #7
0
 def test_mul_ibm(self, a, b):
     ibm_a = IBMFloat.from_float(a)
     ibm_b = IBMFloat.from_float(b)
     ieee_a = float(ibm_a)
     ieee_b = float(ibm_b)
     try:
         ibm_c = ibm_a * ibm_b
     except OverflowError:
         raise UnsatisfiedAssumption
     ieee_c = ieee_a * ieee_b
     assert almost_equal(ibm_c, ieee_c, epsilon=EPSILON_IBM_FLOAT)
Beispiel #8
0
 def test_rpow_ibm_ieee_results(self, a, b):
     assume(a != 0.0)
     ibm_a = IBMFloat.from_float(a)
     ibm_b = IBMFloat.from_float(b)
     ieee_a = float(ibm_a)
     ieee_b = float(ibm_b)
     try:
         ieee_c1 = ieee_a**ibm_b
     except OverflowError:
         raise UnsatisfiedAssumption
     ieee_c2 = ieee_a**ieee_b
     assert almost_equal(ieee_c1, ieee_c2, epsilon=EPSILON_IBM_FLOAT)
Beispiel #9
0
 def test_rmod_ibm(self, a, b):
     ibm_a = IBMFloat.from_float(a)
     ibm_b = IBMFloat.from_float(b)
     assume(not ibm_b.is_zero())
     ieee_a = float(ibm_a)
     ieee_b = float(ibm_b)
     try:
         ieee_c1 = ieee_a % ibm_b
     except OverflowError:
         raise UnsatisfiedAssumption
     ieee_c2 = ieee_a % ieee_b
     assert almost_equal(ieee_c1, ieee_c2, epsilon=EPSILON_IBM_FLOAT)
Beispiel #10
0
 def test_rpow_ibm_ieee_results(self, a, b):
     assume(a != 0.0)
     ibm_a = IBMFloat.from_float(a)
     ibm_b = IBMFloat.from_float(b)
     ieee_a = float(ibm_a)
     ieee_b = float(ibm_b)
     try:
         ieee_c1 = ieee_a ** ibm_b
     except OverflowError:
         raise UnsatisfiedAssumption
     ieee_c2 = ieee_a ** ieee_b
     assert almost_equal(ieee_c1, ieee_c2, epsilon=EPSILON_IBM_FLOAT)
Beispiel #11
0
 def test_rmod_ibm(self, a, b):
     ibm_a = IBMFloat.from_float(a)
     ibm_b = IBMFloat.from_float(b)
     assume(not ibm_b.is_zero())
     ieee_a = float(ibm_a)
     ieee_b = float(ibm_b)
     try:
         ieee_c1 = ieee_a % ibm_b
     except OverflowError:
         raise UnsatisfiedAssumption
     ieee_c2 = ieee_a % ieee_b
     assert almost_equal(ieee_c1, ieee_c2, epsilon=EPSILON_IBM_FLOAT)
Beispiel #12
0
    def test_sub(self, a, b):
        try:
            ibm_a = IBMFloat.from_float(a)
            ibm_b = IBMFloat.from_float(b)
            ibm_c = ibm_a - ibm_b
        except FloatingPointError:
            raise UnsatisfiedAssumption

        ieee_a = float(ibm_a)
        ieee_b = float(ibm_b)
        ieee_c = ieee_a - ieee_b

        self.assertTrue(almost_equal(ieee_c, ibm_c, epsilon=EPSILON_IBM_FLOAT))
Beispiel #13
0
 def test_pow_ibm_complex_result(self, a, b):
     assume(a != 0.0)
     assume(b != 0.0 and b != 1.0)
     ibm_a = IBMFloat.from_float(a)
     ibm_b = IBMFloat.from_float(b)
     ieee_a = float(ibm_a)
     ieee_b = float(ibm_b)
     try:
         ibm_c = ibm_a ** ibm_b
     except OverflowError:
         raise UnsatisfiedAssumption
     ieee_c = ieee_a ** ieee_b
     assert almost_equal(ibm_c, ieee_c, epsilon=EPSILON_IBM_FLOAT)
Beispiel #14
0
    def test_add(self, f, p):
        a = f * p
        b = f - a

        ibm_a = IBMFloat.from_float(a)
        ibm_b = IBMFloat.from_float(b)
        ibm_c = ibm_a + ibm_b

        ieee_a = float(ibm_a)
        ieee_b = float(ibm_b)
        ieee_c = ieee_a + ieee_b

        self.assertTrue(almost_equal(ieee_c, ibm_c, epsilon=EPSILON_IBM_FLOAT * 4))
Beispiel #15
0
    def test_sub(self, a, b):
        ibm_a = IBMFloat.from_float(a)
        ibm_b = IBMFloat.from_float(b)
        try:
            ibm_c = ibm_a - ibm_b
        except FloatingPointError:
            raise UnsatisfiedAssumption

        ieee_a = float(ibm_a)
        ieee_b = float(ibm_b)
        ieee_c = ieee_a - ieee_b

        assert almost_equal(ieee_c, ibm_c, epsilon=EPSILON_IBM_FLOAT)
Beispiel #16
0
 def test_pow_ibm_complex_result(self, a, b):
     assume(a != 0.0)
     assume(b != 0.0 and b != 1.0)
     ibm_a = IBMFloat.from_float(a)
     ibm_b = IBMFloat.from_float(b)
     ieee_a = float(ibm_a)
     ieee_b = float(ibm_b)
     try:
         ibm_c = ibm_a**ibm_b
     except OverflowError:
         raise UnsatisfiedAssumption
     ieee_c = ieee_a**ieee_b
     assert almost_equal(ibm_c, ieee_c, epsilon=EPSILON_IBM_FLOAT)
Beispiel #17
0
    def test_add(self, f, p):
        a = f * p
        b = f - a

        ibm_a = IBMFloat.from_float(a)
        ibm_b = IBMFloat.from_float(b)
        ibm_c = ibm_a + ibm_b

        ieee_a = float(ibm_a)
        ieee_b = float(ibm_b)
        ieee_c = ieee_a + ieee_b

        self.assertTrue(
            almost_equal(ieee_c, ibm_c, epsilon=EPSILON_IBM_FLOAT * 4))
Beispiel #18
0
    def test_add(self, f, p):
        a = f * p
        b = f - a

        try:
            ibm_a = IBMFloat.from_float(a)
            ibm_b = IBMFloat.from_float(b)
            ibm_c = ibm_a + ibm_b
        except FloatingPointError:
            raise UnsatisfiedAssumption

        ieee_a = float(ibm_a)
        ieee_b = float(ibm_b)
        ieee_c = ieee_a + ieee_b

        assert almost_equal(ieee_c, ibm_c, epsilon=EPSILON_IBM_FLOAT * 4)
Beispiel #19
0
    def test_add(self, f, p):
        a = f * p
        b = f - a

        try:
            ibm_a = IBMFloat.from_float(a)
            ibm_b = IBMFloat.from_float(b)
            ibm_c = ibm_a + ibm_b
        except FloatingPointError:
            raise UnsatisfiedAssumption

        ieee_a = float(ibm_a)
        ieee_b = float(ibm_b)
        ieee_c = ieee_a + ieee_b

        self.assertTrue(almost_equal(ieee_c, ibm_c, epsilon=EPSILON_IBM_FLOAT * 4))
Beispiel #20
0
 def test_nan(self):
     with self.assertRaises(ValueError):
         IBMFloat.from_float(float('nan'))
Beispiel #21
0
 def test_equality_with_non_comparable_type_is_false(self):
     p = IBMFloat.from_float(1234.0)
     q = None
     assert p != q
Beispiel #22
0
 def test_equality_with_int_positive(self):
     p = IBMFloat.from_float(1234.0)
     q = 1234
     assert p == q
Beispiel #23
0
 def test_equality_with_infinite_float_negative(self):
     p = IBMFloat.from_float(+1.5)
     q = float("+inf")
     assert p != q
Beispiel #24
0
 def test_equality_with_finite_float_positive(self):
     p = IBMFloat.from_float(+1.5)
     q = +1.5
     assert p == q
Beispiel #25
0
 def test_subnormals_rhs_are_not_equal_to_one(self):
     p = IBMFloat.from_float(1.0)
     q = IBMFloat(bytes((0x00, 0x00, 0x00, 0x01)))
     assert p != q
Beispiel #26
0
 def test_le_ibm(self, a, b):
     ibm_a = IBMFloat.from_float(a)
     ibm_b = IBMFloat.from_float(b)
     ieee_a = float(ibm_a)
     ieee_b = float(ibm_b)
     assert (ibm_a <= ibm_b) == (ieee_a <= ieee_b)
Beispiel #27
0
 def test_floor(self, i, f):
     assume(f != 1.0)
     ieee = i + f
     ibm = IBMFloat.from_float(ieee)
     self.assertEqual(math.floor(ibm), i)
Beispiel #28
0
 def test_trunc_below_zero(self, i, f):
     assume(f != 1.0)
     ieee = i - f
     ibm = IBMFloat.from_float(ieee)
     self.assertEqual(trunc(ibm), i)
Beispiel #29
0
 def test_floats_roundtrip(self, f):
     ibm = IBMFloat.from_float(f)
     self.assertTrue(almost_equal(f, float(ibm), epsilon=EPSILON_IBM_FLOAT))
Beispiel #30
0
 def test_bool(self, f):
     self.assertEqual(bool(IBMFloat.from_float(f)), bool(f))
Beispiel #31
0
 def test_too_small(self):
     with self.assertRaises(OverflowError):
         IBMFloat.from_float(MIN_IBM_FLOAT * 10)
Beispiel #32
0
 def test_too_large(self):
     with self.assertRaises(OverflowError):
         IBMFloat.from_float(MAX_IBM_FLOAT * 10)
Beispiel #33
0
 def test_inf(self):
     with self.assertRaises(ValueError):
         IBMFloat.from_float(float('inf'))
Beispiel #34
0
 def test_subnormal(self):
     ibm = IBMFloat.from_float(1.6472184286297693e-83)
     self.assertTrue(ibm.is_subnormal())
Beispiel #35
0
 def test_mod_ibm_division_by_zero_raises_zero_division_error(self, a):
     ibm_a = IBMFloat.from_float(a)
     ibm_b = IBMFloat.from_float(0.0)
     with raises(ZeroDivisionError):
         _ = ibm_a % ibm_b
Beispiel #36
0
 def test_normalise_subnormal_expect_failure(self):
     # This float has an base-16 exponent of -64 (the minimum) and cannot be normalised
     ibm = IBMFloat.from_float(1.6472184286297693e-83)
     assert ibm.is_subnormal()
     with self.assertRaises(FloatingPointError):
         ibm.normalize()
Beispiel #37
0
 def test_zero_from_float(self):
     zero = IBMFloat.from_float(0.0)
     self.assertTrue(zero.is_zero())
Beispiel #38
0
 def test_negate_zero(self):
     zero = IBMFloat.from_float(0.0)
     negated = -zero
     self.assertTrue(negated.is_zero())
Beispiel #39
0
 def test_equality_different_signs(self):
     p = IBMFloat.from_float(+1.0)
     q = IBMFloat.from_float(-1.0)
     assert p != q
Beispiel #40
0
 def test_signbit(self, f):
     ltz = f < 0
     ibm = IBMFloat.from_float(f)
     self.assertEqual(ltz, ibm.signbit)
Beispiel #41
0
 def test_equality_with_finite_float_negative(self):
     p = IBMFloat.from_float(+1.5)
     q = +1.6
     assert p != q
Beispiel #42
0
 def test_round(self, f):
     ibm = IBMFloat.from_float(f)
     g = float(ibm)
     assert round(ibm) == round(g)
Beispiel #43
0
 def test_equality_with_nan_negative(self):
     p = IBMFloat.from_float(+1.5)
     q = float("nan")
     assert p != q
Beispiel #44
0
 def test_smallest_subnormal(self):
     ibm = IBMFloat.from_float(5.147557589468029e-85)
     self.assertEqual(bytes(ibm), bytes((0x00, 0x00, 0x00, 0x01)))
Beispiel #45
0
 def test_equality_with_int_negative(self):
     p = IBMFloat.from_float(1234.0)
     q = 4321
     assert p != q
Beispiel #46
0
 def test_conversion_to_int(self, f):
     ibm = IBMFloat.from_float(f)
     assert int(ibm) == int(f)
Beispiel #47
0
 def test_ceil(self, i, f):
     ieee = i + f
     ibm = IBMFloat.from_float(ieee)
     self.assertEqual(math.ceil(ibm), i + 1)
Beispiel #48
0
 def test_too_small_subnormal(self):
     with self.assertRaises(FloatingPointError):
         IBMFloat.from_float(1e-86)
Beispiel #49
0
 def test_repr(self, f):
     ibm = IBMFloat.from_float(f)
     r = repr(ibm)
     assert check_balanced(r)
Beispiel #50
0
 def test_floor(self, i, f):
     ieee = i + f
     ibm = IBMFloat.from_float(ieee)
     assert math.floor(ibm) == i
Beispiel #51
0
 def test_round(self, f):
     ibm = IBMFloat.from_float(f)
     g = float(ibm)
     assert round(ibm) == round(g)
Beispiel #52
0
 def test_normalise_subnormal_expect_failure(self):
     # This float has an base-16 exponent of -64 (the minimum) and cannot be normalised
     ibm = IBMFloat.from_float(1.6472184286297693e-83)
     assert ibm.is_subnormal()
     with pytest.raises(FloatingPointError):
         ibm.normalize()
Beispiel #53
0
 def test_le_ibm(self, a, b):
     ibm_a = IBMFloat.from_float(a)
     ibm_b = IBMFloat.from_float(b)
     ieee_a = float(ibm_a)
     ieee_b = float(ibm_b)
     assert (ibm_a <= ibm_b) == (ieee_a <= ieee_b)
Beispiel #54
0
 def test_negate_zero(self):
     zero = IBMFloat.from_float(0.0)
     negated = -zero
     assert negated.is_zero()
Beispiel #55
0
 def test_rmod_ibm_division_by_zero_raises_zero_division_error(self, a):
     ibm_a = IBMFloat.from_float(a)
     ibm_b = IBMFloat.from_float(0.0)
     ieee_a = float(ibm_a)
     with raises(ZeroDivisionError):
         _ = ieee_a % ibm_b
Beispiel #56
0
 def test_signbit(self, f):
     ltz = f < 0
     ibm = IBMFloat.from_float(f)
     assert ltz == ibm.signbit
Beispiel #57
0
 def test_truediv_ibm_by_zero_raises_zero_division_error(self, a):
     ibm_a = IBMFloat.from_float(a)
     ibm_b = IBMFloat.from_float(0.0)
     with raises(ZeroDivisionError):
         _ = ibm_a / ibm_b
Beispiel #58
0
 def test_str(self, f):
     ibm = IBMFloat.from_float(f)
     g = float(ibm)
     assert str(g) == str(ibm)
Beispiel #59
0
 def test_conversion_to_int(self, f):
     ibm = IBMFloat.from_float(f)
     assert int(ibm) == int(f)
Beispiel #60
0
 def test_pos(self, f):
     ibm = IBMFloat.from_float(f)
     assert ibm == +ibm