Donald Meyers / Mbed OS evan
Committer:
djmeyers
Date:
Sat Mar 18 22:37:16 2017 +0000
Revision:
0:06ee5f8a484a
Initial commit

Who changed what in which revision?

UserRevisionLine numberNew contents of line
djmeyers 0:06ee5f8a484a 1 /* =========================================================================
djmeyers 0:06ee5f8a484a 2 Unity Project - A Test Framework for C
djmeyers 0:06ee5f8a484a 3 Copyright (c) 2007-14 Mike Karlesky, Mark VanderVoord, Greg Williams
djmeyers 0:06ee5f8a484a 4 [Released under MIT License. Please refer to license.txt for details]
djmeyers 0:06ee5f8a484a 5 ============================================================================ */
djmeyers 0:06ee5f8a484a 6
djmeyers 0:06ee5f8a484a 7 #include "unity.h"
djmeyers 0:06ee5f8a484a 8 #include <stddef.h>
djmeyers 0:06ee5f8a484a 9
djmeyers 0:06ee5f8a484a 10 /* If omitted from header, declare overrideable prototypes here so they're ready for use */
djmeyers 0:06ee5f8a484a 11 #ifdef UNITY_OMIT_OUTPUT_CHAR_HEADER_DECLARATION
djmeyers 0:06ee5f8a484a 12 void UNITY_OUTPUT_CHAR(int);
djmeyers 0:06ee5f8a484a 13 #endif
djmeyers 0:06ee5f8a484a 14
djmeyers 0:06ee5f8a484a 15 /* Helpful macros for us to use here */
djmeyers 0:06ee5f8a484a 16 #define UNITY_FAIL_AND_BAIL { Unity.CurrentTestFailed = 1; longjmp(Unity.AbortFrame, 1); }
djmeyers 0:06ee5f8a484a 17 #define UNITY_IGNORE_AND_BAIL { Unity.CurrentTestIgnored = 1; longjmp(Unity.AbortFrame, 1); }
djmeyers 0:06ee5f8a484a 18
djmeyers 0:06ee5f8a484a 19 /* return prematurely if we are already in failure or ignore state */
djmeyers 0:06ee5f8a484a 20 #define UNITY_SKIP_EXECUTION { if ((Unity.CurrentTestFailed != 0) || (Unity.CurrentTestIgnored != 0)) {return;} }
djmeyers 0:06ee5f8a484a 21
djmeyers 0:06ee5f8a484a 22 struct _Unity Unity;
djmeyers 0:06ee5f8a484a 23
djmeyers 0:06ee5f8a484a 24 static const char UnityStrOk[] = "OK";
djmeyers 0:06ee5f8a484a 25 static const char UnityStrPass[] = "PASS";
djmeyers 0:06ee5f8a484a 26 static const char UnityStrFail[] = "FAIL";
djmeyers 0:06ee5f8a484a 27 static const char UnityStrIgnore[] = "IGNORE";
djmeyers 0:06ee5f8a484a 28 static const char UnityStrNull[] = "NULL";
djmeyers 0:06ee5f8a484a 29 static const char UnityStrSpacer[] = ". ";
djmeyers 0:06ee5f8a484a 30 static const char UnityStrExpected[] = " Expected ";
djmeyers 0:06ee5f8a484a 31 static const char UnityStrWas[] = " Was ";
djmeyers 0:06ee5f8a484a 32 static const char UnityStrElement[] = " Element ";
djmeyers 0:06ee5f8a484a 33 static const char UnityStrByte[] = " Byte ";
djmeyers 0:06ee5f8a484a 34 static const char UnityStrMemory[] = " Memory Mismatch.";
djmeyers 0:06ee5f8a484a 35 static const char UnityStrDelta[] = " Values Not Within Delta ";
djmeyers 0:06ee5f8a484a 36 static const char UnityStrPointless[] = " You Asked Me To Compare Nothing, Which Was Pointless.";
djmeyers 0:06ee5f8a484a 37 static const char UnityStrNullPointerForExpected[] = " Expected pointer to be NULL";
djmeyers 0:06ee5f8a484a 38 static const char UnityStrNullPointerForActual[] = " Actual pointer was NULL";
djmeyers 0:06ee5f8a484a 39 static const char UnityStrNot[] = "Not ";
djmeyers 0:06ee5f8a484a 40 static const char UnityStrInf[] = "Infinity";
djmeyers 0:06ee5f8a484a 41 static const char UnityStrNegInf[] = "Negative Infinity";
djmeyers 0:06ee5f8a484a 42 static const char UnityStrNaN[] = "NaN";
djmeyers 0:06ee5f8a484a 43 static const char UnityStrDet[] = "Determinate";
djmeyers 0:06ee5f8a484a 44 static const char UnityStrInvalidFloatTrait[] = "Invalid Float Trait";
djmeyers 0:06ee5f8a484a 45 const char UnityStrErrFloat[] = "Unity Floating Point Disabled";
djmeyers 0:06ee5f8a484a 46 const char UnityStrErrDouble[] = "Unity Double Precision Disabled";
djmeyers 0:06ee5f8a484a 47 const char UnityStrErr64[] = "Unity 64-bit Support Disabled";
djmeyers 0:06ee5f8a484a 48 static const char UnityStrBreaker[] = "-----------------------";
djmeyers 0:06ee5f8a484a 49 static const char UnityStrResultsTests[] = " Tests ";
djmeyers 0:06ee5f8a484a 50 static const char UnityStrResultsFailures[] = " Failures ";
djmeyers 0:06ee5f8a484a 51 static const char UnityStrResultsIgnored[] = " Ignored ";
djmeyers 0:06ee5f8a484a 52 static const char UnityStrDetail1Name[] = UNITY_DETAIL1_NAME " ";
djmeyers 0:06ee5f8a484a 53 static const char UnityStrDetail2Name[] = " " UNITY_DETAIL2_NAME " ";
djmeyers 0:06ee5f8a484a 54
djmeyers 0:06ee5f8a484a 55 #ifdef UNITY_FLOAT_NEEDS_ZERO
djmeyers 0:06ee5f8a484a 56 /* Dividing by these constants produces +/- infinity.
djmeyers 0:06ee5f8a484a 57 * The rationale is given in UnityAssertFloatIsInf's body. */
djmeyers 0:06ee5f8a484a 58 static const _UF f_zero = 0.0f;
djmeyers 0:06ee5f8a484a 59 #endif
djmeyers 0:06ee5f8a484a 60
djmeyers 0:06ee5f8a484a 61 /* compiler-generic print formatting masks */
djmeyers 0:06ee5f8a484a 62 static const _U_UINT UnitySizeMask[] =
djmeyers 0:06ee5f8a484a 63 {
djmeyers 0:06ee5f8a484a 64 255u, /* 0xFF */
djmeyers 0:06ee5f8a484a 65 65535u, /* 0xFFFF */
djmeyers 0:06ee5f8a484a 66 65535u,
djmeyers 0:06ee5f8a484a 67 4294967295u, /* 0xFFFFFFFF */
djmeyers 0:06ee5f8a484a 68 4294967295u,
djmeyers 0:06ee5f8a484a 69 4294967295u,
djmeyers 0:06ee5f8a484a 70 4294967295u
djmeyers 0:06ee5f8a484a 71 #ifdef UNITY_SUPPORT_64
djmeyers 0:06ee5f8a484a 72 ,0xFFFFFFFFFFFFFFFF
djmeyers 0:06ee5f8a484a 73 #endif
djmeyers 0:06ee5f8a484a 74 };
djmeyers 0:06ee5f8a484a 75
djmeyers 0:06ee5f8a484a 76 /*-----------------------------------------------
djmeyers 0:06ee5f8a484a 77 * Pretty Printers & Test Result Output Handlers
djmeyers 0:06ee5f8a484a 78 *-----------------------------------------------*/
djmeyers 0:06ee5f8a484a 79
djmeyers 0:06ee5f8a484a 80 void UnityPrint(const char* string)
djmeyers 0:06ee5f8a484a 81 {
djmeyers 0:06ee5f8a484a 82 const char* pch = string;
djmeyers 0:06ee5f8a484a 83
djmeyers 0:06ee5f8a484a 84 if (pch != NULL)
djmeyers 0:06ee5f8a484a 85 {
djmeyers 0:06ee5f8a484a 86 while (*pch)
djmeyers 0:06ee5f8a484a 87 {
djmeyers 0:06ee5f8a484a 88 /* printable characters plus CR & LF are printed */
djmeyers 0:06ee5f8a484a 89 if ((*pch <= 126) && (*pch >= 32))
djmeyers 0:06ee5f8a484a 90 {
djmeyers 0:06ee5f8a484a 91 UNITY_OUTPUT_CHAR(*pch);
djmeyers 0:06ee5f8a484a 92 }
djmeyers 0:06ee5f8a484a 93 /* write escaped carriage returns */
djmeyers 0:06ee5f8a484a 94 else if (*pch == 13)
djmeyers 0:06ee5f8a484a 95 {
djmeyers 0:06ee5f8a484a 96 UNITY_OUTPUT_CHAR('\\');
djmeyers 0:06ee5f8a484a 97 UNITY_OUTPUT_CHAR('r');
djmeyers 0:06ee5f8a484a 98 }
djmeyers 0:06ee5f8a484a 99 /* write escaped line feeds */
djmeyers 0:06ee5f8a484a 100 else if (*pch == 10)
djmeyers 0:06ee5f8a484a 101 {
djmeyers 0:06ee5f8a484a 102 UNITY_OUTPUT_CHAR('\\');
djmeyers 0:06ee5f8a484a 103 UNITY_OUTPUT_CHAR('n');
djmeyers 0:06ee5f8a484a 104 }
djmeyers 0:06ee5f8a484a 105 /* unprintable characters are shown as codes */
djmeyers 0:06ee5f8a484a 106 else
djmeyers 0:06ee5f8a484a 107 {
djmeyers 0:06ee5f8a484a 108 UNITY_OUTPUT_CHAR('\\');
djmeyers 0:06ee5f8a484a 109 UnityPrintNumberHex((_U_UINT)*pch, 2);
djmeyers 0:06ee5f8a484a 110 }
djmeyers 0:06ee5f8a484a 111 pch++;
djmeyers 0:06ee5f8a484a 112 }
djmeyers 0:06ee5f8a484a 113 }
djmeyers 0:06ee5f8a484a 114 }
djmeyers 0:06ee5f8a484a 115
djmeyers 0:06ee5f8a484a 116 void UnityPrintLen(const char* string, const _UU32 length);
djmeyers 0:06ee5f8a484a 117 void UnityPrintLen(const char* string, const _UU32 length)
djmeyers 0:06ee5f8a484a 118 {
djmeyers 0:06ee5f8a484a 119 const char* pch = string;
djmeyers 0:06ee5f8a484a 120
djmeyers 0:06ee5f8a484a 121 if (pch != NULL)
djmeyers 0:06ee5f8a484a 122 {
djmeyers 0:06ee5f8a484a 123 while (*pch && (_UU32)(pch - string) < length)
djmeyers 0:06ee5f8a484a 124 {
djmeyers 0:06ee5f8a484a 125 /* printable characters plus CR & LF are printed */
djmeyers 0:06ee5f8a484a 126 if ((*pch <= 126) && (*pch >= 32))
djmeyers 0:06ee5f8a484a 127 {
djmeyers 0:06ee5f8a484a 128 UNITY_OUTPUT_CHAR(*pch);
djmeyers 0:06ee5f8a484a 129 }
djmeyers 0:06ee5f8a484a 130 /* write escaped carriage returns */
djmeyers 0:06ee5f8a484a 131 else if (*pch == 13)
djmeyers 0:06ee5f8a484a 132 {
djmeyers 0:06ee5f8a484a 133 UNITY_OUTPUT_CHAR('\\');
djmeyers 0:06ee5f8a484a 134 UNITY_OUTPUT_CHAR('r');
djmeyers 0:06ee5f8a484a 135 }
djmeyers 0:06ee5f8a484a 136 /* write escaped line feeds */
djmeyers 0:06ee5f8a484a 137 else if (*pch == 10)
djmeyers 0:06ee5f8a484a 138 {
djmeyers 0:06ee5f8a484a 139 UNITY_OUTPUT_CHAR('\\');
djmeyers 0:06ee5f8a484a 140 UNITY_OUTPUT_CHAR('n');
djmeyers 0:06ee5f8a484a 141 }
djmeyers 0:06ee5f8a484a 142 /* unprintable characters are shown as codes */
djmeyers 0:06ee5f8a484a 143 else
djmeyers 0:06ee5f8a484a 144 {
djmeyers 0:06ee5f8a484a 145 UNITY_OUTPUT_CHAR('\\');
djmeyers 0:06ee5f8a484a 146 UnityPrintNumberHex((_U_UINT)*pch, 2);
djmeyers 0:06ee5f8a484a 147 }
djmeyers 0:06ee5f8a484a 148 pch++;
djmeyers 0:06ee5f8a484a 149 }
djmeyers 0:06ee5f8a484a 150 }
djmeyers 0:06ee5f8a484a 151 }
djmeyers 0:06ee5f8a484a 152
djmeyers 0:06ee5f8a484a 153 /*-----------------------------------------------*/
djmeyers 0:06ee5f8a484a 154 void UnityPrintNumberByStyle(const _U_SINT number, const UNITY_DISPLAY_STYLE_T style)
djmeyers 0:06ee5f8a484a 155 {
djmeyers 0:06ee5f8a484a 156 if ((style & UNITY_DISPLAY_RANGE_INT) == UNITY_DISPLAY_RANGE_INT)
djmeyers 0:06ee5f8a484a 157 {
djmeyers 0:06ee5f8a484a 158 UnityPrintNumber(number);
djmeyers 0:06ee5f8a484a 159 }
djmeyers 0:06ee5f8a484a 160 else if ((style & UNITY_DISPLAY_RANGE_UINT) == UNITY_DISPLAY_RANGE_UINT)
djmeyers 0:06ee5f8a484a 161 {
djmeyers 0:06ee5f8a484a 162 UnityPrintNumberUnsigned( (_U_UINT)number & UnitySizeMask[((_U_UINT)style & (_U_UINT)0x0F) - 1] );
djmeyers 0:06ee5f8a484a 163 }
djmeyers 0:06ee5f8a484a 164 else
djmeyers 0:06ee5f8a484a 165 {
djmeyers 0:06ee5f8a484a 166 UnityPrintNumberHex((_U_UINT)number, (char)((style & 0x000F) << 1));
djmeyers 0:06ee5f8a484a 167 }
djmeyers 0:06ee5f8a484a 168 }
djmeyers 0:06ee5f8a484a 169
djmeyers 0:06ee5f8a484a 170 /*-----------------------------------------------*/
djmeyers 0:06ee5f8a484a 171 void UnityPrintNumber(const _U_SINT number_to_print)
djmeyers 0:06ee5f8a484a 172 {
djmeyers 0:06ee5f8a484a 173 _U_UINT number = (_U_UINT)number_to_print;
djmeyers 0:06ee5f8a484a 174
djmeyers 0:06ee5f8a484a 175 if (number_to_print < 0)
djmeyers 0:06ee5f8a484a 176 {
djmeyers 0:06ee5f8a484a 177 /* A negative number, including MIN negative */
djmeyers 0:06ee5f8a484a 178 UNITY_OUTPUT_CHAR('-');
djmeyers 0:06ee5f8a484a 179 number = (_U_UINT)(-number_to_print);
djmeyers 0:06ee5f8a484a 180 }
djmeyers 0:06ee5f8a484a 181 UnityPrintNumberUnsigned(number);
djmeyers 0:06ee5f8a484a 182 }
djmeyers 0:06ee5f8a484a 183
djmeyers 0:06ee5f8a484a 184 /*-----------------------------------------------
djmeyers 0:06ee5f8a484a 185 * basically do an itoa using as little ram as possible */
djmeyers 0:06ee5f8a484a 186 void UnityPrintNumberUnsigned(const _U_UINT number)
djmeyers 0:06ee5f8a484a 187 {
djmeyers 0:06ee5f8a484a 188 _U_UINT divisor = 1;
djmeyers 0:06ee5f8a484a 189
djmeyers 0:06ee5f8a484a 190 /* figure out initial divisor */
djmeyers 0:06ee5f8a484a 191 while (number / divisor > 9)
djmeyers 0:06ee5f8a484a 192 {
djmeyers 0:06ee5f8a484a 193 divisor *= 10;
djmeyers 0:06ee5f8a484a 194 }
djmeyers 0:06ee5f8a484a 195
djmeyers 0:06ee5f8a484a 196 /* now mod and print, then divide divisor */
djmeyers 0:06ee5f8a484a 197 do
djmeyers 0:06ee5f8a484a 198 {
djmeyers 0:06ee5f8a484a 199 UNITY_OUTPUT_CHAR((char)('0' + (number / divisor % 10)));
djmeyers 0:06ee5f8a484a 200 divisor /= 10;
djmeyers 0:06ee5f8a484a 201 }
djmeyers 0:06ee5f8a484a 202 while (divisor > 0);
djmeyers 0:06ee5f8a484a 203 }
djmeyers 0:06ee5f8a484a 204
djmeyers 0:06ee5f8a484a 205 /*-----------------------------------------------*/
djmeyers 0:06ee5f8a484a 206 void UnityPrintNumberHex(const _U_UINT number, const char nibbles_to_print)
djmeyers 0:06ee5f8a484a 207 {
djmeyers 0:06ee5f8a484a 208 _U_UINT nibble;
djmeyers 0:06ee5f8a484a 209 char nibbles = nibbles_to_print;
djmeyers 0:06ee5f8a484a 210 UNITY_OUTPUT_CHAR('0');
djmeyers 0:06ee5f8a484a 211 UNITY_OUTPUT_CHAR('x');
djmeyers 0:06ee5f8a484a 212
djmeyers 0:06ee5f8a484a 213 while (nibbles > 0)
djmeyers 0:06ee5f8a484a 214 {
djmeyers 0:06ee5f8a484a 215 nibble = (number >> (--nibbles << 2)) & 0x0000000F;
djmeyers 0:06ee5f8a484a 216 if (nibble <= 9)
djmeyers 0:06ee5f8a484a 217 {
djmeyers 0:06ee5f8a484a 218 UNITY_OUTPUT_CHAR((char)('0' + nibble));
djmeyers 0:06ee5f8a484a 219 }
djmeyers 0:06ee5f8a484a 220 else
djmeyers 0:06ee5f8a484a 221 {
djmeyers 0:06ee5f8a484a 222 UNITY_OUTPUT_CHAR((char)('A' - 10 + nibble));
djmeyers 0:06ee5f8a484a 223 }
djmeyers 0:06ee5f8a484a 224 }
djmeyers 0:06ee5f8a484a 225 }
djmeyers 0:06ee5f8a484a 226
djmeyers 0:06ee5f8a484a 227 /*-----------------------------------------------*/
djmeyers 0:06ee5f8a484a 228 void UnityPrintMask(const _U_UINT mask, const _U_UINT number)
djmeyers 0:06ee5f8a484a 229 {
djmeyers 0:06ee5f8a484a 230 _U_UINT current_bit = (_U_UINT)1 << (UNITY_INT_WIDTH - 1);
djmeyers 0:06ee5f8a484a 231 _US32 i;
djmeyers 0:06ee5f8a484a 232
djmeyers 0:06ee5f8a484a 233 for (i = 0; i < UNITY_INT_WIDTH; i++)
djmeyers 0:06ee5f8a484a 234 {
djmeyers 0:06ee5f8a484a 235 if (current_bit & mask)
djmeyers 0:06ee5f8a484a 236 {
djmeyers 0:06ee5f8a484a 237 if (current_bit & number)
djmeyers 0:06ee5f8a484a 238 {
djmeyers 0:06ee5f8a484a 239 UNITY_OUTPUT_CHAR('1');
djmeyers 0:06ee5f8a484a 240 }
djmeyers 0:06ee5f8a484a 241 else
djmeyers 0:06ee5f8a484a 242 {
djmeyers 0:06ee5f8a484a 243 UNITY_OUTPUT_CHAR('0');
djmeyers 0:06ee5f8a484a 244 }
djmeyers 0:06ee5f8a484a 245 }
djmeyers 0:06ee5f8a484a 246 else
djmeyers 0:06ee5f8a484a 247 {
djmeyers 0:06ee5f8a484a 248 UNITY_OUTPUT_CHAR('X');
djmeyers 0:06ee5f8a484a 249 }
djmeyers 0:06ee5f8a484a 250 current_bit = current_bit >> 1;
djmeyers 0:06ee5f8a484a 251 }
djmeyers 0:06ee5f8a484a 252 }
djmeyers 0:06ee5f8a484a 253
djmeyers 0:06ee5f8a484a 254 /*-----------------------------------------------*/
djmeyers 0:06ee5f8a484a 255 #ifdef UNITY_FLOAT_VERBOSE
djmeyers 0:06ee5f8a484a 256 #include <stdio.h>
djmeyers 0:06ee5f8a484a 257
djmeyers 0:06ee5f8a484a 258 #ifndef UNITY_VERBOSE_NUMBER_MAX_LENGTH
djmeyers 0:06ee5f8a484a 259 # ifdef UNITY_DOUBLE_VERBOSE
djmeyers 0:06ee5f8a484a 260 # define UNITY_VERBOSE_NUMBER_MAX_LENGTH 317
djmeyers 0:06ee5f8a484a 261 # else
djmeyers 0:06ee5f8a484a 262 # define UNITY_VERBOSE_NUMBER_MAX_LENGTH 47
djmeyers 0:06ee5f8a484a 263 # endif
djmeyers 0:06ee5f8a484a 264 #endif
djmeyers 0:06ee5f8a484a 265
djmeyers 0:06ee5f8a484a 266 void UnityPrintFloat(_UF number)
djmeyers 0:06ee5f8a484a 267 {
djmeyers 0:06ee5f8a484a 268 char TempBuffer[UNITY_VERBOSE_NUMBER_MAX_LENGTH + 1];
djmeyers 0:06ee5f8a484a 269 snprintf(TempBuffer, sizeof(TempBuffer), "%.6f", number);
djmeyers 0:06ee5f8a484a 270 UnityPrint(TempBuffer);
djmeyers 0:06ee5f8a484a 271 }
djmeyers 0:06ee5f8a484a 272 #endif
djmeyers 0:06ee5f8a484a 273
djmeyers 0:06ee5f8a484a 274 /*-----------------------------------------------*/
djmeyers 0:06ee5f8a484a 275
djmeyers 0:06ee5f8a484a 276 void UnityPrintFail(void);
djmeyers 0:06ee5f8a484a 277 void UnityPrintFail(void)
djmeyers 0:06ee5f8a484a 278 {
djmeyers 0:06ee5f8a484a 279 UnityPrint(UnityStrFail);
djmeyers 0:06ee5f8a484a 280 }
djmeyers 0:06ee5f8a484a 281
djmeyers 0:06ee5f8a484a 282 void UnityPrintOk(void);
djmeyers 0:06ee5f8a484a 283 void UnityPrintOk(void)
djmeyers 0:06ee5f8a484a 284 {
djmeyers 0:06ee5f8a484a 285 UnityPrint(UnityStrOk);
djmeyers 0:06ee5f8a484a 286 }
djmeyers 0:06ee5f8a484a 287
djmeyers 0:06ee5f8a484a 288 /*-----------------------------------------------*/
djmeyers 0:06ee5f8a484a 289 static void UnityTestResultsBegin(const char* file, const UNITY_LINE_TYPE line);
djmeyers 0:06ee5f8a484a 290 static void UnityTestResultsBegin(const char* file, const UNITY_LINE_TYPE line)
djmeyers 0:06ee5f8a484a 291 {
djmeyers 0:06ee5f8a484a 292 #ifndef UNITY_FIXTURES
djmeyers 0:06ee5f8a484a 293 UnityPrint(file);
djmeyers 0:06ee5f8a484a 294 UNITY_OUTPUT_CHAR(':');
djmeyers 0:06ee5f8a484a 295 UnityPrintNumber((_U_SINT)line);
djmeyers 0:06ee5f8a484a 296 UNITY_OUTPUT_CHAR(':');
djmeyers 0:06ee5f8a484a 297 UnityPrint(Unity.CurrentTestName);
djmeyers 0:06ee5f8a484a 298 UNITY_OUTPUT_CHAR(':');
djmeyers 0:06ee5f8a484a 299 #else
djmeyers 0:06ee5f8a484a 300 UNITY_UNUSED(file);
djmeyers 0:06ee5f8a484a 301 UNITY_UNUSED(line);
djmeyers 0:06ee5f8a484a 302 #endif
djmeyers 0:06ee5f8a484a 303 }
djmeyers 0:06ee5f8a484a 304
djmeyers 0:06ee5f8a484a 305 /* SA_PATCH: Make failures more noticable. */
djmeyers 0:06ee5f8a484a 306 static void UnityPrintVisibleFailure(void);
djmeyers 0:06ee5f8a484a 307 static void UnityPrintVisibleFailure(void)
djmeyers 0:06ee5f8a484a 308 {
djmeyers 0:06ee5f8a484a 309 UNITY_OUTPUT_CHAR('\n');
djmeyers 0:06ee5f8a484a 310 UnityPrint("===!!!===> ");
djmeyers 0:06ee5f8a484a 311 /* SA_PATCH: Output results using easy to parse tags. */
djmeyers 0:06ee5f8a484a 312 UnityPrint(UNITY_RESULTS_TAGS_RESULT_START);
djmeyers 0:06ee5f8a484a 313 UnityPrint(UnityStrFail);
djmeyers 0:06ee5f8a484a 314 /* SA_PATCH: Output results using easy to parse tags. */
djmeyers 0:06ee5f8a484a 315 UnityPrint(UNITY_RESULTS_TAGS_RESULT_END);
djmeyers 0:06ee5f8a484a 316 UnityPrint(" <===!!!===");
djmeyers 0:06ee5f8a484a 317 }
djmeyers 0:06ee5f8a484a 318 /*-----------------------------------------------*/
djmeyers 0:06ee5f8a484a 319 static void UnityTestResultsFailBegin(const UNITY_LINE_TYPE line);
djmeyers 0:06ee5f8a484a 320 static void UnityTestResultsFailBegin(const UNITY_LINE_TYPE line)
djmeyers 0:06ee5f8a484a 321 {
djmeyers 0:06ee5f8a484a 322 #ifndef UNITY_FIXTURES
djmeyers 0:06ee5f8a484a 323 UnityTestResultsBegin(Unity.TestFile, line);
djmeyers 0:06ee5f8a484a 324 #else
djmeyers 0:06ee5f8a484a 325 UNITY_UNUSED(line);
djmeyers 0:06ee5f8a484a 326 #endif
djmeyers 0:06ee5f8a484a 327 /* SA_PATCH: Make failures more noticable. */
djmeyers 0:06ee5f8a484a 328 UnityPrintVisibleFailure();
djmeyers 0:06ee5f8a484a 329 //UnityPrint(UnityStrFail);
djmeyers 0:06ee5f8a484a 330 UNITY_OUTPUT_CHAR(':');
djmeyers 0:06ee5f8a484a 331 }
djmeyers 0:06ee5f8a484a 332
djmeyers 0:06ee5f8a484a 333 /*-----------------------------------------------*/
djmeyers 0:06ee5f8a484a 334 void UnityConcludeTest(void)
djmeyers 0:06ee5f8a484a 335 {
djmeyers 0:06ee5f8a484a 336 if (Unity.CurrentTestIgnored)
djmeyers 0:06ee5f8a484a 337 {
djmeyers 0:06ee5f8a484a 338 Unity.TestIgnores++;
djmeyers 0:06ee5f8a484a 339 }
djmeyers 0:06ee5f8a484a 340 else if (!Unity.CurrentTestFailed)
djmeyers 0:06ee5f8a484a 341 {
djmeyers 0:06ee5f8a484a 342 UnityTestResultsBegin(Unity.TestFile, Unity.CurrentTestLineNumber);
djmeyers 0:06ee5f8a484a 343 UnityPrint(UnityStrPass);
djmeyers 0:06ee5f8a484a 344 }
djmeyers 0:06ee5f8a484a 345 else
djmeyers 0:06ee5f8a484a 346 {
djmeyers 0:06ee5f8a484a 347 Unity.TestFailures++;
djmeyers 0:06ee5f8a484a 348 }
djmeyers 0:06ee5f8a484a 349
djmeyers 0:06ee5f8a484a 350 Unity.CurrentTestFailed = 0;
djmeyers 0:06ee5f8a484a 351 Unity.CurrentTestIgnored = 0;
djmeyers 0:06ee5f8a484a 352 UNITY_PRINT_EOL();
djmeyers 0:06ee5f8a484a 353 UNITY_FLUSH_CALL();
djmeyers 0:06ee5f8a484a 354 }
djmeyers 0:06ee5f8a484a 355
djmeyers 0:06ee5f8a484a 356 /*-----------------------------------------------*/
djmeyers 0:06ee5f8a484a 357 static void UnityAddMsgIfSpecified(const char* msg);
djmeyers 0:06ee5f8a484a 358 static void UnityAddMsgIfSpecified(const char* msg)
djmeyers 0:06ee5f8a484a 359 {
djmeyers 0:06ee5f8a484a 360 if (msg)
djmeyers 0:06ee5f8a484a 361 {
djmeyers 0:06ee5f8a484a 362 UnityPrint(UnityStrSpacer);
djmeyers 0:06ee5f8a484a 363 #ifndef UNITY_EXCLUDE_DETAILS
djmeyers 0:06ee5f8a484a 364 if (Unity.CurrentDetail1)
djmeyers 0:06ee5f8a484a 365 {
djmeyers 0:06ee5f8a484a 366 UnityPrint(UnityStrDetail1Name);
djmeyers 0:06ee5f8a484a 367 UnityPrint(Unity.CurrentDetail1);
djmeyers 0:06ee5f8a484a 368 if (Unity.CurrentDetail2)
djmeyers 0:06ee5f8a484a 369 {
djmeyers 0:06ee5f8a484a 370 UnityPrint(UnityStrDetail2Name);
djmeyers 0:06ee5f8a484a 371 UnityPrint(Unity.CurrentDetail2);
djmeyers 0:06ee5f8a484a 372 }
djmeyers 0:06ee5f8a484a 373 UnityPrint(UnityStrSpacer);
djmeyers 0:06ee5f8a484a 374 }
djmeyers 0:06ee5f8a484a 375 #endif
djmeyers 0:06ee5f8a484a 376 UnityPrint(msg);
djmeyers 0:06ee5f8a484a 377 }
djmeyers 0:06ee5f8a484a 378 }
djmeyers 0:06ee5f8a484a 379
djmeyers 0:06ee5f8a484a 380 /*-----------------------------------------------*/
djmeyers 0:06ee5f8a484a 381 static void UnityPrintExpectedAndActualStrings(const char* expected, const char* actual);
djmeyers 0:06ee5f8a484a 382 static void UnityPrintExpectedAndActualStrings(const char* expected, const char* actual)
djmeyers 0:06ee5f8a484a 383 {
djmeyers 0:06ee5f8a484a 384 UnityPrint(UnityStrExpected);
djmeyers 0:06ee5f8a484a 385 if (expected != NULL)
djmeyers 0:06ee5f8a484a 386 {
djmeyers 0:06ee5f8a484a 387 UNITY_OUTPUT_CHAR('\'');
djmeyers 0:06ee5f8a484a 388 UnityPrint(expected);
djmeyers 0:06ee5f8a484a 389 UNITY_OUTPUT_CHAR('\'');
djmeyers 0:06ee5f8a484a 390 }
djmeyers 0:06ee5f8a484a 391 else
djmeyers 0:06ee5f8a484a 392 {
djmeyers 0:06ee5f8a484a 393 UnityPrint(UnityStrNull);
djmeyers 0:06ee5f8a484a 394 }
djmeyers 0:06ee5f8a484a 395 UnityPrint(UnityStrWas);
djmeyers 0:06ee5f8a484a 396 if (actual != NULL)
djmeyers 0:06ee5f8a484a 397 {
djmeyers 0:06ee5f8a484a 398 UNITY_OUTPUT_CHAR('\'');
djmeyers 0:06ee5f8a484a 399 UnityPrint(actual);
djmeyers 0:06ee5f8a484a 400 UNITY_OUTPUT_CHAR('\'');
djmeyers 0:06ee5f8a484a 401 }
djmeyers 0:06ee5f8a484a 402 else
djmeyers 0:06ee5f8a484a 403 {
djmeyers 0:06ee5f8a484a 404 UnityPrint(UnityStrNull);
djmeyers 0:06ee5f8a484a 405 }
djmeyers 0:06ee5f8a484a 406 }
djmeyers 0:06ee5f8a484a 407
djmeyers 0:06ee5f8a484a 408 /*-----------------------------------------------*/
djmeyers 0:06ee5f8a484a 409 static void UnityPrintExpectedAndActualStringsLen(const char* expected, const char* actual, const _UU32 length)
djmeyers 0:06ee5f8a484a 410 {
djmeyers 0:06ee5f8a484a 411 UnityPrint(UnityStrExpected);
djmeyers 0:06ee5f8a484a 412 if (expected != NULL)
djmeyers 0:06ee5f8a484a 413 {
djmeyers 0:06ee5f8a484a 414 UNITY_OUTPUT_CHAR('\'');
djmeyers 0:06ee5f8a484a 415 UnityPrintLen(expected, length);
djmeyers 0:06ee5f8a484a 416 UNITY_OUTPUT_CHAR('\'');
djmeyers 0:06ee5f8a484a 417 }
djmeyers 0:06ee5f8a484a 418 else
djmeyers 0:06ee5f8a484a 419 {
djmeyers 0:06ee5f8a484a 420 UnityPrint(UnityStrNull);
djmeyers 0:06ee5f8a484a 421 }
djmeyers 0:06ee5f8a484a 422 UnityPrint(UnityStrWas);
djmeyers 0:06ee5f8a484a 423 if (actual != NULL)
djmeyers 0:06ee5f8a484a 424 {
djmeyers 0:06ee5f8a484a 425 UNITY_OUTPUT_CHAR('\'');
djmeyers 0:06ee5f8a484a 426 UnityPrintLen(actual, length);
djmeyers 0:06ee5f8a484a 427 UNITY_OUTPUT_CHAR('\'');
djmeyers 0:06ee5f8a484a 428 }
djmeyers 0:06ee5f8a484a 429 else
djmeyers 0:06ee5f8a484a 430 {
djmeyers 0:06ee5f8a484a 431 UnityPrint(UnityStrNull);
djmeyers 0:06ee5f8a484a 432 }
djmeyers 0:06ee5f8a484a 433 }
djmeyers 0:06ee5f8a484a 434
djmeyers 0:06ee5f8a484a 435
djmeyers 0:06ee5f8a484a 436
djmeyers 0:06ee5f8a484a 437 /*-----------------------------------------------
djmeyers 0:06ee5f8a484a 438 * Assertion & Control Helpers
djmeyers 0:06ee5f8a484a 439 *-----------------------------------------------*/
djmeyers 0:06ee5f8a484a 440
djmeyers 0:06ee5f8a484a 441 static int UnityCheckArraysForNull(UNITY_INTERNAL_PTR expected, UNITY_INTERNAL_PTR actual, const UNITY_LINE_TYPE lineNumber, const char* msg)
djmeyers 0:06ee5f8a484a 442 {
djmeyers 0:06ee5f8a484a 443 /* return true if they are both NULL */
djmeyers 0:06ee5f8a484a 444 if ((expected == NULL) && (actual == NULL))
djmeyers 0:06ee5f8a484a 445 return 1;
djmeyers 0:06ee5f8a484a 446
djmeyers 0:06ee5f8a484a 447 /* throw error if just expected is NULL */
djmeyers 0:06ee5f8a484a 448 if (expected == NULL)
djmeyers 0:06ee5f8a484a 449 {
djmeyers 0:06ee5f8a484a 450 UnityTestResultsFailBegin(lineNumber);
djmeyers 0:06ee5f8a484a 451 UnityPrint(UnityStrNullPointerForExpected);
djmeyers 0:06ee5f8a484a 452 UnityAddMsgIfSpecified(msg);
djmeyers 0:06ee5f8a484a 453 UNITY_FAIL_AND_BAIL;
djmeyers 0:06ee5f8a484a 454 }
djmeyers 0:06ee5f8a484a 455
djmeyers 0:06ee5f8a484a 456 /* throw error if just actual is NULL */
djmeyers 0:06ee5f8a484a 457 if (actual == NULL)
djmeyers 0:06ee5f8a484a 458 {
djmeyers 0:06ee5f8a484a 459 UnityTestResultsFailBegin(lineNumber);
djmeyers 0:06ee5f8a484a 460 UnityPrint(UnityStrNullPointerForActual);
djmeyers 0:06ee5f8a484a 461 UnityAddMsgIfSpecified(msg);
djmeyers 0:06ee5f8a484a 462 UNITY_FAIL_AND_BAIL;
djmeyers 0:06ee5f8a484a 463 }
djmeyers 0:06ee5f8a484a 464
djmeyers 0:06ee5f8a484a 465 /* return false if neither is NULL */
djmeyers 0:06ee5f8a484a 466 return 0;
djmeyers 0:06ee5f8a484a 467 }
djmeyers 0:06ee5f8a484a 468
djmeyers 0:06ee5f8a484a 469 /*-----------------------------------------------
djmeyers 0:06ee5f8a484a 470 * Assertion Functions
djmeyers 0:06ee5f8a484a 471 *-----------------------------------------------*/
djmeyers 0:06ee5f8a484a 472
djmeyers 0:06ee5f8a484a 473 void UnityAssertBits(const _U_SINT mask,
djmeyers 0:06ee5f8a484a 474 const _U_SINT expected,
djmeyers 0:06ee5f8a484a 475 const _U_SINT actual,
djmeyers 0:06ee5f8a484a 476 const char* msg,
djmeyers 0:06ee5f8a484a 477 const UNITY_LINE_TYPE lineNumber)
djmeyers 0:06ee5f8a484a 478 {
djmeyers 0:06ee5f8a484a 479 UNITY_SKIP_EXECUTION;
djmeyers 0:06ee5f8a484a 480
djmeyers 0:06ee5f8a484a 481 if ((mask & expected) != (mask & actual))
djmeyers 0:06ee5f8a484a 482 {
djmeyers 0:06ee5f8a484a 483 UnityTestResultsFailBegin(lineNumber);
djmeyers 0:06ee5f8a484a 484 UnityPrint(UnityStrExpected);
djmeyers 0:06ee5f8a484a 485 UnityPrintMask((_U_UINT)mask, (_U_UINT)expected);
djmeyers 0:06ee5f8a484a 486 UnityPrint(UnityStrWas);
djmeyers 0:06ee5f8a484a 487 UnityPrintMask((_U_UINT)mask, (_U_UINT)actual);
djmeyers 0:06ee5f8a484a 488 UnityAddMsgIfSpecified(msg);
djmeyers 0:06ee5f8a484a 489 UNITY_FAIL_AND_BAIL;
djmeyers 0:06ee5f8a484a 490 }
djmeyers 0:06ee5f8a484a 491 }
djmeyers 0:06ee5f8a484a 492
djmeyers 0:06ee5f8a484a 493 /*-----------------------------------------------*/
djmeyers 0:06ee5f8a484a 494 void UnityAssertEqualNumber(const _U_SINT expected,
djmeyers 0:06ee5f8a484a 495 const _U_SINT actual,
djmeyers 0:06ee5f8a484a 496 const char* msg,
djmeyers 0:06ee5f8a484a 497 const UNITY_LINE_TYPE lineNumber,
djmeyers 0:06ee5f8a484a 498 const UNITY_DISPLAY_STYLE_T style)
djmeyers 0:06ee5f8a484a 499 {
djmeyers 0:06ee5f8a484a 500 UNITY_SKIP_EXECUTION;
djmeyers 0:06ee5f8a484a 501
djmeyers 0:06ee5f8a484a 502 if (expected != actual)
djmeyers 0:06ee5f8a484a 503 {
djmeyers 0:06ee5f8a484a 504 UnityTestResultsFailBegin(lineNumber);
djmeyers 0:06ee5f8a484a 505 UnityPrint(UnityStrExpected);
djmeyers 0:06ee5f8a484a 506 UnityPrintNumberByStyle(expected, style);
djmeyers 0:06ee5f8a484a 507 UnityPrint(UnityStrWas);
djmeyers 0:06ee5f8a484a 508 UnityPrintNumberByStyle(actual, style);
djmeyers 0:06ee5f8a484a 509 UnityAddMsgIfSpecified(msg);
djmeyers 0:06ee5f8a484a 510 UNITY_FAIL_AND_BAIL;
djmeyers 0:06ee5f8a484a 511 }
djmeyers 0:06ee5f8a484a 512 }
djmeyers 0:06ee5f8a484a 513
djmeyers 0:06ee5f8a484a 514 #define UnityPrintPointlessAndBail() \
djmeyers 0:06ee5f8a484a 515 { \
djmeyers 0:06ee5f8a484a 516 UnityTestResultsFailBegin(lineNumber); \
djmeyers 0:06ee5f8a484a 517 UnityPrint(UnityStrPointless); \
djmeyers 0:06ee5f8a484a 518 UnityAddMsgIfSpecified(msg); \
djmeyers 0:06ee5f8a484a 519 UNITY_FAIL_AND_BAIL; }
djmeyers 0:06ee5f8a484a 520
djmeyers 0:06ee5f8a484a 521 /*-----------------------------------------------*/
djmeyers 0:06ee5f8a484a 522 void UnityAssertEqualIntArray(UNITY_INTERNAL_PTR expected,
djmeyers 0:06ee5f8a484a 523 UNITY_INTERNAL_PTR actual,
djmeyers 0:06ee5f8a484a 524 const _UU32 num_elements,
djmeyers 0:06ee5f8a484a 525 const char* msg,
djmeyers 0:06ee5f8a484a 526 const UNITY_LINE_TYPE lineNumber,
djmeyers 0:06ee5f8a484a 527 const UNITY_DISPLAY_STYLE_T style)
djmeyers 0:06ee5f8a484a 528 {
djmeyers 0:06ee5f8a484a 529 _UU32 elements = num_elements;
djmeyers 0:06ee5f8a484a 530 UNITY_INTERNAL_PTR ptr_exp = (UNITY_INTERNAL_PTR)expected;
djmeyers 0:06ee5f8a484a 531 UNITY_INTERNAL_PTR ptr_act = (UNITY_INTERNAL_PTR)actual;
djmeyers 0:06ee5f8a484a 532
djmeyers 0:06ee5f8a484a 533 UNITY_SKIP_EXECUTION;
djmeyers 0:06ee5f8a484a 534
djmeyers 0:06ee5f8a484a 535 if (elements == 0)
djmeyers 0:06ee5f8a484a 536 {
djmeyers 0:06ee5f8a484a 537 UnityPrintPointlessAndBail();
djmeyers 0:06ee5f8a484a 538 }
djmeyers 0:06ee5f8a484a 539
djmeyers 0:06ee5f8a484a 540 if (UnityCheckArraysForNull((UNITY_INTERNAL_PTR)expected, (UNITY_INTERNAL_PTR)actual, lineNumber, msg) == 1)
djmeyers 0:06ee5f8a484a 541 return;
djmeyers 0:06ee5f8a484a 542
djmeyers 0:06ee5f8a484a 543 /* If style is UNITY_DISPLAY_STYLE_INT, we'll fall into the default case rather than the INT16 or INT32 (etc) case
djmeyers 0:06ee5f8a484a 544 * as UNITY_DISPLAY_STYLE_INT includes a flag for UNITY_DISPLAY_RANGE_AUTO, which the width-specific
djmeyers 0:06ee5f8a484a 545 * variants do not. Therefore remove this flag. */
djmeyers 0:06ee5f8a484a 546 switch(style & (UNITY_DISPLAY_STYLE_T)(~UNITY_DISPLAY_RANGE_AUTO))
djmeyers 0:06ee5f8a484a 547 {
djmeyers 0:06ee5f8a484a 548 case UNITY_DISPLAY_STYLE_HEX8:
djmeyers 0:06ee5f8a484a 549 case UNITY_DISPLAY_STYLE_INT8:
djmeyers 0:06ee5f8a484a 550 case UNITY_DISPLAY_STYLE_UINT8:
djmeyers 0:06ee5f8a484a 551 while (elements--)
djmeyers 0:06ee5f8a484a 552 {
djmeyers 0:06ee5f8a484a 553 if (*(UNITY_PTR_ATTRIBUTE const _US8*)ptr_exp != *(UNITY_PTR_ATTRIBUTE const _US8*)ptr_act)
djmeyers 0:06ee5f8a484a 554 {
djmeyers 0:06ee5f8a484a 555 UnityTestResultsFailBegin(lineNumber);
djmeyers 0:06ee5f8a484a 556 UnityPrint(UnityStrElement);
djmeyers 0:06ee5f8a484a 557 UnityPrintNumberUnsigned(num_elements - elements - 1);
djmeyers 0:06ee5f8a484a 558 UnityPrint(UnityStrExpected);
djmeyers 0:06ee5f8a484a 559 UnityPrintNumberByStyle(*(UNITY_PTR_ATTRIBUTE const _US8*)ptr_exp, style);
djmeyers 0:06ee5f8a484a 560 UnityPrint(UnityStrWas);
djmeyers 0:06ee5f8a484a 561 UnityPrintNumberByStyle(*(UNITY_PTR_ATTRIBUTE const _US8*)ptr_act, style);
djmeyers 0:06ee5f8a484a 562 UnityAddMsgIfSpecified(msg);
djmeyers 0:06ee5f8a484a 563 UNITY_FAIL_AND_BAIL;
djmeyers 0:06ee5f8a484a 564 }
djmeyers 0:06ee5f8a484a 565 ptr_exp = (UNITY_INTERNAL_PTR)((_UP)ptr_exp + 1);
djmeyers 0:06ee5f8a484a 566 ptr_act = (UNITY_INTERNAL_PTR)((_UP)ptr_act + 1);
djmeyers 0:06ee5f8a484a 567 }
djmeyers 0:06ee5f8a484a 568 break;
djmeyers 0:06ee5f8a484a 569 case UNITY_DISPLAY_STYLE_HEX16:
djmeyers 0:06ee5f8a484a 570 case UNITY_DISPLAY_STYLE_INT16:
djmeyers 0:06ee5f8a484a 571 case UNITY_DISPLAY_STYLE_UINT16:
djmeyers 0:06ee5f8a484a 572 while (elements--)
djmeyers 0:06ee5f8a484a 573 {
djmeyers 0:06ee5f8a484a 574 if (*(UNITY_PTR_ATTRIBUTE const _US16*)ptr_exp != *(UNITY_PTR_ATTRIBUTE const _US16*)ptr_act)
djmeyers 0:06ee5f8a484a 575 {
djmeyers 0:06ee5f8a484a 576 UnityTestResultsFailBegin(lineNumber);
djmeyers 0:06ee5f8a484a 577 UnityPrint(UnityStrElement);
djmeyers 0:06ee5f8a484a 578 UnityPrintNumberUnsigned(num_elements - elements - 1);
djmeyers 0:06ee5f8a484a 579 UnityPrint(UnityStrExpected);
djmeyers 0:06ee5f8a484a 580 UnityPrintNumberByStyle(*(UNITY_PTR_ATTRIBUTE const _US16*)ptr_exp, style);
djmeyers 0:06ee5f8a484a 581 UnityPrint(UnityStrWas);
djmeyers 0:06ee5f8a484a 582 UnityPrintNumberByStyle(*(UNITY_PTR_ATTRIBUTE const _US16*)ptr_act, style);
djmeyers 0:06ee5f8a484a 583 UnityAddMsgIfSpecified(msg);
djmeyers 0:06ee5f8a484a 584 UNITY_FAIL_AND_BAIL;
djmeyers 0:06ee5f8a484a 585 }
djmeyers 0:06ee5f8a484a 586 ptr_exp = (UNITY_INTERNAL_PTR)((_UP)ptr_exp + 2);
djmeyers 0:06ee5f8a484a 587 ptr_act = (UNITY_INTERNAL_PTR)((_UP)ptr_act + 2);
djmeyers 0:06ee5f8a484a 588 }
djmeyers 0:06ee5f8a484a 589 break;
djmeyers 0:06ee5f8a484a 590 #ifdef UNITY_SUPPORT_64
djmeyers 0:06ee5f8a484a 591 case UNITY_DISPLAY_STYLE_HEX64:
djmeyers 0:06ee5f8a484a 592 case UNITY_DISPLAY_STYLE_INT64:
djmeyers 0:06ee5f8a484a 593 case UNITY_DISPLAY_STYLE_UINT64:
djmeyers 0:06ee5f8a484a 594 while (elements--)
djmeyers 0:06ee5f8a484a 595 {
djmeyers 0:06ee5f8a484a 596 if (*(UNITY_PTR_ATTRIBUTE const _US64*)ptr_exp != *(UNITY_PTR_ATTRIBUTE const _US64*)ptr_act)
djmeyers 0:06ee5f8a484a 597 {
djmeyers 0:06ee5f8a484a 598 UnityTestResultsFailBegin(lineNumber);
djmeyers 0:06ee5f8a484a 599 UnityPrint(UnityStrElement);
djmeyers 0:06ee5f8a484a 600 UnityPrintNumberUnsigned(num_elements - elements - 1);
djmeyers 0:06ee5f8a484a 601 UnityPrint(UnityStrExpected);
djmeyers 0:06ee5f8a484a 602 UnityPrintNumberByStyle(*(UNITY_PTR_ATTRIBUTE const _US64*)ptr_exp, style);
djmeyers 0:06ee5f8a484a 603 UnityPrint(UnityStrWas);
djmeyers 0:06ee5f8a484a 604 UnityPrintNumberByStyle(*(UNITY_PTR_ATTRIBUTE const _US64*)ptr_act, style);
djmeyers 0:06ee5f8a484a 605 UnityAddMsgIfSpecified(msg);
djmeyers 0:06ee5f8a484a 606 UNITY_FAIL_AND_BAIL;
djmeyers 0:06ee5f8a484a 607 }
djmeyers 0:06ee5f8a484a 608 ptr_exp = (UNITY_INTERNAL_PTR)((_UP)ptr_exp + 8);
djmeyers 0:06ee5f8a484a 609 ptr_act = (UNITY_INTERNAL_PTR)((_UP)ptr_act + 8);
djmeyers 0:06ee5f8a484a 610 }
djmeyers 0:06ee5f8a484a 611 break;
djmeyers 0:06ee5f8a484a 612 #endif
djmeyers 0:06ee5f8a484a 613 default:
djmeyers 0:06ee5f8a484a 614 while (elements--)
djmeyers 0:06ee5f8a484a 615 {
djmeyers 0:06ee5f8a484a 616 if (*(UNITY_PTR_ATTRIBUTE const _US32*)ptr_exp != *(UNITY_PTR_ATTRIBUTE const _US32*)ptr_act)
djmeyers 0:06ee5f8a484a 617 {
djmeyers 0:06ee5f8a484a 618 UnityTestResultsFailBegin(lineNumber);
djmeyers 0:06ee5f8a484a 619 UnityPrint(UnityStrElement);
djmeyers 0:06ee5f8a484a 620 UnityPrintNumberUnsigned(num_elements - elements - 1);
djmeyers 0:06ee5f8a484a 621 UnityPrint(UnityStrExpected);
djmeyers 0:06ee5f8a484a 622 UnityPrintNumberByStyle(*(UNITY_PTR_ATTRIBUTE const _US32*)ptr_exp, style);
djmeyers 0:06ee5f8a484a 623 UnityPrint(UnityStrWas);
djmeyers 0:06ee5f8a484a 624 UnityPrintNumberByStyle(*(UNITY_PTR_ATTRIBUTE const _US32*)ptr_act, style);
djmeyers 0:06ee5f8a484a 625 UnityAddMsgIfSpecified(msg);
djmeyers 0:06ee5f8a484a 626 UNITY_FAIL_AND_BAIL;
djmeyers 0:06ee5f8a484a 627 }
djmeyers 0:06ee5f8a484a 628 ptr_exp = (UNITY_INTERNAL_PTR)((_UP)ptr_exp + 4);
djmeyers 0:06ee5f8a484a 629 ptr_act = (UNITY_INTERNAL_PTR)((_UP)ptr_act + 4);
djmeyers 0:06ee5f8a484a 630 }
djmeyers 0:06ee5f8a484a 631 break;
djmeyers 0:06ee5f8a484a 632 }
djmeyers 0:06ee5f8a484a 633 }
djmeyers 0:06ee5f8a484a 634
djmeyers 0:06ee5f8a484a 635 /*-----------------------------------------------*/
djmeyers 0:06ee5f8a484a 636 #ifndef UNITY_EXCLUDE_FLOAT
djmeyers 0:06ee5f8a484a 637 void UnityAssertEqualFloatArray(UNITY_PTR_ATTRIBUTE const _UF* expected,
djmeyers 0:06ee5f8a484a 638 UNITY_PTR_ATTRIBUTE const _UF* actual,
djmeyers 0:06ee5f8a484a 639 const _UU32 num_elements,
djmeyers 0:06ee5f8a484a 640 const char* msg,
djmeyers 0:06ee5f8a484a 641 const UNITY_LINE_TYPE lineNumber)
djmeyers 0:06ee5f8a484a 642 {
djmeyers 0:06ee5f8a484a 643 _UU32 elements = num_elements;
djmeyers 0:06ee5f8a484a 644 UNITY_PTR_ATTRIBUTE const _UF* ptr_expected = expected;
djmeyers 0:06ee5f8a484a 645 UNITY_PTR_ATTRIBUTE const _UF* ptr_actual = actual;
djmeyers 0:06ee5f8a484a 646 _UF diff, tol;
djmeyers 0:06ee5f8a484a 647
djmeyers 0:06ee5f8a484a 648 UNITY_SKIP_EXECUTION;
djmeyers 0:06ee5f8a484a 649
djmeyers 0:06ee5f8a484a 650 if (elements == 0)
djmeyers 0:06ee5f8a484a 651 {
djmeyers 0:06ee5f8a484a 652 UnityPrintPointlessAndBail();
djmeyers 0:06ee5f8a484a 653 }
djmeyers 0:06ee5f8a484a 654
djmeyers 0:06ee5f8a484a 655 if (UnityCheckArraysForNull((UNITY_INTERNAL_PTR)expected, (UNITY_INTERNAL_PTR)actual, lineNumber, msg) == 1)
djmeyers 0:06ee5f8a484a 656 return;
djmeyers 0:06ee5f8a484a 657
djmeyers 0:06ee5f8a484a 658 while (elements--)
djmeyers 0:06ee5f8a484a 659 {
djmeyers 0:06ee5f8a484a 660 diff = *ptr_expected - *ptr_actual;
djmeyers 0:06ee5f8a484a 661 if (diff < 0.0f)
djmeyers 0:06ee5f8a484a 662 diff = 0.0f - diff;
djmeyers 0:06ee5f8a484a 663 tol = UNITY_FLOAT_PRECISION * *ptr_expected;
djmeyers 0:06ee5f8a484a 664 if (tol < 0.0f)
djmeyers 0:06ee5f8a484a 665 tol = 0.0f - tol;
djmeyers 0:06ee5f8a484a 666
djmeyers 0:06ee5f8a484a 667 /* This first part of this condition will catch any NaN or Infinite values */
djmeyers 0:06ee5f8a484a 668 if (isnan(diff) || isinf(diff) || (diff > tol))
djmeyers 0:06ee5f8a484a 669 {
djmeyers 0:06ee5f8a484a 670 UnityTestResultsFailBegin(lineNumber);
djmeyers 0:06ee5f8a484a 671 UnityPrint(UnityStrElement);
djmeyers 0:06ee5f8a484a 672 UnityPrintNumberUnsigned(num_elements - elements - 1);
djmeyers 0:06ee5f8a484a 673 #ifdef UNITY_FLOAT_VERBOSE
djmeyers 0:06ee5f8a484a 674 UnityPrint(UnityStrExpected);
djmeyers 0:06ee5f8a484a 675 UnityPrintFloat(*ptr_expected);
djmeyers 0:06ee5f8a484a 676 UnityPrint(UnityStrWas);
djmeyers 0:06ee5f8a484a 677 UnityPrintFloat(*ptr_actual);
djmeyers 0:06ee5f8a484a 678 #else
djmeyers 0:06ee5f8a484a 679 UnityPrint(UnityStrDelta);
djmeyers 0:06ee5f8a484a 680 #endif
djmeyers 0:06ee5f8a484a 681 UnityAddMsgIfSpecified(msg);
djmeyers 0:06ee5f8a484a 682 UNITY_FAIL_AND_BAIL;
djmeyers 0:06ee5f8a484a 683 }
djmeyers 0:06ee5f8a484a 684 ptr_expected++;
djmeyers 0:06ee5f8a484a 685 ptr_actual++;
djmeyers 0:06ee5f8a484a 686 }
djmeyers 0:06ee5f8a484a 687 }
djmeyers 0:06ee5f8a484a 688
djmeyers 0:06ee5f8a484a 689 /*-----------------------------------------------*/
djmeyers 0:06ee5f8a484a 690 void UnityAssertFloatsWithin(const _UF delta,
djmeyers 0:06ee5f8a484a 691 const _UF expected,
djmeyers 0:06ee5f8a484a 692 const _UF actual,
djmeyers 0:06ee5f8a484a 693 const char* msg,
djmeyers 0:06ee5f8a484a 694 const UNITY_LINE_TYPE lineNumber)
djmeyers 0:06ee5f8a484a 695 {
djmeyers 0:06ee5f8a484a 696 _UF diff = actual - expected;
djmeyers 0:06ee5f8a484a 697 _UF pos_delta = delta;
djmeyers 0:06ee5f8a484a 698
djmeyers 0:06ee5f8a484a 699 UNITY_SKIP_EXECUTION;
djmeyers 0:06ee5f8a484a 700
djmeyers 0:06ee5f8a484a 701 if (diff < 0.0f)
djmeyers 0:06ee5f8a484a 702 {
djmeyers 0:06ee5f8a484a 703 diff = 0.0f - diff;
djmeyers 0:06ee5f8a484a 704 }
djmeyers 0:06ee5f8a484a 705 if (pos_delta < 0.0f)
djmeyers 0:06ee5f8a484a 706 {
djmeyers 0:06ee5f8a484a 707 pos_delta = 0.0f - pos_delta;
djmeyers 0:06ee5f8a484a 708 }
djmeyers 0:06ee5f8a484a 709
djmeyers 0:06ee5f8a484a 710 /* This first part of this condition will catch any NaN or Infinite values */
djmeyers 0:06ee5f8a484a 711 if (isnan(diff) || isinf(diff) || (pos_delta < diff))
djmeyers 0:06ee5f8a484a 712 {
djmeyers 0:06ee5f8a484a 713 UnityTestResultsFailBegin(lineNumber);
djmeyers 0:06ee5f8a484a 714 #ifdef UNITY_FLOAT_VERBOSE
djmeyers 0:06ee5f8a484a 715 UnityPrint(UnityStrExpected);
djmeyers 0:06ee5f8a484a 716 UnityPrintFloat(expected);
djmeyers 0:06ee5f8a484a 717 UnityPrint(UnityStrWas);
djmeyers 0:06ee5f8a484a 718 UnityPrintFloat(actual);
djmeyers 0:06ee5f8a484a 719 #else
djmeyers 0:06ee5f8a484a 720 UnityPrint(UnityStrDelta);
djmeyers 0:06ee5f8a484a 721 #endif
djmeyers 0:06ee5f8a484a 722 UnityAddMsgIfSpecified(msg);
djmeyers 0:06ee5f8a484a 723 UNITY_FAIL_AND_BAIL;
djmeyers 0:06ee5f8a484a 724 }
djmeyers 0:06ee5f8a484a 725 }
djmeyers 0:06ee5f8a484a 726
djmeyers 0:06ee5f8a484a 727 /*-----------------------------------------------*/
djmeyers 0:06ee5f8a484a 728 void UnityAssertFloatSpecial(const _UF actual,
djmeyers 0:06ee5f8a484a 729 const char* msg,
djmeyers 0:06ee5f8a484a 730 const UNITY_LINE_TYPE lineNumber,
djmeyers 0:06ee5f8a484a 731 const UNITY_FLOAT_TRAIT_T style)
djmeyers 0:06ee5f8a484a 732 {
djmeyers 0:06ee5f8a484a 733 const char* trait_names[] = { UnityStrInf, UnityStrNegInf, UnityStrNaN, UnityStrDet };
djmeyers 0:06ee5f8a484a 734 _U_SINT should_be_trait = ((_U_SINT)style & 1);
djmeyers 0:06ee5f8a484a 735 _U_SINT is_trait = !should_be_trait;
djmeyers 0:06ee5f8a484a 736 _U_SINT trait_index = (_U_SINT)(style >> 1);
djmeyers 0:06ee5f8a484a 737
djmeyers 0:06ee5f8a484a 738 UNITY_SKIP_EXECUTION;
djmeyers 0:06ee5f8a484a 739
djmeyers 0:06ee5f8a484a 740 switch(style)
djmeyers 0:06ee5f8a484a 741 {
djmeyers 0:06ee5f8a484a 742 /* To determine Inf / Neg Inf, we compare to an Inf / Neg Inf value we create on the fly
djmeyers 0:06ee5f8a484a 743 * We are using a variable to hold the zero value because some compilers complain about dividing by zero otherwise */
djmeyers 0:06ee5f8a484a 744 case UNITY_FLOAT_IS_INF:
djmeyers 0:06ee5f8a484a 745 case UNITY_FLOAT_IS_NOT_INF:
djmeyers 0:06ee5f8a484a 746 is_trait = isinf(actual) & ispos(actual);
djmeyers 0:06ee5f8a484a 747 break;
djmeyers 0:06ee5f8a484a 748 case UNITY_FLOAT_IS_NEG_INF:
djmeyers 0:06ee5f8a484a 749 case UNITY_FLOAT_IS_NOT_NEG_INF:
djmeyers 0:06ee5f8a484a 750 is_trait = isinf(actual) & isneg(actual);
djmeyers 0:06ee5f8a484a 751 break;
djmeyers 0:06ee5f8a484a 752
djmeyers 0:06ee5f8a484a 753 /* NaN is the only floating point value that does NOT equal itself. Therefore if Actual == Actual, then it is NOT NaN. */
djmeyers 0:06ee5f8a484a 754 case UNITY_FLOAT_IS_NAN:
djmeyers 0:06ee5f8a484a 755 case UNITY_FLOAT_IS_NOT_NAN:
djmeyers 0:06ee5f8a484a 756 is_trait = isnan(actual);
djmeyers 0:06ee5f8a484a 757 break;
djmeyers 0:06ee5f8a484a 758
djmeyers 0:06ee5f8a484a 759 /* A determinate number is non infinite and not NaN. (therefore the opposite of the two above) */
djmeyers 0:06ee5f8a484a 760 case UNITY_FLOAT_IS_DET:
djmeyers 0:06ee5f8a484a 761 case UNITY_FLOAT_IS_NOT_DET:
djmeyers 0:06ee5f8a484a 762 if (isinf(actual) | isnan(actual))
djmeyers 0:06ee5f8a484a 763 is_trait = 0;
djmeyers 0:06ee5f8a484a 764 else
djmeyers 0:06ee5f8a484a 765 is_trait = 1;
djmeyers 0:06ee5f8a484a 766 break;
djmeyers 0:06ee5f8a484a 767
djmeyers 0:06ee5f8a484a 768 default:
djmeyers 0:06ee5f8a484a 769 trait_index = 0;
djmeyers 0:06ee5f8a484a 770 trait_names[0] = UnityStrInvalidFloatTrait;
djmeyers 0:06ee5f8a484a 771 break;
djmeyers 0:06ee5f8a484a 772 }
djmeyers 0:06ee5f8a484a 773
djmeyers 0:06ee5f8a484a 774 if (is_trait != should_be_trait)
djmeyers 0:06ee5f8a484a 775 {
djmeyers 0:06ee5f8a484a 776 UnityTestResultsFailBegin(lineNumber);
djmeyers 0:06ee5f8a484a 777 UnityPrint(UnityStrExpected);
djmeyers 0:06ee5f8a484a 778 if (!should_be_trait)
djmeyers 0:06ee5f8a484a 779 UnityPrint(UnityStrNot);
djmeyers 0:06ee5f8a484a 780 UnityPrint(trait_names[trait_index]);
djmeyers 0:06ee5f8a484a 781 UnityPrint(UnityStrWas);
djmeyers 0:06ee5f8a484a 782 #ifdef UNITY_FLOAT_VERBOSE
djmeyers 0:06ee5f8a484a 783 UnityPrintFloat(actual);
djmeyers 0:06ee5f8a484a 784 #else
djmeyers 0:06ee5f8a484a 785 if (should_be_trait)
djmeyers 0:06ee5f8a484a 786 UnityPrint(UnityStrNot);
djmeyers 0:06ee5f8a484a 787 UnityPrint(trait_names[trait_index]);
djmeyers 0:06ee5f8a484a 788 #endif
djmeyers 0:06ee5f8a484a 789 UnityAddMsgIfSpecified(msg);
djmeyers 0:06ee5f8a484a 790 UNITY_FAIL_AND_BAIL;
djmeyers 0:06ee5f8a484a 791 }
djmeyers 0:06ee5f8a484a 792 }
djmeyers 0:06ee5f8a484a 793
djmeyers 0:06ee5f8a484a 794 #endif /* not UNITY_EXCLUDE_FLOAT */
djmeyers 0:06ee5f8a484a 795
djmeyers 0:06ee5f8a484a 796 /*-----------------------------------------------*/
djmeyers 0:06ee5f8a484a 797 #ifndef UNITY_EXCLUDE_DOUBLE
djmeyers 0:06ee5f8a484a 798 void UnityAssertEqualDoubleArray(UNITY_PTR_ATTRIBUTE const _UD* expected,
djmeyers 0:06ee5f8a484a 799 UNITY_PTR_ATTRIBUTE const _UD* actual,
djmeyers 0:06ee5f8a484a 800 const _UU32 num_elements,
djmeyers 0:06ee5f8a484a 801 const char* msg,
djmeyers 0:06ee5f8a484a 802 const UNITY_LINE_TYPE lineNumber)
djmeyers 0:06ee5f8a484a 803 {
djmeyers 0:06ee5f8a484a 804 _UU32 elements = num_elements;
djmeyers 0:06ee5f8a484a 805 UNITY_PTR_ATTRIBUTE const _UD* ptr_expected = expected;
djmeyers 0:06ee5f8a484a 806 UNITY_PTR_ATTRIBUTE const _UD* ptr_actual = actual;
djmeyers 0:06ee5f8a484a 807 _UD diff, tol;
djmeyers 0:06ee5f8a484a 808
djmeyers 0:06ee5f8a484a 809 UNITY_SKIP_EXECUTION;
djmeyers 0:06ee5f8a484a 810
djmeyers 0:06ee5f8a484a 811 if (elements == 0)
djmeyers 0:06ee5f8a484a 812 {
djmeyers 0:06ee5f8a484a 813 UnityPrintPointlessAndBail();
djmeyers 0:06ee5f8a484a 814 }
djmeyers 0:06ee5f8a484a 815
djmeyers 0:06ee5f8a484a 816 if (UnityCheckArraysForNull((UNITY_INTERNAL_PTR)expected, (UNITY_INTERNAL_PTR)actual, lineNumber, msg) == 1)
djmeyers 0:06ee5f8a484a 817 return;
djmeyers 0:06ee5f8a484a 818
djmeyers 0:06ee5f8a484a 819 while (elements--)
djmeyers 0:06ee5f8a484a 820 {
djmeyers 0:06ee5f8a484a 821 diff = *ptr_expected - *ptr_actual;
djmeyers 0:06ee5f8a484a 822 if (diff < 0.0)
djmeyers 0:06ee5f8a484a 823 diff = 0.0 - diff;
djmeyers 0:06ee5f8a484a 824 tol = UNITY_DOUBLE_PRECISION * *ptr_expected;
djmeyers 0:06ee5f8a484a 825 if (tol < 0.0)
djmeyers 0:06ee5f8a484a 826 tol = 0.0 - tol;
djmeyers 0:06ee5f8a484a 827
djmeyers 0:06ee5f8a484a 828 /* This first part of this condition will catch any NaN or Infinite values */
djmeyers 0:06ee5f8a484a 829 if (isnan(diff) || isinf(diff) || (diff > tol))
djmeyers 0:06ee5f8a484a 830 {
djmeyers 0:06ee5f8a484a 831 UnityTestResultsFailBegin(lineNumber);
djmeyers 0:06ee5f8a484a 832 UnityPrint(UnityStrElement);
djmeyers 0:06ee5f8a484a 833 UnityPrintNumberUnsigned(num_elements - elements - 1);
djmeyers 0:06ee5f8a484a 834 #ifdef UNITY_DOUBLE_VERBOSE
djmeyers 0:06ee5f8a484a 835 UnityPrint(UnityStrExpected);
djmeyers 0:06ee5f8a484a 836 UnityPrintFloat((float)(*ptr_expected));
djmeyers 0:06ee5f8a484a 837 UnityPrint(UnityStrWas);
djmeyers 0:06ee5f8a484a 838 UnityPrintFloat((float)(*ptr_actual));
djmeyers 0:06ee5f8a484a 839 #else
djmeyers 0:06ee5f8a484a 840 UnityPrint(UnityStrDelta);
djmeyers 0:06ee5f8a484a 841 #endif
djmeyers 0:06ee5f8a484a 842 UnityAddMsgIfSpecified(msg);
djmeyers 0:06ee5f8a484a 843 UNITY_FAIL_AND_BAIL;
djmeyers 0:06ee5f8a484a 844 }
djmeyers 0:06ee5f8a484a 845 ptr_expected++;
djmeyers 0:06ee5f8a484a 846 ptr_actual++;
djmeyers 0:06ee5f8a484a 847 }
djmeyers 0:06ee5f8a484a 848 }
djmeyers 0:06ee5f8a484a 849
djmeyers 0:06ee5f8a484a 850 /*-----------------------------------------------*/
djmeyers 0:06ee5f8a484a 851 void UnityAssertDoublesWithin(const _UD delta,
djmeyers 0:06ee5f8a484a 852 const _UD expected,
djmeyers 0:06ee5f8a484a 853 const _UD actual,
djmeyers 0:06ee5f8a484a 854 const char* msg,
djmeyers 0:06ee5f8a484a 855 const UNITY_LINE_TYPE lineNumber)
djmeyers 0:06ee5f8a484a 856 {
djmeyers 0:06ee5f8a484a 857 _UD diff = actual - expected;
djmeyers 0:06ee5f8a484a 858 _UD pos_delta = delta;
djmeyers 0:06ee5f8a484a 859
djmeyers 0:06ee5f8a484a 860 UNITY_SKIP_EXECUTION;
djmeyers 0:06ee5f8a484a 861
djmeyers 0:06ee5f8a484a 862 if (diff < 0.0)
djmeyers 0:06ee5f8a484a 863 {
djmeyers 0:06ee5f8a484a 864 diff = 0.0 - diff;
djmeyers 0:06ee5f8a484a 865 }
djmeyers 0:06ee5f8a484a 866 if (pos_delta < 0.0)
djmeyers 0:06ee5f8a484a 867 {
djmeyers 0:06ee5f8a484a 868 pos_delta = 0.0 - pos_delta;
djmeyers 0:06ee5f8a484a 869 }
djmeyers 0:06ee5f8a484a 870
djmeyers 0:06ee5f8a484a 871 /* This first part of this condition will catch any NaN or Infinite values */
djmeyers 0:06ee5f8a484a 872 if (isnan(diff) || isinf(diff) || (pos_delta < diff))
djmeyers 0:06ee5f8a484a 873 {
djmeyers 0:06ee5f8a484a 874 UnityTestResultsFailBegin(lineNumber);
djmeyers 0:06ee5f8a484a 875 #ifdef UNITY_DOUBLE_VERBOSE
djmeyers 0:06ee5f8a484a 876 UnityPrint(UnityStrExpected);
djmeyers 0:06ee5f8a484a 877 UnityPrintFloat((float)expected);
djmeyers 0:06ee5f8a484a 878 UnityPrint(UnityStrWas);
djmeyers 0:06ee5f8a484a 879 UnityPrintFloat((float)actual);
djmeyers 0:06ee5f8a484a 880 #else
djmeyers 0:06ee5f8a484a 881 UnityPrint(UnityStrDelta);
djmeyers 0:06ee5f8a484a 882 #endif
djmeyers 0:06ee5f8a484a 883 UnityAddMsgIfSpecified(msg);
djmeyers 0:06ee5f8a484a 884 UNITY_FAIL_AND_BAIL;
djmeyers 0:06ee5f8a484a 885 }
djmeyers 0:06ee5f8a484a 886 }
djmeyers 0:06ee5f8a484a 887
djmeyers 0:06ee5f8a484a 888 /*-----------------------------------------------*/
djmeyers 0:06ee5f8a484a 889
djmeyers 0:06ee5f8a484a 890 void UnityAssertDoubleSpecial(const _UD actual,
djmeyers 0:06ee5f8a484a 891 const char* msg,
djmeyers 0:06ee5f8a484a 892 const UNITY_LINE_TYPE lineNumber,
djmeyers 0:06ee5f8a484a 893 const UNITY_FLOAT_TRAIT_T style)
djmeyers 0:06ee5f8a484a 894 {
djmeyers 0:06ee5f8a484a 895 const char* trait_names[] = { UnityStrInf, UnityStrNegInf, UnityStrNaN, UnityStrDet };
djmeyers 0:06ee5f8a484a 896 _U_SINT should_be_trait = ((_U_SINT)style & 1);
djmeyers 0:06ee5f8a484a 897 _U_SINT is_trait = !should_be_trait;
djmeyers 0:06ee5f8a484a 898 _U_SINT trait_index = (_U_SINT)(style >> 1);
djmeyers 0:06ee5f8a484a 899
djmeyers 0:06ee5f8a484a 900 UNITY_SKIP_EXECUTION;
djmeyers 0:06ee5f8a484a 901
djmeyers 0:06ee5f8a484a 902 switch(style)
djmeyers 0:06ee5f8a484a 903 {
djmeyers 0:06ee5f8a484a 904 /* To determine Inf / Neg Inf, we compare to an Inf / Neg Inf value we create on the fly
djmeyers 0:06ee5f8a484a 905 * We are using a variable to hold the zero value because some compilers complain about dividing by zero otherwise */
djmeyers 0:06ee5f8a484a 906 case UNITY_FLOAT_IS_INF:
djmeyers 0:06ee5f8a484a 907 case UNITY_FLOAT_IS_NOT_INF:
djmeyers 0:06ee5f8a484a 908 is_trait = isinf(actual) & ispos(actual);
djmeyers 0:06ee5f8a484a 909 break;
djmeyers 0:06ee5f8a484a 910 case UNITY_FLOAT_IS_NEG_INF:
djmeyers 0:06ee5f8a484a 911 case UNITY_FLOAT_IS_NOT_NEG_INF:
djmeyers 0:06ee5f8a484a 912 is_trait = isinf(actual) & isneg(actual);
djmeyers 0:06ee5f8a484a 913 break;
djmeyers 0:06ee5f8a484a 914
djmeyers 0:06ee5f8a484a 915 /* NaN is the only floating point value that does NOT equal itself. Therefore if Actual == Actual, then it is NOT NaN. */
djmeyers 0:06ee5f8a484a 916 case UNITY_FLOAT_IS_NAN:
djmeyers 0:06ee5f8a484a 917 case UNITY_FLOAT_IS_NOT_NAN:
djmeyers 0:06ee5f8a484a 918 is_trait = isnan(actual);
djmeyers 0:06ee5f8a484a 919 break;
djmeyers 0:06ee5f8a484a 920
djmeyers 0:06ee5f8a484a 921 /* A determinate number is non infinite and not NaN. (therefore the opposite of the two above) */
djmeyers 0:06ee5f8a484a 922 case UNITY_FLOAT_IS_DET:
djmeyers 0:06ee5f8a484a 923 case UNITY_FLOAT_IS_NOT_DET:
djmeyers 0:06ee5f8a484a 924 if (isinf(actual) | isnan(actual))
djmeyers 0:06ee5f8a484a 925 is_trait = 0;
djmeyers 0:06ee5f8a484a 926 else
djmeyers 0:06ee5f8a484a 927 is_trait = 1;
djmeyers 0:06ee5f8a484a 928 break;
djmeyers 0:06ee5f8a484a 929
djmeyers 0:06ee5f8a484a 930 default:
djmeyers 0:06ee5f8a484a 931 trait_index = 0;
djmeyers 0:06ee5f8a484a 932 trait_names[0] = UnityStrInvalidFloatTrait;
djmeyers 0:06ee5f8a484a 933 break;
djmeyers 0:06ee5f8a484a 934 }
djmeyers 0:06ee5f8a484a 935
djmeyers 0:06ee5f8a484a 936 if (is_trait != should_be_trait)
djmeyers 0:06ee5f8a484a 937 {
djmeyers 0:06ee5f8a484a 938 UnityTestResultsFailBegin(lineNumber);
djmeyers 0:06ee5f8a484a 939 UnityPrint(UnityStrExpected);
djmeyers 0:06ee5f8a484a 940 if (!should_be_trait)
djmeyers 0:06ee5f8a484a 941 UnityPrint(UnityStrNot);
djmeyers 0:06ee5f8a484a 942 UnityPrint(trait_names[trait_index]);
djmeyers 0:06ee5f8a484a 943 UnityPrint(UnityStrWas);
djmeyers 0:06ee5f8a484a 944 #ifdef UNITY_DOUBLE_VERBOSE
djmeyers 0:06ee5f8a484a 945 UnityPrintFloat(actual);
djmeyers 0:06ee5f8a484a 946 #else
djmeyers 0:06ee5f8a484a 947 if (should_be_trait)
djmeyers 0:06ee5f8a484a 948 UnityPrint(UnityStrNot);
djmeyers 0:06ee5f8a484a 949 UnityPrint(trait_names[trait_index]);
djmeyers 0:06ee5f8a484a 950 #endif
djmeyers 0:06ee5f8a484a 951 UnityAddMsgIfSpecified(msg);
djmeyers 0:06ee5f8a484a 952 UNITY_FAIL_AND_BAIL;
djmeyers 0:06ee5f8a484a 953 }
djmeyers 0:06ee5f8a484a 954 }
djmeyers 0:06ee5f8a484a 955
djmeyers 0:06ee5f8a484a 956
djmeyers 0:06ee5f8a484a 957 #endif /* not UNITY_EXCLUDE_DOUBLE */
djmeyers 0:06ee5f8a484a 958
djmeyers 0:06ee5f8a484a 959 /*-----------------------------------------------*/
djmeyers 0:06ee5f8a484a 960 void UnityAssertNumbersWithin( const _U_UINT delta,
djmeyers 0:06ee5f8a484a 961 const _U_SINT expected,
djmeyers 0:06ee5f8a484a 962 const _U_SINT actual,
djmeyers 0:06ee5f8a484a 963 const char* msg,
djmeyers 0:06ee5f8a484a 964 const UNITY_LINE_TYPE lineNumber,
djmeyers 0:06ee5f8a484a 965 const UNITY_DISPLAY_STYLE_T style)
djmeyers 0:06ee5f8a484a 966 {
djmeyers 0:06ee5f8a484a 967 UNITY_SKIP_EXECUTION;
djmeyers 0:06ee5f8a484a 968
djmeyers 0:06ee5f8a484a 969 if ((style & UNITY_DISPLAY_RANGE_INT) == UNITY_DISPLAY_RANGE_INT)
djmeyers 0:06ee5f8a484a 970 {
djmeyers 0:06ee5f8a484a 971 if (actual > expected)
djmeyers 0:06ee5f8a484a 972 Unity.CurrentTestFailed = ((_U_UINT)(actual - expected) > delta);
djmeyers 0:06ee5f8a484a 973 else
djmeyers 0:06ee5f8a484a 974 Unity.CurrentTestFailed = ((_U_UINT)(expected - actual) > delta);
djmeyers 0:06ee5f8a484a 975 }
djmeyers 0:06ee5f8a484a 976 else
djmeyers 0:06ee5f8a484a 977 {
djmeyers 0:06ee5f8a484a 978 if ((_U_UINT)actual > (_U_UINT)expected)
djmeyers 0:06ee5f8a484a 979 Unity.CurrentTestFailed = ((_U_UINT)(actual - expected) > delta);
djmeyers 0:06ee5f8a484a 980 else
djmeyers 0:06ee5f8a484a 981 Unity.CurrentTestFailed = ((_U_UINT)(expected - actual) > delta);
djmeyers 0:06ee5f8a484a 982 }
djmeyers 0:06ee5f8a484a 983
djmeyers 0:06ee5f8a484a 984 if (Unity.CurrentTestFailed)
djmeyers 0:06ee5f8a484a 985 {
djmeyers 0:06ee5f8a484a 986 UnityTestResultsFailBegin(lineNumber);
djmeyers 0:06ee5f8a484a 987 UnityPrint(UnityStrDelta);
djmeyers 0:06ee5f8a484a 988 UnityPrintNumberByStyle((_U_SINT)delta, style);
djmeyers 0:06ee5f8a484a 989 UnityPrint(UnityStrExpected);
djmeyers 0:06ee5f8a484a 990 UnityPrintNumberByStyle(expected, style);
djmeyers 0:06ee5f8a484a 991 UnityPrint(UnityStrWas);
djmeyers 0:06ee5f8a484a 992 UnityPrintNumberByStyle(actual, style);
djmeyers 0:06ee5f8a484a 993 UnityAddMsgIfSpecified(msg);
djmeyers 0:06ee5f8a484a 994 UNITY_FAIL_AND_BAIL;
djmeyers 0:06ee5f8a484a 995 }
djmeyers 0:06ee5f8a484a 996 }
djmeyers 0:06ee5f8a484a 997
djmeyers 0:06ee5f8a484a 998 /*-----------------------------------------------*/
djmeyers 0:06ee5f8a484a 999 void UnityAssertEqualString(const char* expected,
djmeyers 0:06ee5f8a484a 1000 const char* actual,
djmeyers 0:06ee5f8a484a 1001 const char* msg,
djmeyers 0:06ee5f8a484a 1002 const UNITY_LINE_TYPE lineNumber)
djmeyers 0:06ee5f8a484a 1003 {
djmeyers 0:06ee5f8a484a 1004 _UU32 i;
djmeyers 0:06ee5f8a484a 1005
djmeyers 0:06ee5f8a484a 1006 UNITY_SKIP_EXECUTION;
djmeyers 0:06ee5f8a484a 1007
djmeyers 0:06ee5f8a484a 1008 /* if both pointers not null compare the strings */
djmeyers 0:06ee5f8a484a 1009 if (expected && actual)
djmeyers 0:06ee5f8a484a 1010 {
djmeyers 0:06ee5f8a484a 1011 for (i = 0; expected[i] || actual[i]; i++)
djmeyers 0:06ee5f8a484a 1012 {
djmeyers 0:06ee5f8a484a 1013 if (expected[i] != actual[i])
djmeyers 0:06ee5f8a484a 1014 {
djmeyers 0:06ee5f8a484a 1015 Unity.CurrentTestFailed = 1;
djmeyers 0:06ee5f8a484a 1016 break;
djmeyers 0:06ee5f8a484a 1017 }
djmeyers 0:06ee5f8a484a 1018 }
djmeyers 0:06ee5f8a484a 1019 }
djmeyers 0:06ee5f8a484a 1020 else
djmeyers 0:06ee5f8a484a 1021 { /* handle case of one pointers being null (if both null, test should pass) */
djmeyers 0:06ee5f8a484a 1022 if (expected != actual)
djmeyers 0:06ee5f8a484a 1023 {
djmeyers 0:06ee5f8a484a 1024 Unity.CurrentTestFailed = 1;
djmeyers 0:06ee5f8a484a 1025 }
djmeyers 0:06ee5f8a484a 1026 }
djmeyers 0:06ee5f8a484a 1027
djmeyers 0:06ee5f8a484a 1028 if (Unity.CurrentTestFailed)
djmeyers 0:06ee5f8a484a 1029 {
djmeyers 0:06ee5f8a484a 1030 UnityTestResultsFailBegin(lineNumber);
djmeyers 0:06ee5f8a484a 1031 UnityPrintExpectedAndActualStrings(expected, actual);
djmeyers 0:06ee5f8a484a 1032 UnityAddMsgIfSpecified(msg);
djmeyers 0:06ee5f8a484a 1033 UNITY_FAIL_AND_BAIL;
djmeyers 0:06ee5f8a484a 1034 }
djmeyers 0:06ee5f8a484a 1035 }
djmeyers 0:06ee5f8a484a 1036
djmeyers 0:06ee5f8a484a 1037 /*-----------------------------------------------*/
djmeyers 0:06ee5f8a484a 1038 void UnityAssertEqualStringLen(const char* expected,
djmeyers 0:06ee5f8a484a 1039 const char* actual,
djmeyers 0:06ee5f8a484a 1040 const _UU32 length,
djmeyers 0:06ee5f8a484a 1041 const char* msg,
djmeyers 0:06ee5f8a484a 1042 const UNITY_LINE_TYPE lineNumber)
djmeyers 0:06ee5f8a484a 1043 {
djmeyers 0:06ee5f8a484a 1044 _UU32 i;
djmeyers 0:06ee5f8a484a 1045
djmeyers 0:06ee5f8a484a 1046 UNITY_SKIP_EXECUTION;
djmeyers 0:06ee5f8a484a 1047
djmeyers 0:06ee5f8a484a 1048 /* if both pointers not null compare the strings */
djmeyers 0:06ee5f8a484a 1049 if (expected && actual)
djmeyers 0:06ee5f8a484a 1050 {
djmeyers 0:06ee5f8a484a 1051 for (i = 0; (expected[i] || actual[i]) && i < length; i++)
djmeyers 0:06ee5f8a484a 1052 {
djmeyers 0:06ee5f8a484a 1053 if (expected[i] != actual[i])
djmeyers 0:06ee5f8a484a 1054 {
djmeyers 0:06ee5f8a484a 1055 Unity.CurrentTestFailed = 1;
djmeyers 0:06ee5f8a484a 1056 break;
djmeyers 0:06ee5f8a484a 1057 }
djmeyers 0:06ee5f8a484a 1058 }
djmeyers 0:06ee5f8a484a 1059 }
djmeyers 0:06ee5f8a484a 1060 else
djmeyers 0:06ee5f8a484a 1061 { /* handle case of one pointers being null (if both null, test should pass) */
djmeyers 0:06ee5f8a484a 1062 if (expected != actual)
djmeyers 0:06ee5f8a484a 1063 {
djmeyers 0:06ee5f8a484a 1064 Unity.CurrentTestFailed = 1;
djmeyers 0:06ee5f8a484a 1065 }
djmeyers 0:06ee5f8a484a 1066 }
djmeyers 0:06ee5f8a484a 1067
djmeyers 0:06ee5f8a484a 1068 if (Unity.CurrentTestFailed)
djmeyers 0:06ee5f8a484a 1069 {
djmeyers 0:06ee5f8a484a 1070 UnityTestResultsFailBegin(lineNumber);
djmeyers 0:06ee5f8a484a 1071 UnityPrintExpectedAndActualStringsLen(expected, actual, length);
djmeyers 0:06ee5f8a484a 1072 UnityAddMsgIfSpecified(msg);
djmeyers 0:06ee5f8a484a 1073 UNITY_FAIL_AND_BAIL;
djmeyers 0:06ee5f8a484a 1074 }
djmeyers 0:06ee5f8a484a 1075 }
djmeyers 0:06ee5f8a484a 1076
djmeyers 0:06ee5f8a484a 1077
djmeyers 0:06ee5f8a484a 1078 /*-----------------------------------------------*/
djmeyers 0:06ee5f8a484a 1079 void UnityAssertEqualStringArray( const char** expected,
djmeyers 0:06ee5f8a484a 1080 const char** actual,
djmeyers 0:06ee5f8a484a 1081 const _UU32 num_elements,
djmeyers 0:06ee5f8a484a 1082 const char* msg,
djmeyers 0:06ee5f8a484a 1083 const UNITY_LINE_TYPE lineNumber)
djmeyers 0:06ee5f8a484a 1084 {
djmeyers 0:06ee5f8a484a 1085 _UU32 i, j = 0;
djmeyers 0:06ee5f8a484a 1086
djmeyers 0:06ee5f8a484a 1087 UNITY_SKIP_EXECUTION;
djmeyers 0:06ee5f8a484a 1088
djmeyers 0:06ee5f8a484a 1089 /* if no elements, it's an error */
djmeyers 0:06ee5f8a484a 1090 if (num_elements == 0)
djmeyers 0:06ee5f8a484a 1091 {
djmeyers 0:06ee5f8a484a 1092 UnityPrintPointlessAndBail();
djmeyers 0:06ee5f8a484a 1093 }
djmeyers 0:06ee5f8a484a 1094
djmeyers 0:06ee5f8a484a 1095 if (UnityCheckArraysForNull((UNITY_INTERNAL_PTR)expected, (UNITY_INTERNAL_PTR)actual, lineNumber, msg) == 1)
djmeyers 0:06ee5f8a484a 1096 return;
djmeyers 0:06ee5f8a484a 1097
djmeyers 0:06ee5f8a484a 1098 do
djmeyers 0:06ee5f8a484a 1099 {
djmeyers 0:06ee5f8a484a 1100 /* if both pointers not null compare the strings */
djmeyers 0:06ee5f8a484a 1101 if (expected[j] && actual[j])
djmeyers 0:06ee5f8a484a 1102 {
djmeyers 0:06ee5f8a484a 1103 for (i = 0; expected[j][i] || actual[j][i]; i++)
djmeyers 0:06ee5f8a484a 1104 {
djmeyers 0:06ee5f8a484a 1105 if (expected[j][i] != actual[j][i])
djmeyers 0:06ee5f8a484a 1106 {
djmeyers 0:06ee5f8a484a 1107 Unity.CurrentTestFailed = 1;
djmeyers 0:06ee5f8a484a 1108 break;
djmeyers 0:06ee5f8a484a 1109 }
djmeyers 0:06ee5f8a484a 1110 }
djmeyers 0:06ee5f8a484a 1111 }
djmeyers 0:06ee5f8a484a 1112 else
djmeyers 0:06ee5f8a484a 1113 { /* handle case of one pointers being null (if both null, test should pass) */
djmeyers 0:06ee5f8a484a 1114 if (expected[j] != actual[j])
djmeyers 0:06ee5f8a484a 1115 {
djmeyers 0:06ee5f8a484a 1116 Unity.CurrentTestFailed = 1;
djmeyers 0:06ee5f8a484a 1117 }
djmeyers 0:06ee5f8a484a 1118 }
djmeyers 0:06ee5f8a484a 1119
djmeyers 0:06ee5f8a484a 1120 if (Unity.CurrentTestFailed)
djmeyers 0:06ee5f8a484a 1121 {
djmeyers 0:06ee5f8a484a 1122 UnityTestResultsFailBegin(lineNumber);
djmeyers 0:06ee5f8a484a 1123 if (num_elements > 1)
djmeyers 0:06ee5f8a484a 1124 {
djmeyers 0:06ee5f8a484a 1125 UnityPrint(UnityStrElement);
djmeyers 0:06ee5f8a484a 1126 UnityPrintNumberUnsigned(j);
djmeyers 0:06ee5f8a484a 1127 }
djmeyers 0:06ee5f8a484a 1128 UnityPrintExpectedAndActualStrings((const char*)(expected[j]), (const char*)(actual[j]));
djmeyers 0:06ee5f8a484a 1129 UnityAddMsgIfSpecified(msg);
djmeyers 0:06ee5f8a484a 1130 UNITY_FAIL_AND_BAIL;
djmeyers 0:06ee5f8a484a 1131 }
djmeyers 0:06ee5f8a484a 1132 } while (++j < num_elements);
djmeyers 0:06ee5f8a484a 1133 }
djmeyers 0:06ee5f8a484a 1134
djmeyers 0:06ee5f8a484a 1135 /*-----------------------------------------------*/
djmeyers 0:06ee5f8a484a 1136 void UnityAssertEqualMemory( UNITY_INTERNAL_PTR expected,
djmeyers 0:06ee5f8a484a 1137 UNITY_INTERNAL_PTR actual,
djmeyers 0:06ee5f8a484a 1138 const _UU32 length,
djmeyers 0:06ee5f8a484a 1139 const _UU32 num_elements,
djmeyers 0:06ee5f8a484a 1140 const char* msg,
djmeyers 0:06ee5f8a484a 1141 const UNITY_LINE_TYPE lineNumber)
djmeyers 0:06ee5f8a484a 1142 {
djmeyers 0:06ee5f8a484a 1143 UNITY_PTR_ATTRIBUTE const unsigned char* ptr_exp = (UNITY_PTR_ATTRIBUTE const unsigned char*)expected;
djmeyers 0:06ee5f8a484a 1144 UNITY_PTR_ATTRIBUTE const unsigned char* ptr_act = (UNITY_PTR_ATTRIBUTE const unsigned char*)actual;
djmeyers 0:06ee5f8a484a 1145 _UU32 elements = num_elements;
djmeyers 0:06ee5f8a484a 1146 _UU32 bytes;
djmeyers 0:06ee5f8a484a 1147
djmeyers 0:06ee5f8a484a 1148 UNITY_SKIP_EXECUTION;
djmeyers 0:06ee5f8a484a 1149
djmeyers 0:06ee5f8a484a 1150 if ((elements == 0) || (length == 0))
djmeyers 0:06ee5f8a484a 1151 {
djmeyers 0:06ee5f8a484a 1152 UnityPrintPointlessAndBail();
djmeyers 0:06ee5f8a484a 1153 }
djmeyers 0:06ee5f8a484a 1154
djmeyers 0:06ee5f8a484a 1155 if (UnityCheckArraysForNull((UNITY_INTERNAL_PTR)expected, (UNITY_INTERNAL_PTR)actual, lineNumber, msg) == 1)
djmeyers 0:06ee5f8a484a 1156 return;
djmeyers 0:06ee5f8a484a 1157
djmeyers 0:06ee5f8a484a 1158 while (elements--)
djmeyers 0:06ee5f8a484a 1159 {
djmeyers 0:06ee5f8a484a 1160 /* /////////////////////////////////// */
djmeyers 0:06ee5f8a484a 1161 bytes = length;
djmeyers 0:06ee5f8a484a 1162 while (bytes--)
djmeyers 0:06ee5f8a484a 1163 {
djmeyers 0:06ee5f8a484a 1164 if (*ptr_exp != *ptr_act)
djmeyers 0:06ee5f8a484a 1165 {
djmeyers 0:06ee5f8a484a 1166 UnityTestResultsFailBegin(lineNumber);
djmeyers 0:06ee5f8a484a 1167 UnityPrint(UnityStrMemory);
djmeyers 0:06ee5f8a484a 1168 if (num_elements > 1)
djmeyers 0:06ee5f8a484a 1169 {
djmeyers 0:06ee5f8a484a 1170 UnityPrint(UnityStrElement);
djmeyers 0:06ee5f8a484a 1171 UnityPrintNumberUnsigned(num_elements - elements - 1);
djmeyers 0:06ee5f8a484a 1172 }
djmeyers 0:06ee5f8a484a 1173 UnityPrint(UnityStrByte);
djmeyers 0:06ee5f8a484a 1174 UnityPrintNumberUnsigned(length - bytes - 1);
djmeyers 0:06ee5f8a484a 1175 UnityPrint(UnityStrExpected);
djmeyers 0:06ee5f8a484a 1176 UnityPrintNumberByStyle(*ptr_exp, UNITY_DISPLAY_STYLE_HEX8);
djmeyers 0:06ee5f8a484a 1177 UnityPrint(UnityStrWas);
djmeyers 0:06ee5f8a484a 1178 UnityPrintNumberByStyle(*ptr_act, UNITY_DISPLAY_STYLE_HEX8);
djmeyers 0:06ee5f8a484a 1179 UnityAddMsgIfSpecified(msg);
djmeyers 0:06ee5f8a484a 1180 UNITY_FAIL_AND_BAIL;
djmeyers 0:06ee5f8a484a 1181 }
djmeyers 0:06ee5f8a484a 1182 ptr_exp = (UNITY_INTERNAL_PTR)((_UP)ptr_exp + 1);
djmeyers 0:06ee5f8a484a 1183 ptr_act = (UNITY_INTERNAL_PTR)((_UP)ptr_act + 1);
djmeyers 0:06ee5f8a484a 1184 }
djmeyers 0:06ee5f8a484a 1185 /* /////////////////////////////////// */
djmeyers 0:06ee5f8a484a 1186
djmeyers 0:06ee5f8a484a 1187 }
djmeyers 0:06ee5f8a484a 1188 }
djmeyers 0:06ee5f8a484a 1189
djmeyers 0:06ee5f8a484a 1190 /*-----------------------------------------------
djmeyers 0:06ee5f8a484a 1191 * Control Functions
djmeyers 0:06ee5f8a484a 1192 *-----------------------------------------------*/
djmeyers 0:06ee5f8a484a 1193
djmeyers 0:06ee5f8a484a 1194 void UnityFail(const char* msg, const UNITY_LINE_TYPE line)
djmeyers 0:06ee5f8a484a 1195 {
djmeyers 0:06ee5f8a484a 1196 UNITY_SKIP_EXECUTION;
djmeyers 0:06ee5f8a484a 1197
djmeyers 0:06ee5f8a484a 1198 UnityTestResultsBegin(Unity.TestFile, line);
djmeyers 0:06ee5f8a484a 1199 /* SA_PATCH: Make failures more noticable. */
djmeyers 0:06ee5f8a484a 1200 UnityPrintVisibleFailure();
djmeyers 0:06ee5f8a484a 1201 //UnityPrintFail();
djmeyers 0:06ee5f8a484a 1202 if (msg != NULL)
djmeyers 0:06ee5f8a484a 1203 {
djmeyers 0:06ee5f8a484a 1204 UNITY_OUTPUT_CHAR(':');
djmeyers 0:06ee5f8a484a 1205
djmeyers 0:06ee5f8a484a 1206 #ifndef UNITY_EXCLUDE_DETAILS
djmeyers 0:06ee5f8a484a 1207 if (Unity.CurrentDetail1)
djmeyers 0:06ee5f8a484a 1208 {
djmeyers 0:06ee5f8a484a 1209 UnityPrint(UnityStrDetail1Name);
djmeyers 0:06ee5f8a484a 1210 UnityPrint(Unity.CurrentDetail1);
djmeyers 0:06ee5f8a484a 1211 if (Unity.CurrentDetail2)
djmeyers 0:06ee5f8a484a 1212 {
djmeyers 0:06ee5f8a484a 1213 UnityPrint(UnityStrDetail2Name);
djmeyers 0:06ee5f8a484a 1214 UnityPrint(Unity.CurrentDetail2);
djmeyers 0:06ee5f8a484a 1215 }
djmeyers 0:06ee5f8a484a 1216 UnityPrint(UnityStrSpacer);
djmeyers 0:06ee5f8a484a 1217 }
djmeyers 0:06ee5f8a484a 1218 #endif
djmeyers 0:06ee5f8a484a 1219 if (msg[0] != ' ')
djmeyers 0:06ee5f8a484a 1220 {
djmeyers 0:06ee5f8a484a 1221 UNITY_OUTPUT_CHAR(' ');
djmeyers 0:06ee5f8a484a 1222 }
djmeyers 0:06ee5f8a484a 1223 UnityPrint(msg);
djmeyers 0:06ee5f8a484a 1224 }
djmeyers 0:06ee5f8a484a 1225
djmeyers 0:06ee5f8a484a 1226 UNITY_FAIL_AND_BAIL;
djmeyers 0:06ee5f8a484a 1227 }
djmeyers 0:06ee5f8a484a 1228
djmeyers 0:06ee5f8a484a 1229 /*-----------------------------------------------*/
djmeyers 0:06ee5f8a484a 1230 void UnityIgnore(const char* msg, const UNITY_LINE_TYPE line)
djmeyers 0:06ee5f8a484a 1231 {
djmeyers 0:06ee5f8a484a 1232 UNITY_SKIP_EXECUTION;
djmeyers 0:06ee5f8a484a 1233
djmeyers 0:06ee5f8a484a 1234 UnityTestResultsBegin(Unity.TestFile, line);
djmeyers 0:06ee5f8a484a 1235 UnityPrint(UnityStrIgnore);
djmeyers 0:06ee5f8a484a 1236 if (msg != NULL)
djmeyers 0:06ee5f8a484a 1237 {
djmeyers 0:06ee5f8a484a 1238 UNITY_OUTPUT_CHAR(':');
djmeyers 0:06ee5f8a484a 1239 UNITY_OUTPUT_CHAR(' ');
djmeyers 0:06ee5f8a484a 1240 UnityPrint(msg);
djmeyers 0:06ee5f8a484a 1241 }
djmeyers 0:06ee5f8a484a 1242 UNITY_IGNORE_AND_BAIL;
djmeyers 0:06ee5f8a484a 1243 }
djmeyers 0:06ee5f8a484a 1244
djmeyers 0:06ee5f8a484a 1245 /*-----------------------------------------------*/
djmeyers 0:06ee5f8a484a 1246 #if defined(UNITY_WEAK_ATTRIBUTE)
djmeyers 0:06ee5f8a484a 1247 UNITY_WEAK_ATTRIBUTE void setUp(void) { }
djmeyers 0:06ee5f8a484a 1248 UNITY_WEAK_ATTRIBUTE void tearDown(void) { }
djmeyers 0:06ee5f8a484a 1249 #elif defined(UNITY_WEAK_PRAGMA)
djmeyers 0:06ee5f8a484a 1250 # pragma weak setUp
djmeyers 0:06ee5f8a484a 1251 void setUp(void) { }
djmeyers 0:06ee5f8a484a 1252 # pragma weak tearDown
djmeyers 0:06ee5f8a484a 1253 void tearDown(void) { }
djmeyers 0:06ee5f8a484a 1254 #endif
djmeyers 0:06ee5f8a484a 1255 /*-----------------------------------------------*/
djmeyers 0:06ee5f8a484a 1256 void UnityDefaultTestRun(UnityTestFunction Func, const char* FuncName, const int FuncLineNum)
djmeyers 0:06ee5f8a484a 1257 {
djmeyers 0:06ee5f8a484a 1258 Unity.CurrentTestName = FuncName;
djmeyers 0:06ee5f8a484a 1259 Unity.CurrentTestLineNumber = (UNITY_LINE_TYPE)FuncLineNum;
djmeyers 0:06ee5f8a484a 1260 Unity.NumberOfTests++;
djmeyers 0:06ee5f8a484a 1261 UNITY_CLR_DETAILS();
djmeyers 0:06ee5f8a484a 1262 if (TEST_PROTECT())
djmeyers 0:06ee5f8a484a 1263 {
djmeyers 0:06ee5f8a484a 1264 setUp();
djmeyers 0:06ee5f8a484a 1265 Func();
djmeyers 0:06ee5f8a484a 1266 }
djmeyers 0:06ee5f8a484a 1267 if (TEST_PROTECT() && !(Unity.CurrentTestIgnored))
djmeyers 0:06ee5f8a484a 1268 {
djmeyers 0:06ee5f8a484a 1269 tearDown();
djmeyers 0:06ee5f8a484a 1270 }
djmeyers 0:06ee5f8a484a 1271 UnityConcludeTest();
djmeyers 0:06ee5f8a484a 1272 }
djmeyers 0:06ee5f8a484a 1273
djmeyers 0:06ee5f8a484a 1274 /*-----------------------------------------------*/
djmeyers 0:06ee5f8a484a 1275 void UnityBegin(const char* filename)
djmeyers 0:06ee5f8a484a 1276 {
djmeyers 0:06ee5f8a484a 1277 Unity.TestFile = filename;
djmeyers 0:06ee5f8a484a 1278 Unity.CurrentTestName = NULL;
djmeyers 0:06ee5f8a484a 1279 Unity.CurrentTestLineNumber = 0;
djmeyers 0:06ee5f8a484a 1280 Unity.NumberOfTests = 0;
djmeyers 0:06ee5f8a484a 1281 Unity.TestFailures = 0;
djmeyers 0:06ee5f8a484a 1282 Unity.TestIgnores = 0;
djmeyers 0:06ee5f8a484a 1283 Unity.CurrentTestFailed = 0;
djmeyers 0:06ee5f8a484a 1284 Unity.CurrentTestIgnored = 0;
djmeyers 0:06ee5f8a484a 1285
djmeyers 0:06ee5f8a484a 1286 UNITY_CLR_DETAILS();
djmeyers 0:06ee5f8a484a 1287 UNITY_OUTPUT_START();
djmeyers 0:06ee5f8a484a 1288 }
djmeyers 0:06ee5f8a484a 1289
djmeyers 0:06ee5f8a484a 1290 /*-----------------------------------------------*/
djmeyers 0:06ee5f8a484a 1291 int UnityEnd(void)
djmeyers 0:06ee5f8a484a 1292 {
djmeyers 0:06ee5f8a484a 1293 UNITY_PRINT_EOL();
djmeyers 0:06ee5f8a484a 1294 UnityPrint(UnityStrBreaker);
djmeyers 0:06ee5f8a484a 1295 UNITY_PRINT_EOL();
djmeyers 0:06ee5f8a484a 1296 UnityPrintNumber((_U_SINT)(Unity.NumberOfTests));
djmeyers 0:06ee5f8a484a 1297 UnityPrint(UnityStrResultsTests);
djmeyers 0:06ee5f8a484a 1298 UnityPrintNumber((_U_SINT)(Unity.TestFailures));
djmeyers 0:06ee5f8a484a 1299 UnityPrint(UnityStrResultsFailures);
djmeyers 0:06ee5f8a484a 1300 UnityPrintNumber((_U_SINT)(Unity.TestIgnores));
djmeyers 0:06ee5f8a484a 1301 UnityPrint(UnityStrResultsIgnored);
djmeyers 0:06ee5f8a484a 1302 UNITY_PRINT_EOL();
djmeyers 0:06ee5f8a484a 1303 if (Unity.TestFailures == 0U)
djmeyers 0:06ee5f8a484a 1304 {
djmeyers 0:06ee5f8a484a 1305 UnityPrintOk();
djmeyers 0:06ee5f8a484a 1306 }
djmeyers 0:06ee5f8a484a 1307 else
djmeyers 0:06ee5f8a484a 1308 {
djmeyers 0:06ee5f8a484a 1309 UnityPrintFail();
djmeyers 0:06ee5f8a484a 1310 #ifdef UNITY_DIFFERENTIATE_FINAL_FAIL
djmeyers 0:06ee5f8a484a 1311 UNITY_OUTPUT_CHAR('E'); UNITY_OUTPUT_CHAR('D');
djmeyers 0:06ee5f8a484a 1312 #endif
djmeyers 0:06ee5f8a484a 1313 }
djmeyers 0:06ee5f8a484a 1314 UNITY_PRINT_EOL();
djmeyers 0:06ee5f8a484a 1315 UNITY_FLUSH_CALL();
djmeyers 0:06ee5f8a484a 1316 UNITY_OUTPUT_COMPLETE();
djmeyers 0:06ee5f8a484a 1317 return (int)(Unity.TestFailures);
djmeyers 0:06ee5f8a484a 1318 }
djmeyers 0:06ee5f8a484a 1319
djmeyers 0:06ee5f8a484a 1320 /*-----------------------------------------------*/