Correct boundary conditions and add tests

This commit is contained in:
jsalling
2016-11-06 22:25:54 -06:00
parent 1dfcb54491
commit 4a27d14734
2 changed files with 5 additions and 3 deletions

View File

@ -281,8 +281,8 @@ void UnityPrintFloat(_UD number)
if (isnan(number)) UnityPrint(UnityStrNaN); if (isnan(number)) UnityPrint(UnityStrNaN);
else if (isinf(number)) UnityPrintLen(UnityStrInf, 3); else if (isinf(number)) UnityPrintLen(UnityStrInf, 3);
else if (number < 0.0000005 && number > 0) UnityPrint("0.000000..."); /* Small numbers */ else if (number <= 0.0000005 && number > 0) UnityPrint("0.000000..."); /* Small number */
else if (number < 4294967296.0f) /* Rounded result fits in 32 bits, "%.6f" format */ else if (number < 4294967295.9999995) /* Rounded result fits in 32 bits, "%.6f" format */
{ {
const _US32 divisor = (1000000/10); const _US32 divisor = (1000000/10);
_UU32 integer_part = (_UU32)number; _UU32 integer_part = (_UU32)number;
@ -305,7 +305,7 @@ void UnityPrintFloat(_UD number)
double divide = 10.0; double divide = 10.0;
int exponent = 9; int exponent = 9;
while (number / divide >= 1000000000.0) while (number / divide >= 1000000000.0 - 0.5)
{ {
divide *= 10; divide *= 10;
exponent++; exponent++;

View File

@ -3272,7 +3272,9 @@ void testFloatVerbosePrinting(void)
//Double //Double
TEST_ASSERT_EQUAL_PRINT_FLOATING("0.100469", 0.10046949999999999); TEST_ASSERT_EQUAL_PRINT_FLOATING("0.100469", 0.10046949999999999);
TEST_ASSERT_EQUAL_PRINT_FLOATING("4294967295.999999", 4294967295.999999); TEST_ASSERT_EQUAL_PRINT_FLOATING("4294967295.999999", 4294967295.999999);
TEST_ASSERT_EQUAL_PRINT_FLOATING("4.2949673e+09", 4294967295.9999995);
TEST_ASSERT_EQUAL_PRINT_FLOATING("4.2949673e+09", 4294967296.0); TEST_ASSERT_EQUAL_PRINT_FLOATING("4.2949673e+09", 4294967296.0);
TEST_ASSERT_EQUAL_PRINT_FLOATING("1.0e+10", 9999999995.0);
TEST_ASSERT_EQUAL_PRINT_FLOATING("7.0e+100", 7.0e+100); TEST_ASSERT_EQUAL_PRINT_FLOATING("7.0e+100", 7.0e+100);
TEST_ASSERT_EQUAL_PRINT_FLOATING("Inf", 1.7976931348623157e308*10.0); TEST_ASSERT_EQUAL_PRINT_FLOATING("Inf", 1.7976931348623157e308*10.0);