From 6ab4cfb71401ebb5390deaf58bb2427b32d5c7d7 Mon Sep 17 00:00:00 2001 From: Mirko Scholz Date: Sat, 5 Sep 2020 10:35:45 +0200 Subject: [PATCH] extra checks for multiply --- src/decn/decn.c | 6 ++++++ src/decn/decn_tests.cpp | 13 +++++++++++++ 2 files changed, 19 insertions(+) diff --git a/src/decn/decn.c b/src/decn/decn.c index ea03035..07d752e 100644 --- a/src/decn/decn.c +++ b/src/decn/decn.c @@ -696,6 +696,12 @@ void mult_decn(void){ uint8_t carry = 0; uint8_t is_neg; exp_t new_exponent; +#ifdef EXTRA_CHECKS + if (decn_is_nan(&AccDecn) || decn_is_nan(&BDecn)) { + set_dec80_NaN(&AccDecn); + return; + } +#endif //initialize values set_dec80_zero(&TmpDecn); //normalize diff --git a/src/decn/decn_tests.cpp b/src/decn/decn_tests.cpp index 18a292b..b9a42bf 100644 --- a/src/decn/decn_tests.cpp +++ b/src/decn/decn_tests.cpp @@ -243,6 +243,19 @@ TEST_CASE("multiply"){ decn_to_str_complete(&AccDecn); CHECK_THAT(Buf, Equals("Error")); //acc*b + //NaN + build_dec80("9.99", DEC80_MAX_EXP/2); + set_dec80_NaN(&BDecn); + mult_decn(); + decn_to_str_complete(&AccDecn); + CHECK_THAT(Buf, Equals("Error")); //acc*b + + //NaN + set_dec80_NaN(&AccDecn); + build_decn_at(&BDecn, "9.99", DEC80_MAX_EXP/2); + mult_decn(); + decn_to_str_complete(&AccDecn); + CHECK_THAT(Buf, Equals("Error")); //acc*b } static void div_test(