Ejemplo n.º 1
0
 def test_neg(self):
     cls = ssf.DynamicFloat
     arg = cls.positive_zero(self.properties)
     obj = arg.neg()
     self.assertEqual(obj.bits, 0x80000000)
     self.assertEqual(obj.fp_state.status_flags, ssf.StatusFlags())
     obj = -arg
     self.assertEqual(obj.bits, 0x80000000)
     self.assertEqual(obj.fp_state.status_flags, ssf.StatusFlags())
Ejemplo n.º 2
0
 def test_from_int(self):
     cls = ssf.DynamicFloat
     obj = cls.from_int(0, self.properties)
     self.assertEqual(obj.bits, 0x00000000)
     self.assertEqual(obj.fp_state.status_flags, ssf.StatusFlags())
     obj = cls.from_int(1, self.properties,
                        rounding_mode=ssf.RoundingMode.TiesToEven,
                        fp_state=ssf.FPState())
     self.assertEqual(obj.bits, 0x3F800000)
     self.assertEqual(obj.fp_state.status_flags, ssf.StatusFlags())
Ejemplo n.º 3
0
 def test_smoke_test(self):
     self.assertIsInstance(ssf.StatusFlags().set_invalid_operation(),
                           ssf.StatusFlags)
     self.assertIsInstance(ssf.StatusFlags().set_division_by_zero(),
                           ssf.StatusFlags)
     self.assertIsInstance(ssf.StatusFlags().set_overflow(),
                           ssf.StatusFlags)
     self.assertIsInstance(ssf.StatusFlags().set_underflow(),
                           ssf.StatusFlags)
     self.assertIsInstance(ssf.StatusFlags().set_inexact(),
                           ssf.StatusFlags)
     self.assertIsInstance(ssf.StatusFlags(),
                           ssf.StatusFlags)
     self.assertEqual(
         ssf.StatusFlags()
         .set_invalid_operation()
         .set_division_by_zero()
         .set_overflow()
         .set_underflow()
         .set_inexact(),
         ssf.StatusFlags.all())
     self.assertEqual(repr(ssf.StatusFlags()),
                      "StatusFlags()")
     self.assertEqual(repr(ssf.StatusFlags.all()),
                      "StatusFlags().set_invalid_operation()"
                      + ".set_division_by_zero()"
                      + ".set_overflow()"
                      + ".set_underflow()"
                      + ".set_inexact()")
Ejemplo n.º 4
0
 def test_next_up_or_down(self):
     cls = ssf.DynamicFloat
     arg = cls.positive_zero(self.properties)
     obj = arg.next_up_or_down(ssf.UpOrDown.Up)
     self.assertEqual(obj.bits, 0x00000001)
     self.assertEqual(obj.fp_state.status_flags, ssf.StatusFlags())
     obj = arg.next_up_or_down(ssf.UpOrDown.Down)
     self.assertEqual(obj.bits, 0x80000001)
     self.assertEqual(obj.fp_state.status_flags, ssf.StatusFlags())
     obj = arg.next_up()
     self.assertEqual(obj.bits, 0x00000001)
     self.assertEqual(obj.fp_state.status_flags, ssf.StatusFlags())
     obj = arg.next_down()
     self.assertEqual(obj.bits, 0x80000001)
     self.assertEqual(obj.fp_state.status_flags, ssf.StatusFlags())
Ejemplo n.º 5
0
 def test_scale_b(self):
     cls = ssf.DynamicFloat
     rounding_mode = ssf.RoundingMode.TiesToEven
     arg = cls.positive_zero(self.properties)
     obj = arg.scale_b(5, rounding_mode)
     self.assertEqual(obj.bits, 0x00000000)
     self.assertEqual(obj.fp_state.status_flags, ssf.StatusFlags())
Ejemplo n.º 6
0
 def test_convert_to_dynamic_float(self):
     cls = ssf.DynamicFloat
     rounding_mode = ssf.RoundingMode.TiesToEven
     arg = cls.positive_zero(self.properties)
     obj = arg.convert_to_dynamic_float(rounding_mode, self.properties)
     self.assertEqual(obj.bits, 0x00000000)
     self.assertEqual(obj.fp_state.status_flags, ssf.StatusFlags())
Ejemplo n.º 7
0
 def test_compare(self):
     cls = ssf.DynamicFloat
     zero = cls.positive_zero(self.properties)
     inf = cls.positive_infinity(self.properties)
     nan = cls.quiet_nan(self.properties)
     obj = zero.compare_quiet(zero)
     self.assertEqual(obj[0], 0)
     self.assertEqual(obj[1], ssf.FPState())
     obj = zero.compare_quiet(inf)
     self.assertEqual(obj[0], -1)
     self.assertEqual(obj[1], ssf.FPState())
     obj = inf.compare_quiet(zero)
     self.assertEqual(obj[0], 1)
     self.assertEqual(obj[1], ssf.FPState())
     obj = nan.compare_quiet(nan)
     self.assertIsNone(obj[0])
     self.assertEqual(obj[1], ssf.FPState())
     obj = nan.compare_signaling(nan)
     self.assertIsNone(obj[0])
     self.assertEqual(
         obj[1],
         ssf.FPState(status_flags=ssf.StatusFlags().set_invalid_operation()))
     obj = zero.compare(zero, quiet=False)
     self.assertEqual(obj[0], 0)
     self.assertEqual(obj[1], ssf.FPState())
