Kenji Arai / mbed-os_TYBLE16

Dependents:   TYBLE16_simple_data_logger TYBLE16_MP3_Air

Committer:
kenjiArai
Date:
Tue Dec 17 23:23:45 2019 +0000
Revision:
0:5b88d5760320
mbed-os5 only for TYBLE16

Who changed what in which revision?

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