mirror of
https://github.com/ThrowTheSwitch/Unity.git
synced 2026-01-29 19:24:27 +01:00
Reorganize NaN and Inf printing into if-else blocks
This commit is contained in:
58
src/unity.c
58
src/unity.c
@@ -251,58 +251,50 @@ void UnityPrintMask(const _U_UINT mask, const _U_UINT number)
|
|||||||
|
|
||||||
/*-----------------------------------------------*/
|
/*-----------------------------------------------*/
|
||||||
#ifdef UNITY_FLOAT_VERBOSE
|
#ifdef UNITY_FLOAT_VERBOSE
|
||||||
#include <stdio.h>
|
|
||||||
|
|
||||||
#ifndef UNITY_VERBOSE_NUMBER_MAX_LENGTH
|
|
||||||
# ifdef UNITY_DOUBLE_VERBOSE
|
|
||||||
# define UNITY_VERBOSE_NUMBER_MAX_LENGTH 317
|
|
||||||
# else
|
|
||||||
# define UNITY_VERBOSE_NUMBER_MAX_LENGTH 47
|
|
||||||
# endif
|
|
||||||
#endif
|
|
||||||
|
|
||||||
|
/*
|
||||||
|
* char buffer[19];
|
||||||
|
* if (number > 4294967296.0 || -number > 4294967296.0)
|
||||||
|
* snprintf(buffer, sizeof buffer, "%.6e", number);
|
||||||
|
* else
|
||||||
|
* snprintf(buffer, sizeof buffer, "%.6f", number);
|
||||||
|
* UnityPrint(buffer);
|
||||||
|
*/
|
||||||
void UnityPrintFloat(_UD number)
|
void UnityPrintFloat(_UD number)
|
||||||
{
|
{
|
||||||
// char TempBuffer[UNITY_VERBOSE_NUMBER_MAX_LENGTH + 1];
|
|
||||||
// snprintf(TempBuffer, sizeof(TempBuffer), "%.6f", number);
|
|
||||||
// UnityPrint(TempBuffer);
|
|
||||||
if (isnan(number))
|
|
||||||
{
|
|
||||||
UnityPrint(UnityStrNaN);
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (number < 0)
|
if (number < 0)
|
||||||
{
|
{
|
||||||
UNITY_OUTPUT_CHAR('-');
|
UNITY_OUTPUT_CHAR('-');
|
||||||
number = -number;
|
number = -number;
|
||||||
}
|
}
|
||||||
if (isinf(number)) UnityPrintLen(UnityStrInf, 3);
|
|
||||||
|
if (isnan(number)) UnityPrint(UnityStrNaN);
|
||||||
|
else if (isinf(number)) UnityPrintLen(UnityStrInf, 3);
|
||||||
|
else if (number < 0.0000005 && number > 0) UnityPrint("0.000000..."); /* Small number format */
|
||||||
else if (number < 4294967296.0f) /* Fits in an integer */
|
else if (number < 4294967296.0f) /* Fits in an integer */
|
||||||
{
|
{
|
||||||
_UU32 integer_part = (_UU32)number;
|
_UU32 integer_part = (_UU32)number;
|
||||||
_UD fraction_part = number - integer_part;
|
_UD fraction_part = number - integer_part;
|
||||||
|
|
||||||
_U_UINT fraction_bits = (_U_UINT)(fraction_part * 1000000.0f + 0.5f);
|
_U_UINT fraction_bits = (_U_UINT)(fraction_part * 1000000.0f + 0.5f);
|
||||||
|
|
||||||
if (fraction_bits == 1000000)
|
if (fraction_bits == 1000000)
|
||||||
{
|
{
|
||||||
fraction_bits = 0;
|
fraction_bits = 0;
|
||||||
integer_part += 1;
|
integer_part += 1;
|
||||||
}
|
}
|
||||||
_U_UINT divisor_int = 100000;
|
_U_UINT divisor = 100000;
|
||||||
|
|
||||||
UnityPrintNumberUnsigned(integer_part);
|
UnityPrintNumberUnsigned(integer_part);
|
||||||
UNITY_OUTPUT_CHAR('.');
|
UNITY_OUTPUT_CHAR('.');
|
||||||
/* now mod and print, then divide divisor */
|
/* now mod and print, then divide divisor */
|
||||||
do
|
do
|
||||||
{
|
{
|
||||||
UNITY_OUTPUT_CHAR((char)('0' + (fraction_bits / divisor_int)));
|
UNITY_OUTPUT_CHAR((char)('0' + (fraction_bits / divisor)));
|
||||||
fraction_bits %= divisor_int;
|
fraction_bits %= divisor;
|
||||||
if (fraction_bits == 0) break; // Truncate trailing 0's
|
if (fraction_bits == 0) break; // Truncate trailing 0's
|
||||||
divisor_int /= 10;
|
divisor /= 10;
|
||||||
} while (divisor_int > 0);
|
} while (divisor > 0);
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
else /* Won't fit in an integer type */
|
else /* Won't fit in an integer type */
|
||||||
{
|
{
|
||||||
@@ -316,17 +308,19 @@ void UnityPrintFloat(_UD number)
|
|||||||
exponent++;
|
exponent++;
|
||||||
}
|
}
|
||||||
integer_part = (_UU32)(number / divide + 0.5f);
|
integer_part = (_UU32)(number / divide + 0.5f);
|
||||||
_UU32 divisor_int = 1000000;
|
|
||||||
|
_UU32 divisor = 1000000;
|
||||||
do
|
do
|
||||||
{
|
{
|
||||||
UNITY_OUTPUT_CHAR((char)('0' + (integer_part / divisor_int)));
|
UNITY_OUTPUT_CHAR((char)('0' + (integer_part / divisor)));
|
||||||
|
|
||||||
integer_part %= divisor_int;
|
integer_part %= divisor;
|
||||||
divisor_int /= 10;
|
divisor /= 10;
|
||||||
if (divisor_int == 100000) UNITY_OUTPUT_CHAR('.');
|
if (divisor == 100000) UNITY_OUTPUT_CHAR('.');
|
||||||
} while (divisor_int > 0);
|
} while (divisor > 0);
|
||||||
UNITY_OUTPUT_CHAR('e');
|
UNITY_OUTPUT_CHAR('e');
|
||||||
UNITY_OUTPUT_CHAR('+');
|
UNITY_OUTPUT_CHAR('+');
|
||||||
|
if (exponent < 10) UNITY_OUTPUT_CHAR('0');
|
||||||
UnityPrintNumberUnsigned(exponent);
|
UnityPrintNumberUnsigned(exponent);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -3228,6 +3228,18 @@ void testNotEqualFloatArraysLengthZero(void)
|
|||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void testFloatVerbosePrinting(void)
|
||||||
|
{
|
||||||
|
#ifdef UNITY_FLOAT_VERBOSE
|
||||||
|
UnityPrintFloat(123456789.0f);
|
||||||
|
UnityPrintFloat(100000000.0f);
|
||||||
|
UnityPrintFloat(65536.0f*65536.0f);
|
||||||
|
UnityPrintFloat(1000000000.0f);
|
||||||
|
UnityPrintFloat(10000000000.0f);
|
||||||
|
UnityPrintFloat(9999999000.0f);
|
||||||
|
#endif
|
||||||
|
}
|
||||||
|
|
||||||
// ===================== THESE TEST WILL RUN IF YOUR CONFIG INCLUDES DOUBLE SUPPORT ==================
|
// ===================== THESE TEST WILL RUN IF YOUR CONFIG INCLUDES DOUBLE SUPPORT ==================
|
||||||
|
|
||||||
void testDoublesWithinDelta(void)
|
void testDoublesWithinDelta(void)
|
||||||
|
|||||||
Reference in New Issue
Block a user