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())
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())
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()")
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())
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())
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())
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())
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())
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())
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()))
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()))
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)")
def test_add(self): self.handle_binary_op("add", operator.add, 0x00000000, ssf.StatusFlags())
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())
def test_sub(self): self.handle_binary_op("sub", operator.sub, 0x00000000, ssf.StatusFlags())
def test_mul(self): self.handle_binary_op("mul", operator.mul, 0x00000000, ssf.StatusFlags())
def test_div(self): self.handle_binary_op("div", operator.truediv, 0x7FC00000, ssf.StatusFlags().set_invalid_operation())
def test_ieee754_remainder(self): self.handle_binary_op("ieee754_remainder", None, 0x7FC00000, ssf.StatusFlags().set_invalid_operation())