unity_internals.h revision 294554
1106813Ssimokawa/* ========================================== 2106813Ssimokawa Unity Project - A Test Framework for C 3106813Ssimokawa Copyright (c) 2007-14 Mike Karlesky, Mark VanderVoord, Greg Williams 4106813Ssimokawa [Released under MIT License. Please refer to license.txt for details] 5106813Ssimokawa========================================== */ 6106813Ssimokawa 7106813Ssimokawa#ifndef UNITY_INTERNALS_H 8106813Ssimokawa#define UNITY_INTERNALS_H 9106813Ssimokawa 10106813Ssimokawa#ifdef UNITY_INCLUDE_CONFIG_H 11106813Ssimokawa#include "unity_config.h" 12106813Ssimokawa#endif 13106813Ssimokawa 14106813Ssimokawa#include <setjmp.h> 15106813Ssimokawa 16106813Ssimokawa// Unity Attempts to Auto-Detect Integer Types 17106813Ssimokawa// Attempt 1: UINT_MAX, ULONG_MAX, etc in <stdint.h> 18106813Ssimokawa// Attempt 2: UINT_MAX, ULONG_MAX, etc in <limits.h> 19106813Ssimokawa// Attempt 3: Deduced from sizeof() macros 20106813Ssimokawa#ifndef UNITY_EXCLUDE_STDINT_H 21106813Ssimokawa#include <stdint.h> 22106813Ssimokawa#endif 23106813Ssimokawa 24106813Ssimokawa#ifndef UNITY_EXCLUDE_LIMITS_H 25106813Ssimokawa#include <limits.h> 26106813Ssimokawa#endif 27106813Ssimokawa 28106813Ssimokawa#ifndef UNITY_EXCLUDE_SIZEOF 29106813Ssimokawa#ifndef UINT_MAX 30106813Ssimokawa#define UINT_MAX (sizeof(unsigned int) * 256 - 1) 31106813Ssimokawa#endif 32106813Ssimokawa#ifndef ULONG_MAX 33106813Ssimokawa#define ULONG_MAX (sizeof(unsigned long) * 256 - 1) 34106813Ssimokawa#endif 35106813Ssimokawa#ifndef UINTPTR_MAX 36106813Ssimokawa//apparently this is not a constant expression: (sizeof(unsigned int *) * 256 - 1) so we have to just let this fall through 37106813Ssimokawa#endif 38106813Ssimokawa#endif 39106813Ssimokawa//------------------------------------------------------- 40106813Ssimokawa// Guess Widths If Not Specified 41106813Ssimokawa//------------------------------------------------------- 42106813Ssimokawa 43106813Ssimokawa// Determine the size of an int, if not already specificied. 44106813Ssimokawa// We cannot use sizeof(int), because it is not yet defined 45106813Ssimokawa// at this stage in the trnslation of the C program. 46106813Ssimokawa// Therefore, infer it from UINT_MAX if possible. 47106813Ssimokawa#ifndef UNITY_INT_WIDTH 48106813Ssimokawa #ifdef UINT_MAX 49106813Ssimokawa #if (UINT_MAX == 0xFFFF) 50106813Ssimokawa #define UNITY_INT_WIDTH (16) 51106813Ssimokawa #elif (UINT_MAX == 0xFFFFFFFF) 52106813Ssimokawa #define UNITY_INT_WIDTH (32) 53106813Ssimokawa #elif (UINT_MAX == 0xFFFFFFFFFFFFFFFF) 54106813Ssimokawa #define UNITY_INT_WIDTH (64) 55109282Ssimokawa #endif 56106813Ssimokawa #endif 57106813Ssimokawa#endif 58106813Ssimokawa#ifndef UNITY_INT_WIDTH 59106813Ssimokawa #define UNITY_INT_WIDTH (32) 60106813Ssimokawa#endif 61106813Ssimokawa 62106813Ssimokawa// Determine the size of a long, if not already specified, 63106813Ssimokawa// by following the process used above to define 64106813Ssimokawa// UNITY_INT_WIDTH. 65106813Ssimokawa#ifndef UNITY_LONG_WIDTH 66106813Ssimokawa #ifdef ULONG_MAX 67106813Ssimokawa #if (ULONG_MAX == 0xFFFF) 68106813Ssimokawa #define UNITY_LONG_WIDTH (16) 69106813Ssimokawa #elif (ULONG_MAX == 0xFFFFFFFF) 70106813Ssimokawa #define UNITY_LONG_WIDTH (32) 71106813Ssimokawa #elif (ULONG_MAX == 0xFFFFFFFFFFFFFFFF) 72106813Ssimokawa #define UNITY_LONG_WIDTH (64) 73106813Ssimokawa #endif 74106813Ssimokawa #endif 75106813Ssimokawa#endif 76106813Ssimokawa#ifndef UNITY_LONG_WIDTH 77106813Ssimokawa #define UNITY_LONG_WIDTH (32) 78106813Ssimokawa#endif 79106813Ssimokawa 80106813Ssimokawa// Determine the size of a pointer, if not already specified, 81106813Ssimokawa// by following the process used above to define 82106813Ssimokawa// UNITY_INT_WIDTH. 83106813Ssimokawa#ifndef UNITY_POINTER_WIDTH 84106813Ssimokawa #ifdef UINTPTR_MAX 85106813Ssimokawa #if (UINTPTR_MAX+0 <= 0xFFFF) 86106813Ssimokawa #define UNITY_POINTER_WIDTH (16) 87106813Ssimokawa #elif (UINTPTR_MAX+0 <= 0xFFFFFFFF) 88106813Ssimokawa #define UNITY_POINTER_WIDTH (32) 89106813Ssimokawa #elif (UINTPTR_MAX+0 <= 0xFFFFFFFFFFFFFFFF) 90106813Ssimokawa #define UNITY_POINTER_WIDTH (64) 91106813Ssimokawa #endif 92106813Ssimokawa #endif 93106813Ssimokawa#endif 94106813Ssimokawa#ifndef UNITY_POINTER_WIDTH 95106813Ssimokawa #ifdef INTPTR_MAX 96106813Ssimokawa #if (INTPTR_MAX+0 <= 0x7FFF) 97106813Ssimokawa #define UNITY_POINTER_WIDTH (16) 98106813Ssimokawa #elif (INTPTR_MAX+0 <= 0x7FFFFFFF) 99106813Ssimokawa #define UNITY_POINTER_WIDTH (32) 100106813Ssimokawa #elif (INTPTR_MAX+0 <= 0x7FFFFFFFFFFFFFFF) 101106813Ssimokawa #define UNITY_POINTER_WIDTH (64) 102106813Ssimokawa #endif 103106813Ssimokawa #endif 104106813Ssimokawa#endif 105106813Ssimokawa#ifndef UNITY_POINTER_WIDTH 106106813Ssimokawa #define UNITY_POINTER_WIDTH UNITY_LONG_WIDTH 107106813Ssimokawa#endif 108106813Ssimokawa 109106813Ssimokawa//------------------------------------------------------- 110106813Ssimokawa// Int Support (Define types based on detected sizes) 111106813Ssimokawa//------------------------------------------------------- 112106813Ssimokawa 113106813Ssimokawa#if (UNITY_INT_WIDTH == 32) 114106813Ssimokawa typedef unsigned char _UU8; 115106813Ssimokawa typedef unsigned short _UU16; 116106813Ssimokawa typedef unsigned int _UU32; 117106813Ssimokawa typedef signed char _US8; 118106813Ssimokawa typedef signed short _US16; 119106813Ssimokawa typedef signed int _US32; 120106813Ssimokawa#elif (UNITY_INT_WIDTH == 16) 121106813Ssimokawa typedef unsigned char _UU8; 122106813Ssimokawa typedef unsigned int _UU16; 123106813Ssimokawa typedef unsigned long _UU32; 124106813Ssimokawa typedef signed char _US8; 125106813Ssimokawa typedef signed int _US16; 126106813Ssimokawa typedef signed long _US32; 127106813Ssimokawa#else 128106813Ssimokawa #error Invalid UNITY_INT_WIDTH specified! (16 or 32 are supported) 129106813Ssimokawa#endif 130106813Ssimokawa 131106813Ssimokawa//------------------------------------------------------- 132106813Ssimokawa// 64-bit Support 133106813Ssimokawa//------------------------------------------------------- 134106813Ssimokawa 135106813Ssimokawa#ifndef UNITY_SUPPORT_64 136106813Ssimokawa#if UNITY_LONG_WIDTH > 32 137106813Ssimokawa#define UNITY_SUPPORT_64 138106813Ssimokawa#endif 139106813Ssimokawa#endif 140106813Ssimokawa#ifndef UNITY_SUPPORT_64 141106813Ssimokawa#if UNITY_POINTER_WIDTH > 32 142106813Ssimokawa#define UNITY_SUPPORT_64 143106813Ssimokawa#endif 144106813Ssimokawa#endif 145106813Ssimokawa 146106813Ssimokawa#ifndef UNITY_SUPPORT_64 147106813Ssimokawa 148106813Ssimokawa//No 64-bit Support 149106813Ssimokawatypedef _UU32 _U_UINT; 150106813Ssimokawatypedef _US32 _U_SINT; 151106813Ssimokawa 152106813Ssimokawa#else 153106813Ssimokawa 154106813Ssimokawa//64-bit Support 155106813Ssimokawa#if (UNITY_LONG_WIDTH == 32) 156106813Ssimokawa typedef unsigned long long _UU64; 157106813Ssimokawa typedef signed long long _US64; 158106813Ssimokawa#elif (UNITY_LONG_WIDTH == 64) 159106813Ssimokawa typedef unsigned long _UU64; 160106813Ssimokawa typedef signed long _US64; 161106813Ssimokawa#else 162106813Ssimokawa #error Invalid UNITY_LONG_WIDTH specified! (32 or 64 are supported) 163106813Ssimokawa#endif 164106813Ssimokawatypedef _UU64 _U_UINT; 165109379Ssimokawatypedef _US64 _U_SINT; 166106813Ssimokawa 167106813Ssimokawa#endif 168106813Ssimokawa 169106813Ssimokawa//------------------------------------------------------- 170106813Ssimokawa// Pointer Support 171106813Ssimokawa//------------------------------------------------------- 172106813Ssimokawa 173106813Ssimokawa#if (UNITY_POINTER_WIDTH == 32) 174106813Ssimokawa typedef _UU32 _UP; 175109379Ssimokawa#define UNITY_DISPLAY_STYLE_POINTER UNITY_DISPLAY_STYLE_HEX32 176106813Ssimokawa#elif (UNITY_POINTER_WIDTH == 64) 177106813Ssimokawa typedef _UU64 _UP; 178106813Ssimokawa#define UNITY_DISPLAY_STYLE_POINTER UNITY_DISPLAY_STYLE_HEX64 179106813Ssimokawa#elif (UNITY_POINTER_WIDTH == 16) 180106813Ssimokawa typedef _UU16 _UP; 181106813Ssimokawa#define UNITY_DISPLAY_STYLE_POINTER UNITY_DISPLAY_STYLE_HEX16 182106813Ssimokawa#else 183106813Ssimokawa #error Invalid UNITY_POINTER_WIDTH specified! (16, 32 or 64 are supported) 184106813Ssimokawa#endif 185106813Ssimokawa 186106813Ssimokawa#ifndef UNITY_PTR_ATTRIBUTE 187106813Ssimokawa #define UNITY_PTR_ATTRIBUTE 188106813Ssimokawa#endif 189106813Ssimokawa 190106813Ssimokawa//------------------------------------------------------- 191106813Ssimokawa// Float Support 192106813Ssimokawa//------------------------------------------------------- 193106813Ssimokawa 194106813Ssimokawa#ifdef UNITY_EXCLUDE_FLOAT 195106813Ssimokawa 196106813Ssimokawa//No Floating Point Support 197106813Ssimokawa#undef UNITY_INCLUDE_FLOAT 198106813Ssimokawa#undef UNITY_FLOAT_PRECISION 199106813Ssimokawa#undef UNITY_FLOAT_TYPE 200106813Ssimokawa#undef UNITY_FLOAT_VERBOSE 201106813Ssimokawa 202106813Ssimokawa#else 203106813Ssimokawa 204106813Ssimokawa#ifndef UNITY_INCLUDE_FLOAT 205106813Ssimokawa#define UNITY_INCLUDE_FLOAT 206106813Ssimokawa#endif 207106813Ssimokawa 208106813Ssimokawa//Floating Point Support 209106813Ssimokawa#ifndef UNITY_FLOAT_PRECISION 210106813Ssimokawa#define UNITY_FLOAT_PRECISION (0.00001f) 211106813Ssimokawa#endif 212106813Ssimokawa#ifndef UNITY_FLOAT_TYPE 213106813Ssimokawa#define UNITY_FLOAT_TYPE float 214106813Ssimokawa#endif 215106813Ssimokawatypedef UNITY_FLOAT_TYPE _UF; 216106813Ssimokawa 217106813Ssimokawa#endif 218106813Ssimokawa 219106813Ssimokawa//------------------------------------------------------- 220106813Ssimokawa// Double Float Support 221106813Ssimokawa//------------------------------------------------------- 222106813Ssimokawa 223106813Ssimokawa//unlike FLOAT, we DON'T include by default 224106813Ssimokawa#ifndef UNITY_EXCLUDE_DOUBLE 225106813Ssimokawa#ifndef UNITY_INCLUDE_DOUBLE 226106813Ssimokawa#define UNITY_EXCLUDE_DOUBLE 227106813Ssimokawa#endif 228106813Ssimokawa#endif 229106813Ssimokawa 230106813Ssimokawa#ifdef UNITY_EXCLUDE_DOUBLE 231106813Ssimokawa 232106813Ssimokawa//No Floating Point Support 233106813Ssimokawa#undef UNITY_DOUBLE_PRECISION 234106813Ssimokawa#undef UNITY_DOUBLE_TYPE 235106813Ssimokawa#undef UNITY_DOUBLE_VERBOSE 236106813Ssimokawa 237106813Ssimokawa#ifdef UNITY_INCLUDE_DOUBLE 238106813Ssimokawa#undef UNITY_INCLUDE_DOUBLE 239106813Ssimokawa#endif 240106813Ssimokawa 241106813Ssimokawa#else 242106813Ssimokawa 243106813Ssimokawa//Double Floating Point Support 244106813Ssimokawa#ifndef UNITY_DOUBLE_PRECISION 245106813Ssimokawa#define UNITY_DOUBLE_PRECISION (1e-12f) 246106813Ssimokawa#endif 247106813Ssimokawa#ifndef UNITY_DOUBLE_TYPE 248106813Ssimokawa#define UNITY_DOUBLE_TYPE double 249106813Ssimokawa#endif 250106813Ssimokawatypedef UNITY_DOUBLE_TYPE _UD; 251106813Ssimokawa 252106813Ssimokawa#endif 253106813Ssimokawa 254106813Ssimokawa#ifdef UNITY_DOUBLE_VERBOSE 255106813Ssimokawa#ifndef UNITY_FLOAT_VERBOSE 256106813Ssimokawa#define UNITY_FLOAT_VERBOSE 257106813Ssimokawa#endif 258106813Ssimokawa#endif 259106813Ssimokawa 260106813Ssimokawa//------------------------------------------------------- 261106813Ssimokawa// Output Method: stdout (DEFAULT) 262106813Ssimokawa//------------------------------------------------------- 263106813Ssimokawa#ifndef UNITY_OUTPUT_CHAR 264106813Ssimokawa//Default to using putchar, which is defined in stdio.h 265106813Ssimokawa#include <stdio.h> 266106813Ssimokawa#define UNITY_OUTPUT_CHAR(a) putchar(a) 267106813Ssimokawa#else 268106813Ssimokawa//If defined as something else, make sure we declare it here so it's ready for use 269106813Ssimokawaextern int UNITY_OUTPUT_CHAR(int); 270106813Ssimokawa#endif 271106813Ssimokawa 272106813Ssimokawa#ifndef UNITY_OUTPUT_START 273106813Ssimokawa#define UNITY_OUTPUT_START() 274106813Ssimokawa#endif 275106813Ssimokawa 276106813Ssimokawa#ifndef UNITY_OUTPUT_COMPLETE 277106813Ssimokawa#define UNITY_OUTPUT_COMPLETE() 278106813Ssimokawa#endif 279106813Ssimokawa 280106813Ssimokawa//------------------------------------------------------- 281106813Ssimokawa// Footprint 282106813Ssimokawa//------------------------------------------------------- 283106813Ssimokawa 284106813Ssimokawa#ifndef UNITY_LINE_TYPE 285106813Ssimokawa#define UNITY_LINE_TYPE _U_UINT 286106813Ssimokawa#endif 287106813Ssimokawa 288106813Ssimokawa#ifndef UNITY_COUNTER_TYPE 289106813Ssimokawa#define UNITY_COUNTER_TYPE _U_UINT 290106813Ssimokawa#endif 291106813Ssimokawa 292106813Ssimokawa//------------------------------------------------------- 293106813Ssimokawa// Language Features Available 294106813Ssimokawa//------------------------------------------------------- 295106813Ssimokawa#if !defined(UNITY_WEAK_ATTRIBUTE) && !defined(UNITY_WEAK_PRAGMA) 296106813Ssimokawa# ifdef __GNUC__ // includes clang 297106813Ssimokawa# if !(defined(__WIN32__) && defined(__clang__)) 298106813Ssimokawa# define UNITY_WEAK_ATTRIBUTE __attribute__((weak)) 299106813Ssimokawa# endif 300106813Ssimokawa# endif 301106813Ssimokawa#endif 302106813Ssimokawa 303106813Ssimokawa#ifdef UNITY_NO_WEAK 304106813Ssimokawa# undef UNITY_WEAK_ATTRIBUTE 305106813Ssimokawa# undef UNITY_WEAK_PRAGMA 306106813Ssimokawa#endif 307106813Ssimokawa 308106813Ssimokawa#if !defined(UNITY_NORETURN_ATTRIBUTE) 309106813Ssimokawa# ifdef __GNUC__ // includes clang 310106813Ssimokawa# if !(defined(__WIN32__) && defined(__clang__)) 311106813Ssimokawa# define UNITY_NORETURN_ATTRIBUTE __attribute__((noreturn)) 312106813Ssimokawa# endif 313106813Ssimokawa# endif 314106813Ssimokawa#endif 315106813Ssimokawa 316106813Ssimokawa#ifndef UNITY_NORETURN_ATTRIBUTE 317106813Ssimokawa# define UNITY_NORETURN_ATTRIBUTE 318106813Ssimokawa#endif 319106813Ssimokawa 320106813Ssimokawa 321106813Ssimokawa//------------------------------------------------------- 322106813Ssimokawa// Internal Structs Needed 323106813Ssimokawa//------------------------------------------------------- 324106813Ssimokawa 325106813Ssimokawatypedef void (*UnityTestFunction)(void); 326106813Ssimokawa 327106813Ssimokawa#define UNITY_DISPLAY_RANGE_INT (0x10) 328106813Ssimokawa#define UNITY_DISPLAY_RANGE_UINT (0x20) 329106813Ssimokawa#define UNITY_DISPLAY_RANGE_HEX (0x40) 330106813Ssimokawa#define UNITY_DISPLAY_RANGE_AUTO (0x80) 331106813Ssimokawa 332106813Ssimokawatypedef enum 333106813Ssimokawa{ 334106813Ssimokawa#if (UNITY_INT_WIDTH == 16) 335106813Ssimokawa UNITY_DISPLAY_STYLE_INT = 2 + UNITY_DISPLAY_RANGE_INT + UNITY_DISPLAY_RANGE_AUTO, 336106813Ssimokawa#elif (UNITY_INT_WIDTH == 32) 337106813Ssimokawa UNITY_DISPLAY_STYLE_INT = 4 + UNITY_DISPLAY_RANGE_INT + UNITY_DISPLAY_RANGE_AUTO, 338106813Ssimokawa#elif (UNITY_INT_WIDTH == 64) 339106813Ssimokawa UNITY_DISPLAY_STYLE_INT = 8 + UNITY_DISPLAY_RANGE_INT + UNITY_DISPLAY_RANGE_AUTO, 340106813Ssimokawa#endif 341106813Ssimokawa UNITY_DISPLAY_STYLE_INT8 = 1 + UNITY_DISPLAY_RANGE_INT, 342106813Ssimokawa UNITY_DISPLAY_STYLE_INT16 = 2 + UNITY_DISPLAY_RANGE_INT, 343106813Ssimokawa UNITY_DISPLAY_STYLE_INT32 = 4 + UNITY_DISPLAY_RANGE_INT, 344106813Ssimokawa#ifdef UNITY_SUPPORT_64 345106813Ssimokawa UNITY_DISPLAY_STYLE_INT64 = 8 + UNITY_DISPLAY_RANGE_INT, 346106813Ssimokawa#endif 347106813Ssimokawa 348106813Ssimokawa#if (UNITY_INT_WIDTH == 16) 349106813Ssimokawa UNITY_DISPLAY_STYLE_UINT = 2 + UNITY_DISPLAY_RANGE_UINT + UNITY_DISPLAY_RANGE_AUTO, 350106813Ssimokawa#elif (UNITY_INT_WIDTH == 32) 351106813Ssimokawa UNITY_DISPLAY_STYLE_UINT = 4 + UNITY_DISPLAY_RANGE_UINT + UNITY_DISPLAY_RANGE_AUTO, 352106813Ssimokawa#elif (UNITY_INT_WIDTH == 64) 353106813Ssimokawa UNITY_DISPLAY_STYLE_UINT = 8 + UNITY_DISPLAY_RANGE_UINT + UNITY_DISPLAY_RANGE_AUTO, 354106813Ssimokawa#endif 355106813Ssimokawa UNITY_DISPLAY_STYLE_UINT8 = 1 + UNITY_DISPLAY_RANGE_UINT, 356106813Ssimokawa UNITY_DISPLAY_STYLE_UINT16 = 2 + UNITY_DISPLAY_RANGE_UINT, 357106813Ssimokawa UNITY_DISPLAY_STYLE_UINT32 = 4 + UNITY_DISPLAY_RANGE_UINT, 358106813Ssimokawa#ifdef UNITY_SUPPORT_64 359106813Ssimokawa UNITY_DISPLAY_STYLE_UINT64 = 8 + UNITY_DISPLAY_RANGE_UINT, 360106813Ssimokawa#endif 361106813Ssimokawa UNITY_DISPLAY_STYLE_HEX8 = 1 + UNITY_DISPLAY_RANGE_HEX, 362106813Ssimokawa UNITY_DISPLAY_STYLE_HEX16 = 2 + UNITY_DISPLAY_RANGE_HEX, 363106813Ssimokawa UNITY_DISPLAY_STYLE_HEX32 = 4 + UNITY_DISPLAY_RANGE_HEX, 364106813Ssimokawa#ifdef UNITY_SUPPORT_64 365106813Ssimokawa UNITY_DISPLAY_STYLE_HEX64 = 8 + UNITY_DISPLAY_RANGE_HEX, 366106813Ssimokawa#endif 367106813Ssimokawa UNITY_DISPLAY_STYLE_UNKNOWN 368106813Ssimokawa} UNITY_DISPLAY_STYLE_T; 369106813Ssimokawa 370106813Ssimokawa#ifndef UNITY_EXCLUDE_FLOAT 371106813Ssimokawatypedef enum _UNITY_FLOAT_TRAIT_T 372106813Ssimokawa{ 373106813Ssimokawa UNITY_FLOAT_IS_NOT_INF = 0, 374106813Ssimokawa UNITY_FLOAT_IS_INF, 375106813Ssimokawa UNITY_FLOAT_IS_NOT_NEG_INF, 376106813Ssimokawa UNITY_FLOAT_IS_NEG_INF, 377106813Ssimokawa UNITY_FLOAT_IS_NOT_NAN, 378106813Ssimokawa UNITY_FLOAT_IS_NAN, 379106813Ssimokawa UNITY_FLOAT_IS_NOT_DET, 380106813Ssimokawa UNITY_FLOAT_IS_DET, 381106813Ssimokawa} UNITY_FLOAT_TRAIT_T; 382106813Ssimokawa#endif 383106813Ssimokawa 384106813Ssimokawastruct _Unity 385106813Ssimokawa{ 386106813Ssimokawa const char* TestFile; 387109179Ssimokawa const char* CurrentTestName; 388106813Ssimokawa UNITY_LINE_TYPE CurrentTestLineNumber; 389106813Ssimokawa UNITY_COUNTER_TYPE NumberOfTests; 390109179Ssimokawa UNITY_COUNTER_TYPE TestFailures; 391106813Ssimokawa UNITY_COUNTER_TYPE TestIgnores; 392106813Ssimokawa UNITY_COUNTER_TYPE CurrentTestFailed; 393106813Ssimokawa UNITY_COUNTER_TYPE CurrentTestIgnored; 394106813Ssimokawa jmp_buf AbortFrame; 395106813Ssimokawa int isExpectingFail; 396106813Ssimokawa UNITY_COUNTER_TYPE TestXFAILS; 397106813Ssimokawa UNITY_COUNTER_TYPE TestPasses; 398106813Ssimokawa UNITY_COUNTER_TYPE TestXPASSES; 399106813Ssimokawa const char* XFAILMessage; 400106813Ssimokawa}; 401106813Ssimokawa 402106813Ssimokawaextern struct _Unity Unity; 403106813Ssimokawa 404106813Ssimokawa//------------------------------------------------------- 405106813Ssimokawa// Test Suite Management 406106813Ssimokawa//------------------------------------------------------- 407106813Ssimokawa 408106813Ssimokawavoid UnityBegin(const char* filename); 409106813Ssimokawaint UnityEnd(void); 410106813Ssimokawavoid UnityConcludeTest(void); 411106813Ssimokawavoid UnityDefaultTestRun(UnityTestFunction Func, const char* FuncName, const int FuncLineNum); 412106813Ssimokawa 413106813Ssimokawa//------------------------------------------------------- 414106813Ssimokawa// Test Output 415106813Ssimokawa//------------------------------------------------------- 416106813Ssimokawa 417106813Ssimokawavoid UnityPrint(const char* string); 418106813Ssimokawavoid UnityPrintMask(const _U_UINT mask, const _U_UINT number); 419106813Ssimokawavoid UnityPrintNumberByStyle(const _U_SINT number, const UNITY_DISPLAY_STYLE_T style); 420106813Ssimokawavoid UnityPrintNumber(const _U_SINT number); 421106813Ssimokawavoid UnityPrintNumberUnsigned(const _U_UINT number); 422106813Ssimokawavoid UnityPrintNumberHex(const _U_UINT number, const char nibbles); 423106813Ssimokawa 424106813Ssimokawa#ifdef UNITY_FLOAT_VERBOSE 425106813Ssimokawavoid UnityPrintFloat(const _UF number); 426106813Ssimokawa#endif 427106813Ssimokawa 428109179Ssimokawa//------------------------------------------------------- 429106813Ssimokawa// Test Assertion Fuctions 430106813Ssimokawa//------------------------------------------------------- 431109179Ssimokawa// Use the macros below this section instead of calling 432106813Ssimokawa// these directly. The macros have a consistent naming 433106813Ssimokawa// convention and will pull in file and line information 434106813Ssimokawa// for you. 435106813Ssimokawa 436106813Ssimokawavoid UnityAssertEqualNumber(const _U_SINT expected, 437106813Ssimokawa const _U_SINT actual, 438106813Ssimokawa const char* msg, 439106813Ssimokawa const UNITY_LINE_TYPE lineNumber, 440106813Ssimokawa const UNITY_DISPLAY_STYLE_T style); 441106813Ssimokawa 442106813Ssimokawavoid UnityAssertEqualIntArray(UNITY_PTR_ATTRIBUTE const void* expected, 443106813Ssimokawa UNITY_PTR_ATTRIBUTE const void* actual, 444106813Ssimokawa const _UU32 num_elements, 445106813Ssimokawa const char* msg, 446106813Ssimokawa const UNITY_LINE_TYPE lineNumber, 447106813Ssimokawa const UNITY_DISPLAY_STYLE_T style); 448106813Ssimokawa 449106813Ssimokawavoid UnityAssertBits(const _U_SINT mask, 450106813Ssimokawa const _U_SINT expected, 451106813Ssimokawa const _U_SINT actual, 452106813Ssimokawa const char* msg, 453106813Ssimokawa const UNITY_LINE_TYPE lineNumber); 454106813Ssimokawa 455106813Ssimokawavoid UnityAssertEqualString(const char* expected, 456106813Ssimokawa const char* actual, 457106813Ssimokawa const char* msg, 458106813Ssimokawa const UNITY_LINE_TYPE lineNumber); 459106813Ssimokawa 460106813Ssimokawavoid UnityAssertEqualStringArray( const char** expected, 461106813Ssimokawa const char** actual, 462106813Ssimokawa const _UU32 num_elements, 463106813Ssimokawa const char* msg, 464106813Ssimokawa const UNITY_LINE_TYPE lineNumber); 465106813Ssimokawa 466106813Ssimokawavoid UnityAssertEqualMemory( UNITY_PTR_ATTRIBUTE const void* expected, 467106813Ssimokawa UNITY_PTR_ATTRIBUTE const void* actual, 468106813Ssimokawa const _UU32 length, 469106813Ssimokawa const _UU32 num_elements, 470106813Ssimokawa const char* msg, 471106813Ssimokawa const UNITY_LINE_TYPE lineNumber); 472106813Ssimokawa 473106813Ssimokawavoid UnityAssertNumbersWithin(const _U_SINT delta, 474106813Ssimokawa const _U_SINT expected, 475106813Ssimokawa const _U_SINT actual, 476106813Ssimokawa const char* msg, 477106813Ssimokawa const UNITY_LINE_TYPE lineNumber, 478106813Ssimokawa const UNITY_DISPLAY_STYLE_T style); 479106813Ssimokawa 480106813Ssimokawavoid UnityFail(const char* message, const UNITY_LINE_TYPE line) UNITY_NORETURN_ATTRIBUTE; 481106813Ssimokawa 482106813Ssimokawavoid UnityIgnore(const char* message, const UNITY_LINE_TYPE line); 483106813Ssimokawa 484106813Ssimokawa#ifndef UNITY_EXCLUDE_FLOAT 485106813Ssimokawavoid UnityAssertFloatsWithin(const _UF delta, 486106813Ssimokawa const _UF expected, 487106813Ssimokawa const _UF actual, 488106813Ssimokawa const char* msg, 489106813Ssimokawa const UNITY_LINE_TYPE lineNumber); 490106813Ssimokawa 491106813Ssimokawavoid UnityAssertEqualFloatArray(UNITY_PTR_ATTRIBUTE const _UF* expected, 492106813Ssimokawa UNITY_PTR_ATTRIBUTE const _UF* actual, 493106813Ssimokawa const _UU32 num_elements, 494106813Ssimokawa const char* msg, 495106813Ssimokawa const UNITY_LINE_TYPE lineNumber); 496106813Ssimokawa 497106813Ssimokawavoid UnityAssertFloatSpecial(const _UF actual, 498106813Ssimokawa const char* msg, 499106813Ssimokawa const UNITY_LINE_TYPE lineNumber, 500106813Ssimokawa const UNITY_FLOAT_TRAIT_T style); 501106813Ssimokawa#endif 502106813Ssimokawa 503106813Ssimokawa#ifndef UNITY_EXCLUDE_DOUBLE 504106813Ssimokawavoid UnityAssertDoublesWithin(const _UD delta, 505106813Ssimokawa const _UD expected, 506106813Ssimokawa const _UD actual, 507106813Ssimokawa const char* msg, 508106813Ssimokawa const UNITY_LINE_TYPE lineNumber); 509106813Ssimokawa 510106813Ssimokawavoid UnityAssertEqualDoubleArray(UNITY_PTR_ATTRIBUTE const _UD* expected, 511106813Ssimokawa UNITY_PTR_ATTRIBUTE const _UD* actual, 512106813Ssimokawa const _UU32 num_elements, 513106813Ssimokawa const char* msg, 514106813Ssimokawa const UNITY_LINE_TYPE lineNumber); 515106813Ssimokawa 516106813Ssimokawavoid UnityAssertDoubleSpecial(const _UD actual, 517106813Ssimokawa const char* msg, 518106813Ssimokawa const UNITY_LINE_TYPE lineNumber, 519106813Ssimokawa const UNITY_FLOAT_TRAIT_T style); 520106813Ssimokawa#endif 521106813Ssimokawa 522106813Ssimokawa//------------------------------------------------------- 523106813Ssimokawa// Error Strings We Might Need 524106813Ssimokawa//------------------------------------------------------- 525106813Ssimokawa 526106813Ssimokawaextern const char UnityStrErrFloat[]; 527106813Ssimokawaextern const char UnityStrErrDouble[]; 528106813Ssimokawaextern const char UnityStrErr64[]; 529106813Ssimokawa 530106813Ssimokawa//------------------------------------------------------- 531106813Ssimokawa// Test Running Macros 532106813Ssimokawa//------------------------------------------------------- 533106813Ssimokawa 534106813Ssimokawa#define TEST_PROTECT() (setjmp(Unity.AbortFrame) == 0) 535106813Ssimokawa 536106813Ssimokawa#define TEST_ABORT() {longjmp(Unity.AbortFrame, 1);} 537106813Ssimokawa 538106813Ssimokawa//This tricky series of macros gives us an optional line argument to treat it as RUN_TEST(func, num=__LINE__) 539106813Ssimokawa#ifndef RUN_TEST 540106813Ssimokawa#ifdef __STDC_VERSION__ 541106813Ssimokawa#if __STDC_VERSION__ >= 199901L 542106813Ssimokawa#define RUN_TEST(...) UnityDefaultTestRun(RUN_TEST_FIRST(__VA_ARGS__), RUN_TEST_SECOND(__VA_ARGS__)) 543106813Ssimokawa#define RUN_TEST_FIRST(...) RUN_TEST_FIRST_HELPER(__VA_ARGS__, throwaway) 544106813Ssimokawa#define RUN_TEST_FIRST_HELPER(first,...) first, #first 545106813Ssimokawa#define RUN_TEST_SECOND(...) RUN_TEST_SECOND_HELPER(__VA_ARGS__, __LINE__, throwaway) 546106813Ssimokawa#define RUN_TEST_SECOND_HELPER(first,second,...) second 547106813Ssimokawa#endif 548106813Ssimokawa#endif 549106813Ssimokawa#endif 550106813Ssimokawa 551106813Ssimokawa//If we can't do the tricky version, we'll just have to require them to always include the line number 552106813Ssimokawa#ifndef RUN_TEST 553106813Ssimokawa#ifdef CMOCK 554106813Ssimokawa#define RUN_TEST(func, num) UnityDefaultTestRun(func, #func, num) 555106813Ssimokawa#else 556106813Ssimokawa#define RUN_TEST(func) UnityDefaultTestRun(func, #func, __LINE__) 557106813Ssimokawa#endif 558106813Ssimokawa#endif 559106813Ssimokawa 560106813Ssimokawa#define TEST_LINE_NUM (Unity.CurrentTestLineNumber) 561106813Ssimokawa#define TEST_IS_IGNORED (Unity.CurrentTestIgnored) 562106813Ssimokawa#define UNITY_NEW_TEST(a) \ 563106813Ssimokawa Unity.CurrentTestName = a; \ 564106813Ssimokawa Unity.CurrentTestLineNumber = (UNITY_LINE_TYPE)(__LINE__); \ 565106813Ssimokawa Unity.NumberOfTests++; 566106813Ssimokawa 567106813Ssimokawa#ifndef UNITY_BEGIN 568106813Ssimokawa#define UNITY_BEGIN() UnityBegin(__FILE__) 569106813Ssimokawa#endif 570106813Ssimokawa 571106813Ssimokawa#ifndef UNITY_END 572109282Ssimokawa#define UNITY_END() UnityEnd() 573109282Ssimokawa#endif 574109282Ssimokawa 575109282Ssimokawa//------------------------------------------------------- 576109282Ssimokawa// Basic Fail and Ignore 577106813Ssimokawa//------------------------------------------------------- 578106813Ssimokawa 579106813Ssimokawa#define UNITY_TEST_FAIL(line, message) UnityFail( (message), (UNITY_LINE_TYPE)line); 580106813Ssimokawa#define UNITY_TEST_IGNORE(line, message) UnityIgnore( (message), (UNITY_LINE_TYPE)line); 581106813Ssimokawa 582106813Ssimokawa//------------------------------------------------------- 583109282Ssimokawa// Test Asserts 584106813Ssimokawa//------------------------------------------------------- 585106813Ssimokawa 586106813Ssimokawa#define UNITY_TEST_ASSERT(condition, line, message) if (condition) {} else {UNITY_TEST_FAIL((UNITY_LINE_TYPE)line, message);} 587106813Ssimokawa#define UNITY_TEST_ASSERT_NULL(pointer, line, message) UNITY_TEST_ASSERT(((pointer) == NULL), (UNITY_LINE_TYPE)line, message) 588106813Ssimokawa#define UNITY_TEST_ASSERT_NOT_NULL(pointer, line, message) UNITY_TEST_ASSERT(((pointer) != NULL), (UNITY_LINE_TYPE)line, message) 589106813Ssimokawa 590106813Ssimokawa#define UNITY_TEST_ASSERT_EQUAL_INT(expected, actual, line, message) UnityAssertEqualNumber((_U_SINT)(expected), (_U_SINT)(actual), (message), (UNITY_LINE_TYPE)line, UNITY_DISPLAY_STYLE_INT) 591106813Ssimokawa#define UNITY_TEST_ASSERT_EQUAL_INT8(expected, actual, line, message) UnityAssertEqualNumber((_U_SINT)(_US8 )(expected), (_U_SINT)(_US8 )(actual), (message), (UNITY_LINE_TYPE)line, UNITY_DISPLAY_STYLE_INT8) 592106813Ssimokawa#define UNITY_TEST_ASSERT_EQUAL_INT16(expected, actual, line, message) UnityAssertEqualNumber((_U_SINT)(_US16)(expected), (_U_SINT)(_US16)(actual), (message), (UNITY_LINE_TYPE)line, UNITY_DISPLAY_STYLE_INT16) 593106813Ssimokawa#define UNITY_TEST_ASSERT_EQUAL_INT32(expected, actual, line, message) UnityAssertEqualNumber((_U_SINT)(_US32)(expected), (_U_SINT)(_US32)(actual), (message), (UNITY_LINE_TYPE)line, UNITY_DISPLAY_STYLE_INT32) 594109179Ssimokawa#define UNITY_TEST_ASSERT_EQUAL_UINT(expected, actual, line, message) UnityAssertEqualNumber((_U_SINT)(expected), (_U_SINT)(actual), (message), (UNITY_LINE_TYPE)line, UNITY_DISPLAY_STYLE_UINT) 595106813Ssimokawa#define UNITY_TEST_ASSERT_EQUAL_UINT8(expected, actual, line, message) UnityAssertEqualNumber((_U_SINT)(_UU8 )(expected), (_U_SINT)(_UU8 )(actual), (message), (UNITY_LINE_TYPE)line, UNITY_DISPLAY_STYLE_UINT8) 596106813Ssimokawa#define UNITY_TEST_ASSERT_EQUAL_UINT16(expected, actual, line, message) UnityAssertEqualNumber((_U_SINT)(_UU16)(expected), (_U_SINT)(_UU16)(actual), (message), (UNITY_LINE_TYPE)line, UNITY_DISPLAY_STYLE_UINT16) 597106813Ssimokawa#define UNITY_TEST_ASSERT_EQUAL_UINT32(expected, actual, line, message) UnityAssertEqualNumber((_U_SINT)(_UU32)(expected), (_U_SINT)(_UU32)(actual), (message), (UNITY_LINE_TYPE)line, UNITY_DISPLAY_STYLE_UINT32) 598106813Ssimokawa#define UNITY_TEST_ASSERT_EQUAL_HEX8(expected, actual, line, message) UnityAssertEqualNumber((_U_SINT)(_US8 )(expected), (_U_SINT)(_US8 )(actual), (message), (UNITY_LINE_TYPE)line, UNITY_DISPLAY_STYLE_HEX8) 599106813Ssimokawa#define UNITY_TEST_ASSERT_EQUAL_HEX16(expected, actual, line, message) UnityAssertEqualNumber((_U_SINT)(_US16)(expected), (_U_SINT)(_US16)(actual), (message), (UNITY_LINE_TYPE)line, UNITY_DISPLAY_STYLE_HEX16) 600109179Ssimokawa#define UNITY_TEST_ASSERT_EQUAL_HEX32(expected, actual, line, message) UnityAssertEqualNumber((_U_SINT)(_US32)(expected), (_U_SINT)(_US32)(actual), (message), (UNITY_LINE_TYPE)line, UNITY_DISPLAY_STYLE_HEX32) 601106813Ssimokawa#define UNITY_TEST_ASSERT_BITS(mask, expected, actual, line, message) UnityAssertBits((_U_SINT)(mask), (_U_SINT)(expected), (_U_SINT)(actual), (message), (UNITY_LINE_TYPE)line) 602106813Ssimokawa 603106813Ssimokawa#define UNITY_TEST_ASSERT_INT_WITHIN(delta, expected, actual, line, message) UnityAssertNumbersWithin((_U_SINT)(delta), (_U_SINT)(expected), (_U_SINT)(actual), (message), (UNITY_LINE_TYPE)line, UNITY_DISPLAY_STYLE_INT) 604106813Ssimokawa#define UNITY_TEST_ASSERT_INT8_WITHIN(delta, expected, actual, line, message) UnityAssertNumbersWithin((_U_SINT)(_US8 )(delta), (_U_SINT)(_US8 )(expected), (_U_SINT)(_US8 )(actual), (message), (UNITY_LINE_TYPE)line, UNITY_DISPLAY_STYLE_INT8) 605106813Ssimokawa#define UNITY_TEST_ASSERT_INT16_WITHIN(delta, expected, actual, line, message) UnityAssertNumbersWithin((_U_SINT)(_US16)(delta), (_U_SINT)(_US16)(expected), (_U_SINT)(_US16)(actual), (message), (UNITY_LINE_TYPE)line, UNITY_DISPLAY_STYLE_INT16) 606106813Ssimokawa#define UNITY_TEST_ASSERT_INT32_WITHIN(delta, expected, actual, line, message) UnityAssertNumbersWithin((_U_SINT)(_US32)(delta), (_U_SINT)(_US32)(expected), (_U_SINT)(_US32)(actual), (message), (UNITY_LINE_TYPE)line, UNITY_DISPLAY_STYLE_INT32) 607106813Ssimokawa#define UNITY_TEST_ASSERT_UINT_WITHIN(delta, expected, actual, line, message) UnityAssertNumbersWithin((_U_SINT)(delta), (_U_SINT)(expected), (_U_SINT)(actual), (message), (UNITY_LINE_TYPE)line, UNITY_DISPLAY_STYLE_UINT) 608106813Ssimokawa#define UNITY_TEST_ASSERT_UINT8_WITHIN(delta, expected, actual, line, message) UnityAssertNumbersWithin((_U_SINT)(_U_UINT)(_UU8 )(delta), (_U_SINT)(_U_UINT)(_UU8 )(expected), (_U_SINT)(_U_UINT)(_UU8 )(actual), (message), (UNITY_LINE_TYPE)line, UNITY_DISPLAY_STYLE_UINT8) 609106813Ssimokawa#define UNITY_TEST_ASSERT_UINT16_WITHIN(delta, expected, actual, line, message) UnityAssertNumbersWithin((_U_SINT)(_U_UINT)(_UU16)(delta), (_U_SINT)(_U_UINT)(_UU16)(expected), (_U_SINT)(_U_UINT)(_UU16)(actual), (message), (UNITY_LINE_TYPE)line, UNITY_DISPLAY_STYLE_UINT16) 610106813Ssimokawa#define UNITY_TEST_ASSERT_UINT32_WITHIN(delta, expected, actual, line, message) UnityAssertNumbersWithin((_U_SINT)(_U_UINT)(_UU32)(delta), (_U_SINT)(_U_UINT)(_UU32)(expected), (_U_SINT)(_U_UINT)(_UU32)(actual), (message), (UNITY_LINE_TYPE)line, UNITY_DISPLAY_STYLE_UINT32) 611106813Ssimokawa#define UNITY_TEST_ASSERT_HEX8_WITHIN(delta, expected, actual, line, message) UnityAssertNumbersWithin((_U_SINT)(_U_UINT)(_UU8 )(delta), (_U_SINT)(_U_UINT)(_UU8 )(expected), (_U_SINT)(_U_UINT)(_UU8 )(actual), (message), (UNITY_LINE_TYPE)line, UNITY_DISPLAY_STYLE_HEX8) 612106813Ssimokawa#define UNITY_TEST_ASSERT_HEX16_WITHIN(delta, expected, actual, line, message) UnityAssertNumbersWithin((_U_SINT)(_U_UINT)(_UU16)(delta), (_U_SINT)(_U_UINT)(_UU16)(expected), (_U_SINT)(_U_UINT)(_UU16)(actual), (message), (UNITY_LINE_TYPE)line, UNITY_DISPLAY_STYLE_HEX16) 613106813Ssimokawa#define UNITY_TEST_ASSERT_HEX32_WITHIN(delta, expected, actual, line, message) UnityAssertNumbersWithin((_U_SINT)(_U_UINT)(_UU32)(delta), (_U_SINT)(_U_UINT)(_UU32)(expected), (_U_SINT)(_U_UINT)(_UU32)(actual), (message), (UNITY_LINE_TYPE)line, UNITY_DISPLAY_STYLE_HEX32) 614106813Ssimokawa 615106813Ssimokawa#define UNITY_TEST_ASSERT_EQUAL_PTR(expected, actual, line, message) UnityAssertEqualNumber((_U_SINT)(_UP)(expected), (_U_SINT)(_UP)(actual), (message), (UNITY_LINE_TYPE)line, UNITY_DISPLAY_STYLE_POINTER) 616106813Ssimokawa#define UNITY_TEST_ASSERT_EQUAL_STRING(expected, actual, line, message) UnityAssertEqualString((const char*)(expected), (const char*)(actual), (message), (UNITY_LINE_TYPE)line) 617106813Ssimokawa#define UNITY_TEST_ASSERT_EQUAL_MEMORY(expected, actual, len, line, message) UnityAssertEqualMemory((UNITY_PTR_ATTRIBUTE const void*)(expected), (UNITY_PTR_ATTRIBUTE const void*)(actual), (_UU32)(len), 1, (message), (UNITY_LINE_TYPE)line) 618106813Ssimokawa 619106813Ssimokawa#define UNITY_TEST_ASSERT_EQUAL_INT_ARRAY(expected, actual, num_elements, line, message) UnityAssertEqualIntArray((UNITY_PTR_ATTRIBUTE const void*)(expected), (UNITY_PTR_ATTRIBUTE const void*)(actual), (_UU32)(num_elements), (message), (UNITY_LINE_TYPE)line, UNITY_DISPLAY_STYLE_INT) 620106813Ssimokawa#define UNITY_TEST_ASSERT_EQUAL_INT8_ARRAY(expected, actual, num_elements, line, message) UnityAssertEqualIntArray((UNITY_PTR_ATTRIBUTE const void*)(expected), (UNITY_PTR_ATTRIBUTE const void*)(actual), (_UU32)(num_elements), (message), (UNITY_LINE_TYPE)line, UNITY_DISPLAY_STYLE_INT8) 621106813Ssimokawa#define UNITY_TEST_ASSERT_EQUAL_INT16_ARRAY(expected, actual, num_elements, line, message) UnityAssertEqualIntArray((UNITY_PTR_ATTRIBUTE const void*)(expected), (UNITY_PTR_ATTRIBUTE const void*)(actual), (_UU32)(num_elements), (message), (UNITY_LINE_TYPE)line, UNITY_DISPLAY_STYLE_INT16) 622106813Ssimokawa#define UNITY_TEST_ASSERT_EQUAL_INT32_ARRAY(expected, actual, num_elements, line, message) UnityAssertEqualIntArray((UNITY_PTR_ATTRIBUTE const void*)(expected), (UNITY_PTR_ATTRIBUTE const void*)(actual), (_UU32)(num_elements), (message), (UNITY_LINE_TYPE)line, UNITY_DISPLAY_STYLE_INT32) 623106813Ssimokawa#define UNITY_TEST_ASSERT_EQUAL_UINT_ARRAY(expected, actual, num_elements, line, message) UnityAssertEqualIntArray((UNITY_PTR_ATTRIBUTE const void*)(expected), (UNITY_PTR_ATTRIBUTE const void*)(actual), (_UU32)(num_elements), (message), (UNITY_LINE_TYPE)line, UNITY_DISPLAY_STYLE_UINT) 624106813Ssimokawa#define UNITY_TEST_ASSERT_EQUAL_UINT8_ARRAY(expected, actual, num_elements, line, message) UnityAssertEqualIntArray((UNITY_PTR_ATTRIBUTE const void*)(expected), (UNITY_PTR_ATTRIBUTE const void*)(actual), (_UU32)(num_elements), (message), (UNITY_LINE_TYPE)line, UNITY_DISPLAY_STYLE_UINT8) 625106813Ssimokawa#define UNITY_TEST_ASSERT_EQUAL_UINT16_ARRAY(expected, actual, num_elements, line, message) UnityAssertEqualIntArray((UNITY_PTR_ATTRIBUTE const void*)(expected), (UNITY_PTR_ATTRIBUTE const void*)(actual), (_UU32)(num_elements), (message), (UNITY_LINE_TYPE)line, UNITY_DISPLAY_STYLE_UINT16) 626106813Ssimokawa#define UNITY_TEST_ASSERT_EQUAL_UINT32_ARRAY(expected, actual, num_elements, line, message) UnityAssertEqualIntArray((UNITY_PTR_ATTRIBUTE const void*)(expected), (UNITY_PTR_ATTRIBUTE const void*)(actual), (_UU32)(num_elements), (message), (UNITY_LINE_TYPE)line, UNITY_DISPLAY_STYLE_UINT32) 627106813Ssimokawa#define UNITY_TEST_ASSERT_EQUAL_HEX8_ARRAY(expected, actual, num_elements, line, message) UnityAssertEqualIntArray((UNITY_PTR_ATTRIBUTE const void*)(expected), (UNITY_PTR_ATTRIBUTE const void*)(actual), (_UU32)(num_elements), (message), (UNITY_LINE_TYPE)line, UNITY_DISPLAY_STYLE_HEX8) 628106813Ssimokawa#define UNITY_TEST_ASSERT_EQUAL_HEX16_ARRAY(expected, actual, num_elements, line, message) UnityAssertEqualIntArray((UNITY_PTR_ATTRIBUTE const void*)(expected), (UNITY_PTR_ATTRIBUTE const void*)(actual), (_UU32)(num_elements), (message), (UNITY_LINE_TYPE)line, UNITY_DISPLAY_STYLE_HEX16) 629106813Ssimokawa#define UNITY_TEST_ASSERT_EQUAL_HEX32_ARRAY(expected, actual, num_elements, line, message) UnityAssertEqualIntArray((UNITY_PTR_ATTRIBUTE const void*)(expected), (UNITY_PTR_ATTRIBUTE const void*)(actual), (_UU32)(num_elements), (message), (UNITY_LINE_TYPE)line, UNITY_DISPLAY_STYLE_HEX32) 630106813Ssimokawa#define UNITY_TEST_ASSERT_EQUAL_PTR_ARRAY(expected, actual, num_elements, line, message) UnityAssertEqualIntArray((UNITY_PTR_ATTRIBUTE const void*)(_UP*)(expected), (const void*)(_UP*)(actual), (_UU32)(num_elements), (message), (UNITY_LINE_TYPE)line, UNITY_DISPLAY_STYLE_POINTER) 631106813Ssimokawa#define UNITY_TEST_ASSERT_EQUAL_STRING_ARRAY(expected, actual, num_elements, line, message) UnityAssertEqualStringArray((const char**)(expected), (const char**)(actual), (_UU32)(num_elements), (message), (UNITY_LINE_TYPE)line) 632106813Ssimokawa#define UNITY_TEST_ASSERT_EQUAL_MEMORY_ARRAY(expected, actual, len, num_elements, line, message) UnityAssertEqualMemory((UNITY_PTR_ATTRIBUTE void*)(expected), (UNITY_PTR_ATTRIBUTE void*)(actual), (_UU32)(len), (_UU32)(num_elements), (message), (UNITY_LINE_TYPE)line) 633106813Ssimokawa 634106813Ssimokawa#ifdef UNITY_SUPPORT_64 635106813Ssimokawa#define UNITY_TEST_ASSERT_EQUAL_INT64(expected, actual, line, message) UnityAssertEqualNumber((_U_SINT)(expected), (_U_SINT)(actual), (message), (UNITY_LINE_TYPE)line, UNITY_DISPLAY_STYLE_INT64) 636106813Ssimokawa#define UNITY_TEST_ASSERT_EQUAL_UINT64(expected, actual, line, message) UnityAssertEqualNumber((_U_SINT)(expected), (_U_SINT)(actual), (message), (UNITY_LINE_TYPE)line, UNITY_DISPLAY_STYLE_UINT64) 637106813Ssimokawa#define UNITY_TEST_ASSERT_EQUAL_HEX64(expected, actual, line, message) UnityAssertEqualNumber((_U_SINT)(expected), (_U_SINT)(actual), (message), (UNITY_LINE_TYPE)line, UNITY_DISPLAY_STYLE_HEX64) 638106813Ssimokawa#define UNITY_TEST_ASSERT_EQUAL_INT64_ARRAY(expected, actual, num_elements, line, message) UnityAssertEqualIntArray((UNITY_PTR_ATTRIBUTE const _U_SINT*)(expected), (UNITY_PTR_ATTRIBUTE const _U_SINT*)(actual), (_UU32)(num_elements), (message), (UNITY_LINE_TYPE)line, UNITY_DISPLAY_STYLE_INT64) 639109403Ssimokawa#define UNITY_TEST_ASSERT_EQUAL_UINT64_ARRAY(expected, actual, num_elements, line, message) UnityAssertEqualIntArray((UNITY_PTR_ATTRIBUTE const _U_SINT*)(expected), (UNITY_PTR_ATTRIBUTE const _U_SINT*)(actual), (_UU32)(num_elements), (message), (UNITY_LINE_TYPE)line, UNITY_DISPLAY_STYLE_UINT64) 640109403Ssimokawa#define UNITY_TEST_ASSERT_EQUAL_HEX64_ARRAY(expected, actual, num_elements, line, message) UnityAssertEqualIntArray((UNITY_PTR_ATTRIBUTE const _U_SINT*)(expected), (UNITY_PTR_ATTRIBUTE const _U_SINT*)(actual), (_UU32)(num_elements), (message), (UNITY_LINE_TYPE)line, UNITY_DISPLAY_STYLE_HEX64) 641106813Ssimokawa#define UNITY_TEST_ASSERT_INT64_WITHIN(delta, expected, actual, line, message) UnityAssertNumbersWithin((_U_SINT)(delta), (_U_SINT)(expected), (_U_SINT)(actual), NULL, (UNITY_LINE_TYPE)line, UNITY_DISPLAY_STYLE_INT64) 642106813Ssimokawa#define UNITY_TEST_ASSERT_UINT64_WITHIN(delta, expected, actual, line, message) UnityAssertNumbersWithin((_U_SINT)(delta), (_U_SINT)(expected), (_U_SINT)(actual), NULL, (UNITY_LINE_TYPE)line, UNITY_DISPLAY_STYLE_UINT64) 643106813Ssimokawa#define UNITY_TEST_ASSERT_HEX64_WITHIN(delta, expected, actual, line, message) UnityAssertNumbersWithin((_U_SINT)(delta), (_U_SINT)(expected), (_U_SINT)(actual), NULL, (UNITY_LINE_TYPE)line, UNITY_DISPLAY_STYLE_HEX64) 644106813Ssimokawa#else 645106813Ssimokawa#define UNITY_TEST_ASSERT_EQUAL_INT64(expected, actual, line, message) UNITY_TEST_FAIL((UNITY_LINE_TYPE)line, UnityStrErr64) 646106813Ssimokawa#define UNITY_TEST_ASSERT_EQUAL_UINT64(expected, actual, line, message) UNITY_TEST_FAIL((UNITY_LINE_TYPE)line, UnityStrErr64) 647106813Ssimokawa#define UNITY_TEST_ASSERT_EQUAL_HEX64(expected, actual, line, message) UNITY_TEST_FAIL((UNITY_LINE_TYPE)line, UnityStrErr64) 648106813Ssimokawa#define UNITY_TEST_ASSERT_EQUAL_INT64_ARRAY(expected, actual, num_elements, line, message) UNITY_TEST_FAIL((UNITY_LINE_TYPE)line, UnityStrErr64) 649106813Ssimokawa#define UNITY_TEST_ASSERT_EQUAL_UINT64_ARRAY(expected, actual, num_elements, line, message) UNITY_TEST_FAIL((UNITY_LINE_TYPE)line, UnityStrErr64) 650106813Ssimokawa#define UNITY_TEST_ASSERT_EQUAL_HEX64_ARRAY(expected, actual, num_elements, line, message) UNITY_TEST_FAIL((UNITY_LINE_TYPE)line, UnityStrErr64) 651106813Ssimokawa#define UNITY_TEST_ASSERT_INT64_WITHIN(delta, expected, actual, line, message) UNITY_TEST_FAIL((UNITY_LINE_TYPE)line, UnityStrErr64) 652106813Ssimokawa#define UNITY_TEST_ASSERT_UINT64_WITHIN(delta, expected, actual, line, message) UNITY_TEST_FAIL((UNITY_LINE_TYPE)line, UnityStrErr64) 653109403Ssimokawa#define UNITY_TEST_ASSERT_HEX64_WITHIN(delta, expected, actual, line, message) UNITY_TEST_FAIL((UNITY_LINE_TYPE)line, UnityStrErr64) 654109403Ssimokawa#endif 655106813Ssimokawa 656106813Ssimokawa#ifdef UNITY_EXCLUDE_FLOAT 657106813Ssimokawa#define UNITY_TEST_ASSERT_FLOAT_WITHIN(delta, expected, actual, line, message) UNITY_TEST_FAIL((UNITY_LINE_TYPE)line, UnityStrErrFloat) 658106813Ssimokawa#define UNITY_TEST_ASSERT_EQUAL_FLOAT(expected, actual, line, message) UNITY_TEST_FAIL((UNITY_LINE_TYPE)line, UnityStrErrFloat) 659106813Ssimokawa#define UNITY_TEST_ASSERT_EQUAL_FLOAT_ARRAY(expected, actual, num_elements, line, message) UNITY_TEST_FAIL((UNITY_LINE_TYPE)line, UnityStrErrFloat) 660106813Ssimokawa#define UNITY_TEST_ASSERT_FLOAT_IS_INF(actual, line, message) UNITY_TEST_FAIL((UNITY_LINE_TYPE)line, UnityStrErrFloat) 661106813Ssimokawa#define UNITY_TEST_ASSERT_FLOAT_IS_NEG_INF(actual, line, message) UNITY_TEST_FAIL((UNITY_LINE_TYPE)line, UnityStrErrFloat) 662106813Ssimokawa#define UNITY_TEST_ASSERT_FLOAT_IS_NAN(actual, line, message) UNITY_TEST_FAIL((UNITY_LINE_TYPE)line, UnityStrErrFloat) 663106813Ssimokawa#define UNITY_TEST_ASSERT_FLOAT_IS_DETERMINATE(actual, line, message) UNITY_TEST_FAIL((UNITY_LINE_TYPE)line, UnityStrErrFloat) 664106813Ssimokawa#define UNITY_TEST_ASSERT_FLOAT_IS_NOT_INF(actual, line, message) UNITY_TEST_FAIL((UNITY_LINE_TYPE)line, UnityStrErrFloat) 665106813Ssimokawa#define UNITY_TEST_ASSERT_FLOAT_IS_NOT_NEG_INF(actual, line, message) UNITY_TEST_FAIL((UNITY_LINE_TYPE)line, UnityStrErrFloat) 666106813Ssimokawa#define UNITY_TEST_ASSERT_FLOAT_IS_NOT_NAN(actual, line, message) UNITY_TEST_FAIL((UNITY_LINE_TYPE)line, UnityStrErrFloat) 667106813Ssimokawa#define UNITY_TEST_ASSERT_FLOAT_IS_NOT_DETERMINATE(actual, line, message) UNITY_TEST_FAIL((UNITY_LINE_TYPE)line, UnityStrErrFloat) 668106813Ssimokawa#else 669106813Ssimokawa#define UNITY_TEST_ASSERT_FLOAT_WITHIN(delta, expected, actual, line, message) UnityAssertFloatsWithin((_UF)(delta), (_UF)(expected), (_UF)(actual), (message), (UNITY_LINE_TYPE)line) 670106813Ssimokawa#define UNITY_TEST_ASSERT_EQUAL_FLOAT(expected, actual, line, message) UNITY_TEST_ASSERT_FLOAT_WITHIN((_UF)(expected) * (_UF)UNITY_FLOAT_PRECISION, (_UF)expected, (_UF)actual, (UNITY_LINE_TYPE)line, message) 671106813Ssimokawa#define UNITY_TEST_ASSERT_EQUAL_FLOAT_ARRAY(expected, actual, num_elements, line, message) UnityAssertEqualFloatArray((_UF*)(expected), (_UF*)(actual), (_UU32)(num_elements), (message), (UNITY_LINE_TYPE)line) 672106813Ssimokawa#define UNITY_TEST_ASSERT_FLOAT_IS_INF(actual, line, message) UnityAssertFloatSpecial((_UF)(actual), (message), (UNITY_LINE_TYPE)line, UNITY_FLOAT_IS_INF) 673106813Ssimokawa#define UNITY_TEST_ASSERT_FLOAT_IS_NEG_INF(actual, line, message) UnityAssertFloatSpecial((_UF)(actual), (message), (UNITY_LINE_TYPE)line, UNITY_FLOAT_IS_NEG_INF) 674106813Ssimokawa#define UNITY_TEST_ASSERT_FLOAT_IS_NAN(actual, line, message) UnityAssertFloatSpecial((_UF)(actual), (message), (UNITY_LINE_TYPE)line, UNITY_FLOAT_IS_NAN) 675106813Ssimokawa#define UNITY_TEST_ASSERT_FLOAT_IS_DETERMINATE(actual, line, message) UnityAssertFloatSpecial((_UF)(actual), (message), (UNITY_LINE_TYPE)line, UNITY_FLOAT_IS_DET) 676106813Ssimokawa#define UNITY_TEST_ASSERT_FLOAT_IS_NOT_INF(actual, line, message) UnityAssertFloatSpecial((_UF)(actual), (message), (UNITY_LINE_TYPE)line, UNITY_FLOAT_IS_NOT_INF) 677106813Ssimokawa#define UNITY_TEST_ASSERT_FLOAT_IS_NOT_NEG_INF(actual, line, message) UnityAssertFloatSpecial((_UF)(actual), (message), (UNITY_LINE_TYPE)line, UNITY_FLOAT_IS_NOT_NEG_INF) 678106813Ssimokawa#define UNITY_TEST_ASSERT_FLOAT_IS_NOT_NAN(actual, line, message) UnityAssertFloatSpecial((_UF)(actual), (message), (UNITY_LINE_TYPE)line, UNITY_FLOAT_IS_NOT_NAN) 679106813Ssimokawa#define UNITY_TEST_ASSERT_FLOAT_IS_NOT_DETERMINATE(actual, line, message) UnityAssertFloatSpecial((_UF)(actual), (message), (UNITY_LINE_TYPE)line, UNITY_FLOAT_IS_NOT_DET) 680106813Ssimokawa#endif 681109179Ssimokawa 682106813Ssimokawa#ifdef UNITY_EXCLUDE_DOUBLE 683106813Ssimokawa#define UNITY_TEST_ASSERT_DOUBLE_WITHIN(delta, expected, actual, line, message) UNITY_TEST_FAIL((UNITY_LINE_TYPE)line, UnityStrErrDouble) 684106813Ssimokawa#define UNITY_TEST_ASSERT_EQUAL_DOUBLE(expected, actual, line, message) UNITY_TEST_FAIL((UNITY_LINE_TYPE)line, UnityStrErrDouble) 685106813Ssimokawa#define UNITY_TEST_ASSERT_EQUAL_DOUBLE_ARRAY(expected, actual, num_elements, line, message) UNITY_TEST_FAIL((UNITY_LINE_TYPE)line, UnityStrErrDouble) 686106813Ssimokawa#define UNITY_TEST_ASSERT_DOUBLE_IS_INF(actual, line, message) UNITY_TEST_FAIL((UNITY_LINE_TYPE)line, UnityStrErrDouble) 687106813Ssimokawa#define UNITY_TEST_ASSERT_DOUBLE_IS_NEG_INF(actual, line, message) UNITY_TEST_FAIL((UNITY_LINE_TYPE)line, UnityStrErrDouble) 688106813Ssimokawa#define UNITY_TEST_ASSERT_DOUBLE_IS_NAN(actual, line, message) UNITY_TEST_FAIL((UNITY_LINE_TYPE)line, UnityStrErrDouble) 689106813Ssimokawa#define UNITY_TEST_ASSERT_DOUBLE_IS_DETERMINATE(actual, line, message) UNITY_TEST_FAIL((UNITY_LINE_TYPE)line, UnityStrErrDouble) 690106813Ssimokawa#define UNITY_TEST_ASSERT_DOUBLE_IS_NOT_INF(actual, line, message) UNITY_TEST_FAIL((UNITY_LINE_TYPE)line, UnityStrErrDouble) 691106813Ssimokawa#define UNITY_TEST_ASSERT_DOUBLE_IS_NOT_NEG_INF(actual, line, message) UNITY_TEST_FAIL((UNITY_LINE_TYPE)line, UnityStrErrDouble) 692106813Ssimokawa#define UNITY_TEST_ASSERT_DOUBLE_IS_NOT_NAN(actual, line, message) UNITY_TEST_FAIL((UNITY_LINE_TYPE)line, UnityStrErrDouble) 693106813Ssimokawa#define UNITY_TEST_ASSERT_DOUBLE_IS_NOT_DETERMINATE(actual, line, message) UNITY_TEST_FAIL((UNITY_LINE_TYPE)line, UnityStrErrDouble) 694106813Ssimokawa#else 695106813Ssimokawa#define UNITY_TEST_ASSERT_DOUBLE_WITHIN(delta, expected, actual, line, message) UnityAssertDoublesWithin((_UD)(delta), (_UD)(expected), (_UD)(actual), (message), (UNITY_LINE_TYPE)line) 696106813Ssimokawa#define UNITY_TEST_ASSERT_EQUAL_DOUBLE(expected, actual, line, message) UNITY_TEST_ASSERT_DOUBLE_WITHIN((_UD)(expected) * (_UD)UNITY_DOUBLE_PRECISION, (_UD)expected, (_UD)actual, (UNITY_LINE_TYPE)line, message) 697106813Ssimokawa#define UNITY_TEST_ASSERT_EQUAL_DOUBLE_ARRAY(expected, actual, num_elements, line, message) UnityAssertEqualDoubleArray((_UD*)(expected), (_UD*)(actual), (_UU32)(num_elements), (message), (UNITY_LINE_TYPE)line) 698106813Ssimokawa#define UNITY_TEST_ASSERT_DOUBLE_IS_INF(actual, line, message) UnityAssertDoubleSpecial((_UD)(actual), (message), (UNITY_LINE_TYPE)line, UNITY_FLOAT_IS_INF) 699106813Ssimokawa#define UNITY_TEST_ASSERT_DOUBLE_IS_NEG_INF(actual, line, message) UnityAssertDoubleSpecial((_UD)(actual), (message), (UNITY_LINE_TYPE)line, UNITY_FLOAT_IS_NEG_INF) 700106813Ssimokawa#define UNITY_TEST_ASSERT_DOUBLE_IS_NAN(actual, line, message) UnityAssertDoubleSpecial((_UD)(actual), (message), (UNITY_LINE_TYPE)line, UNITY_FLOAT_IS_NAN) 701106813Ssimokawa#define UNITY_TEST_ASSERT_DOUBLE_IS_DETERMINATE(actual, line, message) UnityAssertDoubleSpecial((_UD)(actual), (message), (UNITY_LINE_TYPE)line, UNITY_FLOAT_IS_DET) 702106813Ssimokawa#define UNITY_TEST_ASSERT_DOUBLE_IS_NOT_INF(actual, line, message) UnityAssertDoubleSpecial((_UD)(actual), (message), (UNITY_LINE_TYPE)line, UNITY_FLOAT_IS_NOT_INF) 703106813Ssimokawa#define UNITY_TEST_ASSERT_DOUBLE_IS_NOT_NEG_INF(actual, line, message) UnityAssertDoubleSpecial((_UD)(actual), (message), (UNITY_LINE_TYPE)line, UNITY_FLOAT_IS_NOT_NEG_INF) 704106813Ssimokawa#define UNITY_TEST_ASSERT_DOUBLE_IS_NOT_NAN(actual, line, message) UnityAssertDoubleSpecial((_UD)(actual), (message), (UNITY_LINE_TYPE)line, UNITY_FLOAT_IS_NOT_NAN) 705106813Ssimokawa#define UNITY_TEST_ASSERT_DOUBLE_IS_NOT_DETERMINATE(actual, line, message) UnityAssertDoubleSpecial((_UD)(actual), (message), (UNITY_LINE_TYPE)line, UNITY_FLOAT_IS_NOT_DET) 706106813Ssimokawa#endif 707106813Ssimokawa 708106813Ssimokawa//End of UNITY_INTERNALS_H 709106813Ssimokawa#endif 710106813Ssimokawa 711106813Ssimokawa//#define TEST_EXPECT_FAIL() Unity.isExpectingFail = 1; 712106813Ssimokawa//#define TEST_EXPECT_FAIL_MESSAGE(message) Unity.isExpectingFail = 1; Unity.XFAILMessage = message; //PROBLEM : does this work on all compilers? 713106813Ssimokawa 714106813Ssimokawa#define TEST_EXPECT_FAIL() UnityExpectFail(); 715106813Ssimokawa#define TEST_EXPECT_FAIL_MESSAGE(message) UnityExpectFailMessage( (message) ); 716106813Ssimokawa