Ejemplo n.º 8
0
 def test_round_to_integral(self):
     cls = ssf.DynamicFloat
     rounding_mode = ssf.RoundingMode.TiesToEven
     arg = cls.positive_zero(self.properties)
     obj = arg.round_to_integral(exact=True, rounding_mode=rounding_mode)
     self.assertEqual(obj.bits, 0x00000000)
     self.assertEqual(obj.fp_state.status_flags, ssf.StatusFlags())
Ejemplo n.º 9
0
 def test_rsqrt(self):
     cls = ssf.DynamicFloat
     rounding_mode = ssf.RoundingMode.TiesToEven
     arg = cls.positive_zero(self.properties)
     obj = arg.rsqrt(rounding_mode)
     self.assertEqual(obj.bits, 0x7F800000)
     self.assertEqual(obj.fp_state.status_flags,
                      ssf.StatusFlags().set_division_by_zero())
Ejemplo n.º 10
0
 def test_log_b(self):
     cls = ssf.DynamicFloat
     arg = cls.positive_zero(self.properties)
     obj = arg.log_b()
     self.assertEqual(obj[0], None)
     self.assertEqual(
         obj[1],
         ssf.FPState(status_flags=ssf.StatusFlags().set_invalid_operation()))
Ejemplo n.º 11
0
 def test_construct(self):
     obj = ssf.DynamicFloat(properties=self.properties)
     self.assertEqual(obj.properties, self.properties)
     self.assertEqual(obj.bits, 0)
     self.assertEqual(obj.fp_state, ssf.FPState())
     obj = ssf.DynamicFloat(obj, bits=0x1)
     self.assertEqual(obj.properties, self.properties)
     self.assertEqual(obj.bits, 0x1)
     self.assertEqual(obj.fp_state, ssf.FPState())
     obj = ssf.DynamicFloat(properties=self.properties, bits=0x2)
     self.assertEqual(obj.properties, self.properties)
     self.assertEqual(obj.bits, 0x2)
     self.assertEqual(obj.fp_state, ssf.FPState())
     obj = ssf.DynamicFloat(
         properties=self.properties,
         bits=0x3,
         fp_state=ssf.FPState(status_flags=ssf.StatusFlags().set_inexact()))
     self.assertEqual(obj.properties, self.properties)
     self.assertEqual(obj.bits, 0x3)
     self.assertEqual(obj.fp_state,
                      ssf.FPState(status_flags=ssf.StatusFlags().set_inexact()))
Ejemplo n.º 12
0
 def test_smoke_test(self):
     rounding_mode = ssf.RoundingMode.TiesToEven
     status_flags = ssf.StatusFlags()
     exception_handling_mode = ssf.ExceptionHandlingMode \
         .IgnoreExactUnderflow
     tininess_detection_mode = ssf.TininessDetectionMode.AfterRounding
     obj = ssf.FPState(rounding_mode=rounding_mode,
                       status_flags=status_flags,
                       exception_handling_mode=exception_handling_mode,
                       tininess_detection_mode=tininess_detection_mode)
     obj = obj.merge(obj)
     self.assertEqual(obj.rounding_mode, rounding_mode)
     self.assertEqual(obj.status_flags, status_flags)
     self.assertEqual(obj.exception_handling_mode, exception_handling_mode)
     self.assertEqual(obj.tininess_detection_mode, tininess_detection_mode)
     self.assertEqual(
         repr(obj),
         "PlatformProperties(rounding_mode=RoundingMode.TiesToEven, "
         + "status_flags=StatusFlags(), "
         + "exception_handling_mode="
         + "ExceptionHandlingMode.IgnoreExactUnderflow, "
         + "tininess_detection_mode=TininessDetectionMode.AfterRounding)")
Ejemplo n.º 13
0
 def test_add(self):
     self.handle_binary_op("add", operator.add,
                           0x00000000, ssf.StatusFlags())
Ejemplo n.º 14
0
 def test_copy_sign(self):
     cls = ssf.DynamicFloat
     arg = cls.positive_zero(self.properties)
     obj = arg.copy_sign(arg)
     self.assertEqual(obj.bits, 0x00000000)
     self.assertEqual(obj.fp_state.status_flags, ssf.StatusFlags())
Ejemplo n.º 15
0
 def test_sub(self):
     self.handle_binary_op("sub", operator.sub,
                           0x00000000, ssf.StatusFlags())
Ejemplo n.º 16
0
 def test_mul(self):
     self.handle_binary_op("mul", operator.mul,
                           0x00000000, ssf.StatusFlags())
Ejemplo n.º 17
0
 def test_div(self):
     self.handle_binary_op("div", operator.truediv,
                           0x7FC00000, ssf.StatusFlags().set_invalid_operation())
Ejemplo n.º 18
0
 def test_ieee754_remainder(self):
     self.handle_binary_op("ieee754_remainder", None,
                           0x7FC00000, ssf.StatusFlags().set_invalid_operation())