1284990Scy/* ==========================================
2284990Scy    Unity Project - A Test Framework for C
3284990Scy    Copyright (c) 2007-14 Mike Karlesky, Mark VanderVoord, Greg Williams
4284990Scy    [Released under MIT License. Please refer to license.txt for details]
5284990Scy========================================== */
6284990Scy
7284990Scy#ifndef UNITY_INTERNALS_H
8284990Scy#define UNITY_INTERNALS_H
9284990Scy
10284990Scy#ifdef UNITY_INCLUDE_CONFIG_H
11284990Scy#include "unity_config.h"
12284990Scy#endif
13284990Scy
14284990Scy#include <setjmp.h>
15284990Scy
16284990Scy// Unity Attempts to Auto-Detect Integer Types
17284990Scy// Attempt 1: UINT_MAX, ULONG_MAX, etc in <stdint.h>
18284990Scy// Attempt 2: UINT_MAX, ULONG_MAX, etc in <limits.h>
19284990Scy// Attempt 3: Deduced from sizeof() macros
20284990Scy#ifndef UNITY_EXCLUDE_STDINT_H
21284990Scy#include <stdint.h>
22284990Scy#endif
23284990Scy
24284990Scy#ifndef UNITY_EXCLUDE_LIMITS_H
25284990Scy#include <limits.h>
26284990Scy#endif
27284990Scy
28284990Scy#ifndef UNITY_EXCLUDE_SIZEOF
29284990Scy#ifndef UINT_MAX
30284990Scy#define UINT_MAX     (sizeof(unsigned int) * 256 - 1)
31284990Scy#endif
32284990Scy#ifndef ULONG_MAX
33284990Scy#define ULONG_MAX    (sizeof(unsigned long) * 256 - 1)
34284990Scy#endif
35284990Scy#ifndef UINTPTR_MAX
36284990Scy//apparently this is not a constant expression: (sizeof(unsigned int *) * 256 - 1) so we have to just let this fall through
37284990Scy#endif
38284990Scy#endif
39284990Scy//-------------------------------------------------------
40284990Scy// Guess Widths If Not Specified
41284990Scy//-------------------------------------------------------
42284990Scy
43284990Scy// Determine the size of an int, if not already specificied.
44284990Scy// We cannot use sizeof(int), because it is not yet defined
45284990Scy// at this stage in the trnslation of the C program.
46284990Scy// Therefore, infer it from UINT_MAX if possible.
47284990Scy#ifndef UNITY_INT_WIDTH
48284990Scy  #ifdef UINT_MAX
49284990Scy    #if (UINT_MAX == 0xFFFF)
50284990Scy      #define UNITY_INT_WIDTH (16)
51284990Scy    #elif (UINT_MAX == 0xFFFFFFFF)
52284990Scy      #define UNITY_INT_WIDTH (32)
53284990Scy    #elif (UINT_MAX == 0xFFFFFFFFFFFFFFFF)
54284990Scy      #define UNITY_INT_WIDTH (64)
55284990Scy    #endif
56284990Scy  #endif
57284990Scy#endif
58284990Scy#ifndef UNITY_INT_WIDTH
59284990Scy  #define UNITY_INT_WIDTH (32)
60284990Scy#endif
61284990Scy
62284990Scy// Determine the size of a long, if not already specified,
63284990Scy// by following the process used above to define
64284990Scy// UNITY_INT_WIDTH.
65284990Scy#ifndef UNITY_LONG_WIDTH
66284990Scy  #ifdef ULONG_MAX
67284990Scy    #if (ULONG_MAX == 0xFFFF)
68284990Scy      #define UNITY_LONG_WIDTH (16)
69284990Scy    #elif (ULONG_MAX == 0xFFFFFFFF)
70284990Scy      #define UNITY_LONG_WIDTH (32)
71284990Scy    #elif (ULONG_MAX == 0xFFFFFFFFFFFFFFFF)
72284990Scy      #define UNITY_LONG_WIDTH (64)
73284990Scy    #endif
74284990Scy  #endif
75284990Scy#endif
76284990Scy#ifndef UNITY_LONG_WIDTH
77284990Scy  #define UNITY_LONG_WIDTH (32)
78284990Scy#endif
79284990Scy
80284990Scy// Determine the size of a pointer, if not already specified,
81284990Scy// by following the process used above to define
82284990Scy// UNITY_INT_WIDTH.
83284990Scy#ifndef UNITY_POINTER_WIDTH
84284990Scy  #ifdef UINTPTR_MAX
85289764Sglebius    #if (UINTPTR_MAX+0 <= 0xFFFF)
86284990Scy      #define UNITY_POINTER_WIDTH (16)
87289764Sglebius    #elif (UINTPTR_MAX+0 <= 0xFFFFFFFF)
88284990Scy      #define UNITY_POINTER_WIDTH (32)
89289764Sglebius    #elif (UINTPTR_MAX+0 <= 0xFFFFFFFFFFFFFFFF)
90284990Scy      #define UNITY_POINTER_WIDTH (64)
91284990Scy    #endif
92284990Scy  #endif
93284990Scy#endif
94284990Scy#ifndef UNITY_POINTER_WIDTH
95284990Scy  #ifdef INTPTR_MAX
96289764Sglebius    #if (INTPTR_MAX+0 <= 0x7FFF)
97284990Scy      #define UNITY_POINTER_WIDTH (16)
98289764Sglebius    #elif (INTPTR_MAX+0 <= 0x7FFFFFFF)
99284990Scy      #define UNITY_POINTER_WIDTH (32)
100289764Sglebius    #elif (INTPTR_MAX+0 <= 0x7FFFFFFFFFFFFFFF)
101284990Scy      #define UNITY_POINTER_WIDTH (64)
102284990Scy    #endif
103284990Scy  #endif
104284990Scy#endif
105284990Scy#ifndef UNITY_POINTER_WIDTH
106284990Scy  #define UNITY_POINTER_WIDTH UNITY_LONG_WIDTH
107284990Scy#endif
108284990Scy
109284990Scy//-------------------------------------------------------
110284990Scy// Int Support (Define types based on detected sizes)
111284990Scy//-------------------------------------------------------
112284990Scy
113284990Scy#if (UNITY_INT_WIDTH == 32)
114284990Scy    typedef unsigned char   _UU8;
115284990Scy    typedef unsigned short  _UU16;
116284990Scy    typedef unsigned int    _UU32;
117284990Scy    typedef signed char     _US8;
118284990Scy    typedef signed short    _US16;
119284990Scy    typedef signed int      _US32;
120284990Scy#elif (UNITY_INT_WIDTH == 16)
121284990Scy    typedef unsigned char   _UU8;
122284990Scy    typedef unsigned int    _UU16;
123284990Scy    typedef unsigned long   _UU32;
124284990Scy    typedef signed char     _US8;
125284990Scy    typedef signed int      _US16;
126284990Scy    typedef signed long     _US32;
127284990Scy#else
128284990Scy    #error Invalid UNITY_INT_WIDTH specified! (16 or 32 are supported)
129284990Scy#endif
130284990Scy
131284990Scy//-------------------------------------------------------
132284990Scy// 64-bit Support
133284990Scy//-------------------------------------------------------
134284990Scy
135284990Scy#ifndef UNITY_SUPPORT_64
136284990Scy#if UNITY_LONG_WIDTH > 32
137284990Scy#define UNITY_SUPPORT_64
138284990Scy#endif
139284990Scy#endif
140284990Scy#ifndef UNITY_SUPPORT_64
141284990Scy#if UNITY_POINTER_WIDTH > 32
142284990Scy#define UNITY_SUPPORT_64
143284990Scy#endif
144284990Scy#endif
145284990Scy
146284990Scy#ifndef UNITY_SUPPORT_64
147284990Scy
148284990Scy//No 64-bit Support
149284990Scytypedef _UU32 _U_UINT;
150284990Scytypedef _US32 _U_SINT;
151284990Scy
152284990Scy#else
153284990Scy
154284990Scy//64-bit Support
155284990Scy#if (UNITY_LONG_WIDTH == 32)
156284990Scy    typedef unsigned long long _UU64;
157284990Scy    typedef signed long long   _US64;
158284990Scy#elif (UNITY_LONG_WIDTH == 64)
159284990Scy    typedef unsigned long      _UU64;
160284990Scy    typedef signed long        _US64;
161284990Scy#else
162284990Scy    #error Invalid UNITY_LONG_WIDTH specified! (32 or 64 are supported)
163284990Scy#endif
164284990Scytypedef _UU64 _U_UINT;
165284990Scytypedef _US64 _U_SINT;
166284990Scy
167284990Scy#endif
168284990Scy
169284990Scy//-------------------------------------------------------
170284990Scy// Pointer Support
171284990Scy//-------------------------------------------------------
172284990Scy
173284990Scy#if (UNITY_POINTER_WIDTH == 32)
174284990Scy    typedef _UU32 _UP;
175284990Scy#define UNITY_DISPLAY_STYLE_POINTER UNITY_DISPLAY_STYLE_HEX32
176284990Scy#elif (UNITY_POINTER_WIDTH == 64)
177284990Scy    typedef _UU64 _UP;
178284990Scy#define UNITY_DISPLAY_STYLE_POINTER UNITY_DISPLAY_STYLE_HEX64
179284990Scy#elif (UNITY_POINTER_WIDTH == 16)
180284990Scy    typedef _UU16 _UP;
181284990Scy#define UNITY_DISPLAY_STYLE_POINTER UNITY_DISPLAY_STYLE_HEX16
182284990Scy#else
183284990Scy    #error Invalid UNITY_POINTER_WIDTH specified! (16, 32 or 64 are supported)
184284990Scy#endif
185284990Scy
186284990Scy#ifndef UNITY_PTR_ATTRIBUTE
187284990Scy  #define UNITY_PTR_ATTRIBUTE
188284990Scy#endif
189284990Scy
190284990Scy//-------------------------------------------------------
191284990Scy// Float Support
192284990Scy//-------------------------------------------------------
193284990Scy
194284990Scy#ifdef UNITY_EXCLUDE_FLOAT
195284990Scy
196284990Scy//No Floating Point Support
197284990Scy#undef UNITY_INCLUDE_FLOAT
198284990Scy#undef UNITY_FLOAT_PRECISION
199284990Scy#undef UNITY_FLOAT_TYPE
200284990Scy#undef UNITY_FLOAT_VERBOSE
201284990Scy
202284990Scy#else
203284990Scy
204284990Scy#ifndef UNITY_INCLUDE_FLOAT
205284990Scy#define UNITY_INCLUDE_FLOAT
206284990Scy#endif
207284990Scy
208284990Scy//Floating Point Support
209284990Scy#ifndef UNITY_FLOAT_PRECISION
210284990Scy#define UNITY_FLOAT_PRECISION (0.00001f)
211284990Scy#endif
212284990Scy#ifndef UNITY_FLOAT_TYPE
213284990Scy#define UNITY_FLOAT_TYPE float
214284990Scy#endif
215284990Scytypedef UNITY_FLOAT_TYPE _UF;
216284990Scy
217284990Scy#endif
218284990Scy
219284990Scy//-------------------------------------------------------
220284990Scy// Double Float Support
221284990Scy//-------------------------------------------------------
222284990Scy
223284990Scy//unlike FLOAT, we DON'T include by default
224284990Scy#ifndef UNITY_EXCLUDE_DOUBLE
225284990Scy#ifndef UNITY_INCLUDE_DOUBLE
226284990Scy#define UNITY_EXCLUDE_DOUBLE
227284990Scy#endif
228284990Scy#endif
229284990Scy
230284990Scy#ifdef UNITY_EXCLUDE_DOUBLE
231284990Scy
232284990Scy//No Floating Point Support
233284990Scy#undef UNITY_DOUBLE_PRECISION
234284990Scy#undef UNITY_DOUBLE_TYPE
235284990Scy#undef UNITY_DOUBLE_VERBOSE
236284990Scy
237284990Scy#ifdef UNITY_INCLUDE_DOUBLE
238284990Scy#undef UNITY_INCLUDE_DOUBLE
239284990Scy#endif
240284990Scy
241284990Scy#else
242284990Scy
243284990Scy//Double Floating Point Support
244284990Scy#ifndef UNITY_DOUBLE_PRECISION
245284990Scy#define UNITY_DOUBLE_PRECISION (1e-12f)
246284990Scy#endif
247284990Scy#ifndef UNITY_DOUBLE_TYPE
248284990Scy#define UNITY_DOUBLE_TYPE double
249284990Scy#endif
250284990Scytypedef UNITY_DOUBLE_TYPE _UD;
251284990Scy
252284990Scy#endif
253284990Scy
254284990Scy#ifdef UNITY_DOUBLE_VERBOSE
255284990Scy#ifndef UNITY_FLOAT_VERBOSE
256284990Scy#define UNITY_FLOAT_VERBOSE
257284990Scy#endif
258284990Scy#endif
259284990Scy
260284990Scy//-------------------------------------------------------
261284990Scy// Output Method: stdout (DEFAULT)
262284990Scy//-------------------------------------------------------
263284990Scy#ifndef UNITY_OUTPUT_CHAR
264284990Scy//Default to using putchar, which is defined in stdio.h
265284990Scy#include <stdio.h>
266284990Scy#define UNITY_OUTPUT_CHAR(a) putchar(a)
267284990Scy#else
268284990Scy//If defined as something else, make sure we declare it here so it's ready for use
269284990Scyextern int UNITY_OUTPUT_CHAR(int);
270284990Scy#endif
271284990Scy
272284990Scy#ifndef UNITY_OUTPUT_START
273284990Scy#define UNITY_OUTPUT_START()
274284990Scy#endif
275284990Scy
276284990Scy#ifndef UNITY_OUTPUT_COMPLETE
277284990Scy#define UNITY_OUTPUT_COMPLETE()
278284990Scy#endif
279284990Scy
280284990Scy//-------------------------------------------------------
281284990Scy// Footprint
282284990Scy//-------------------------------------------------------
283284990Scy
284284990Scy#ifndef UNITY_LINE_TYPE
285284990Scy#define UNITY_LINE_TYPE _U_UINT
286284990Scy#endif
287284990Scy
288284990Scy#ifndef UNITY_COUNTER_TYPE
289284990Scy#define UNITY_COUNTER_TYPE _U_UINT
290284990Scy#endif
291284990Scy
292284990Scy//-------------------------------------------------------
293284990Scy// Language Features Available
294284990Scy//-------------------------------------------------------
295284990Scy#if !defined(UNITY_WEAK_ATTRIBUTE) && !defined(UNITY_WEAK_PRAGMA)
296284990Scy#   ifdef __GNUC__ // includes clang
297284990Scy#       if !(defined(__WIN32__) && defined(__clang__))
298284990Scy#           define UNITY_WEAK_ATTRIBUTE __attribute__((weak))
299284990Scy#       endif
300284990Scy#   endif
301284990Scy#endif
302284990Scy
303284990Scy#ifdef UNITY_NO_WEAK
304284990Scy#   undef UNITY_WEAK_ATTRIBUTE
305284990Scy#   undef UNITY_WEAK_PRAGMA
306284990Scy#endif
307284990Scy
308293423Sdelphij#if !defined(UNITY_NORETURN_ATTRIBUTE)
309293423Sdelphij#   ifdef __GNUC__ // includes clang
310293423Sdelphij#       if !(defined(__WIN32__) && defined(__clang__))
311293423Sdelphij#           define UNITY_NORETURN_ATTRIBUTE __attribute__((noreturn))
312293423Sdelphij#       endif
313293423Sdelphij#   endif
314293423Sdelphij#endif
315284990Scy
316293423Sdelphij#ifndef UNITY_NORETURN_ATTRIBUTE
317293423Sdelphij#   define UNITY_NORETURN_ATTRIBUTE
318293423Sdelphij#endif
319293423Sdelphij
320293423Sdelphij
321284990Scy//-------------------------------------------------------
322284990Scy// Internal Structs Needed
323284990Scy//-------------------------------------------------------
324284990Scy
325284990Scytypedef void (*UnityTestFunction)(void);
326284990Scy
327284990Scy#define UNITY_DISPLAY_RANGE_INT  (0x10)
328284990Scy#define UNITY_DISPLAY_RANGE_UINT (0x20)
329284990Scy#define UNITY_DISPLAY_RANGE_HEX  (0x40)
330284990Scy#define UNITY_DISPLAY_RANGE_AUTO (0x80)
331284990Scy
332284990Scytypedef enum
333284990Scy{
334284990Scy#if (UNITY_INT_WIDTH == 16)
335284990Scy    UNITY_DISPLAY_STYLE_INT      = 2 + UNITY_DISPLAY_RANGE_INT + UNITY_DISPLAY_RANGE_AUTO,
336284990Scy#elif (UNITY_INT_WIDTH  == 32)
337284990Scy    UNITY_DISPLAY_STYLE_INT      = 4 + UNITY_DISPLAY_RANGE_INT + UNITY_DISPLAY_RANGE_AUTO,
338284990Scy#elif (UNITY_INT_WIDTH  == 64)
339284990Scy    UNITY_DISPLAY_STYLE_INT      = 8 + UNITY_DISPLAY_RANGE_INT + UNITY_DISPLAY_RANGE_AUTO,
340284990Scy#endif
341284990Scy    UNITY_DISPLAY_STYLE_INT8     = 1 + UNITY_DISPLAY_RANGE_INT,
342284990Scy    UNITY_DISPLAY_STYLE_INT16    = 2 + UNITY_DISPLAY_RANGE_INT,
343284990Scy    UNITY_DISPLAY_STYLE_INT32    = 4 + UNITY_DISPLAY_RANGE_INT,
344284990Scy#ifdef UNITY_SUPPORT_64
345284990Scy    UNITY_DISPLAY_STYLE_INT64    = 8 + UNITY_DISPLAY_RANGE_INT,
346284990Scy#endif
347284990Scy
348284990Scy#if (UNITY_INT_WIDTH == 16)
349284990Scy    UNITY_DISPLAY_STYLE_UINT     = 2 + UNITY_DISPLAY_RANGE_UINT + UNITY_DISPLAY_RANGE_AUTO,
350284990Scy#elif (UNITY_INT_WIDTH  == 32)
351284990Scy    UNITY_DISPLAY_STYLE_UINT     = 4 + UNITY_DISPLAY_RANGE_UINT + UNITY_DISPLAY_RANGE_AUTO,
352284990Scy#elif (UNITY_INT_WIDTH  == 64)
353284990Scy    UNITY_DISPLAY_STYLE_UINT     = 8 + UNITY_DISPLAY_RANGE_UINT + UNITY_DISPLAY_RANGE_AUTO,
354284990Scy#endif
355284990Scy    UNITY_DISPLAY_STYLE_UINT8    = 1 + UNITY_DISPLAY_RANGE_UINT,
356284990Scy    UNITY_DISPLAY_STYLE_UINT16   = 2 + UNITY_DISPLAY_RANGE_UINT,
357284990Scy    UNITY_DISPLAY_STYLE_UINT32   = 4 + UNITY_DISPLAY_RANGE_UINT,
358284990Scy#ifdef UNITY_SUPPORT_64
359284990Scy    UNITY_DISPLAY_STYLE_UINT64   = 8 + UNITY_DISPLAY_RANGE_UINT,
360284990Scy#endif
361284990Scy    UNITY_DISPLAY_STYLE_HEX8     = 1 + UNITY_DISPLAY_RANGE_HEX,
362284990Scy    UNITY_DISPLAY_STYLE_HEX16    = 2 + UNITY_DISPLAY_RANGE_HEX,
363284990Scy    UNITY_DISPLAY_STYLE_HEX32    = 4 + UNITY_DISPLAY_RANGE_HEX,
364284990Scy#ifdef UNITY_SUPPORT_64
365284990Scy    UNITY_DISPLAY_STYLE_HEX64    = 8 + UNITY_DISPLAY_RANGE_HEX,
366284990Scy#endif
367284990Scy    UNITY_DISPLAY_STYLE_UNKNOWN
368284990Scy} UNITY_DISPLAY_STYLE_T;
369284990Scy
370284990Scy#ifndef UNITY_EXCLUDE_FLOAT
371284990Scytypedef enum _UNITY_FLOAT_TRAIT_T
372284990Scy{
373284990Scy    UNITY_FLOAT_IS_NOT_INF       = 0,
374284990Scy    UNITY_FLOAT_IS_INF,
375284990Scy    UNITY_FLOAT_IS_NOT_NEG_INF,
376284990Scy    UNITY_FLOAT_IS_NEG_INF,
377284990Scy    UNITY_FLOAT_IS_NOT_NAN,
378284990Scy    UNITY_FLOAT_IS_NAN,
379284990Scy    UNITY_FLOAT_IS_NOT_DET,
380284990Scy    UNITY_FLOAT_IS_DET,
381284990Scy} UNITY_FLOAT_TRAIT_T;
382284990Scy#endif
383284990Scy
384284990Scystruct _Unity
385284990Scy{
386284990Scy    const char* TestFile;
387284990Scy    const char* CurrentTestName;
388284990Scy    UNITY_LINE_TYPE CurrentTestLineNumber;
389284990Scy    UNITY_COUNTER_TYPE NumberOfTests;
390284990Scy    UNITY_COUNTER_TYPE TestFailures;
391284990Scy    UNITY_COUNTER_TYPE TestIgnores;
392284990Scy    UNITY_COUNTER_TYPE CurrentTestFailed;
393284990Scy    UNITY_COUNTER_TYPE CurrentTestIgnored;
394284990Scy    jmp_buf AbortFrame;
395284990Scy	int isExpectingFail;
396284990Scy	UNITY_COUNTER_TYPE TestXFAILS;
397284990Scy	UNITY_COUNTER_TYPE TestPasses;
398284990Scy	UNITY_COUNTER_TYPE TestXPASSES;
399284990Scy	const char* XFAILMessage;
400284990Scy};
401284990Scy
402284990Scyextern struct _Unity Unity;
403284990Scy
404284990Scy//-------------------------------------------------------
405284990Scy// Test Suite Management
406284990Scy//-------------------------------------------------------
407284990Scy
408284990Scyvoid UnityBegin(const char* filename);
409284990Scyint  UnityEnd(void);
410284990Scyvoid UnityConcludeTest(void);
411284990Scyvoid UnityDefaultTestRun(UnityTestFunction Func, const char* FuncName, const int FuncLineNum);
412284990Scy
413284990Scy//-------------------------------------------------------
414284990Scy// Test Output
415284990Scy//-------------------------------------------------------
416284990Scy
417284990Scyvoid UnityPrint(const char* string);
418284990Scyvoid UnityPrintMask(const _U_UINT mask, const _U_UINT number);
419284990Scyvoid UnityPrintNumberByStyle(const _U_SINT number, const UNITY_DISPLAY_STYLE_T style);
420284990Scyvoid UnityPrintNumber(const _U_SINT number);
421284990Scyvoid UnityPrintNumberUnsigned(const _U_UINT number);
422284990Scyvoid UnityPrintNumberHex(const _U_UINT number, const char nibbles);
423284990Scy
424284990Scy#ifdef UNITY_FLOAT_VERBOSE
425284990Scyvoid UnityPrintFloat(const _UF number);
426284990Scy#endif
427284990Scy
428284990Scy//-------------------------------------------------------
429284990Scy// Test Assertion Fuctions
430284990Scy//-------------------------------------------------------
431284990Scy//  Use the macros below this section instead of calling
432284990Scy//  these directly. The macros have a consistent naming
433284990Scy//  convention and will pull in file and line information
434284990Scy//  for you.
435284990Scy
436284990Scyvoid UnityAssertEqualNumber(const _U_SINT expected,
437284990Scy                            const _U_SINT actual,
438284990Scy                            const char* msg,
439284990Scy                            const UNITY_LINE_TYPE lineNumber,
440284990Scy                            const UNITY_DISPLAY_STYLE_T style);
441284990Scy
442284990Scyvoid UnityAssertEqualIntArray(UNITY_PTR_ATTRIBUTE const void* expected,
443284990Scy                              UNITY_PTR_ATTRIBUTE const void* actual,
444284990Scy                              const _UU32 num_elements,
445284990Scy                              const char* msg,
446284990Scy                              const UNITY_LINE_TYPE lineNumber,
447284990Scy                              const UNITY_DISPLAY_STYLE_T style);
448284990Scy
449284990Scyvoid UnityAssertBits(const _U_SINT mask,
450284990Scy                     const _U_SINT expected,
451284990Scy                     const _U_SINT actual,
452284990Scy                     const char* msg,
453284990Scy                     const UNITY_LINE_TYPE lineNumber);
454284990Scy
455284990Scyvoid UnityAssertEqualString(const char* expected,
456284990Scy                            const char* actual,
457284990Scy                            const char* msg,
458284990Scy                            const UNITY_LINE_TYPE lineNumber);
459284990Scy
460284990Scyvoid UnityAssertEqualStringArray( const char** expected,
461284990Scy                                  const char** actual,
462284990Scy                                  const _UU32 num_elements,
463284990Scy                                  const char* msg,
464284990Scy                                  const UNITY_LINE_TYPE lineNumber);
465284990Scy
466284990Scyvoid UnityAssertEqualMemory( UNITY_PTR_ATTRIBUTE const void* expected,
467284990Scy                             UNITY_PTR_ATTRIBUTE const void* actual,
468284990Scy                             const _UU32 length,
469284990Scy                             const _UU32 num_elements,
470284990Scy                             const char* msg,
471284990Scy                             const UNITY_LINE_TYPE lineNumber);
472284990Scy
473284990Scyvoid UnityAssertNumbersWithin(const _U_SINT delta,
474284990Scy                              const _U_SINT expected,
475284990Scy                              const _U_SINT actual,
476284990Scy                              const char* msg,
477284990Scy                              const UNITY_LINE_TYPE lineNumber,
478284990Scy                              const UNITY_DISPLAY_STYLE_T style);
479284990Scy
480293423Sdelphijvoid UnityFail(const char* message, const UNITY_LINE_TYPE line) UNITY_NORETURN_ATTRIBUTE;
481284990Scy
482284990Scyvoid UnityIgnore(const char* message, const UNITY_LINE_TYPE line);
483284990Scy
484284990Scy#ifndef UNITY_EXCLUDE_FLOAT
485284990Scyvoid UnityAssertFloatsWithin(const _UF delta,
486284990Scy                             const _UF expected,
487284990Scy                             const _UF actual,
488284990Scy                             const char* msg,
489284990Scy                             const UNITY_LINE_TYPE lineNumber);
490284990Scy
491284990Scyvoid UnityAssertEqualFloatArray(UNITY_PTR_ATTRIBUTE const _UF* expected,
492284990Scy                                UNITY_PTR_ATTRIBUTE const _UF* actual,
493284990Scy                                const _UU32 num_elements,
494284990Scy                                const char* msg,
495284990Scy                                const UNITY_LINE_TYPE lineNumber);
496284990Scy
497284990Scyvoid UnityAssertFloatSpecial(const _UF actual,
498284990Scy                             const char* msg,
499284990Scy                             const UNITY_LINE_TYPE lineNumber,
500284990Scy                             const UNITY_FLOAT_TRAIT_T style);
501284990Scy#endif
502284990Scy
503284990Scy#ifndef UNITY_EXCLUDE_DOUBLE
504284990Scyvoid UnityAssertDoublesWithin(const _UD delta,
505284990Scy                              const _UD expected,
506284990Scy                              const _UD actual,
507284990Scy                              const char* msg,
508284990Scy                              const UNITY_LINE_TYPE lineNumber);
509284990Scy
510284990Scyvoid UnityAssertEqualDoubleArray(UNITY_PTR_ATTRIBUTE const _UD* expected,
511284990Scy                                 UNITY_PTR_ATTRIBUTE const _UD* actual,
512284990Scy                                 const _UU32 num_elements,
513284990Scy                                 const char* msg,
514284990Scy                                 const UNITY_LINE_TYPE lineNumber);
515284990Scy
516284990Scyvoid UnityAssertDoubleSpecial(const _UD actual,
517284990Scy                              const char* msg,
518284990Scy                              const UNITY_LINE_TYPE lineNumber,
519284990Scy                              const UNITY_FLOAT_TRAIT_T style);
520284990Scy#endif
521284990Scy
522284990Scy//-------------------------------------------------------
523284990Scy// Error Strings We Might Need
524284990Scy//-------------------------------------------------------
525284990Scy
526284990Scyextern const char UnityStrErrFloat[];
527284990Scyextern const char UnityStrErrDouble[];
528284990Scyextern const char UnityStrErr64[];
529284990Scy
530284990Scy//-------------------------------------------------------
531284990Scy// Test Running Macros
532284990Scy//-------------------------------------------------------
533284990Scy
534284990Scy#define TEST_PROTECT() (setjmp(Unity.AbortFrame) == 0)
535284990Scy
536284990Scy#define TEST_ABORT() {longjmp(Unity.AbortFrame, 1);}
537284990Scy
538284990Scy//This tricky series of macros gives us an optional line argument to treat it as RUN_TEST(func, num=__LINE__)
539284990Scy#ifndef RUN_TEST
540284990Scy#ifdef __STDC_VERSION__
541284990Scy#if __STDC_VERSION__ >= 199901L
542284990Scy#define RUN_TEST(...) UnityDefaultTestRun(RUN_TEST_FIRST(__VA_ARGS__), RUN_TEST_SECOND(__VA_ARGS__))
543284990Scy#define RUN_TEST_FIRST(...) RUN_TEST_FIRST_HELPER(__VA_ARGS__, throwaway)
544284990Scy#define RUN_TEST_FIRST_HELPER(first,...) first, #first
545284990Scy#define RUN_TEST_SECOND(...) RUN_TEST_SECOND_HELPER(__VA_ARGS__, __LINE__, throwaway)
546284990Scy#define RUN_TEST_SECOND_HELPER(first,second,...) second
547284990Scy#endif
548284990Scy#endif
549284990Scy#endif
550284990Scy
551284990Scy//If we can't do the tricky version, we'll just have to require them to always include the line number
552284990Scy#ifndef RUN_TEST
553284990Scy#ifdef CMOCK
554284990Scy#define RUN_TEST(func, num) UnityDefaultTestRun(func, #func, num)
555284990Scy#else
556284990Scy#define RUN_TEST(func) UnityDefaultTestRun(func, #func, __LINE__)
557284990Scy#endif
558284990Scy#endif
559284990Scy
560284990Scy#define TEST_LINE_NUM (Unity.CurrentTestLineNumber)
561284990Scy#define TEST_IS_IGNORED (Unity.CurrentTestIgnored)
562284990Scy#define UNITY_NEW_TEST(a) \
563284990Scy    Unity.CurrentTestName = a; \
564284990Scy    Unity.CurrentTestLineNumber = (UNITY_LINE_TYPE)(__LINE__); \
565284990Scy    Unity.NumberOfTests++;
566284990Scy
567284990Scy#ifndef UNITY_BEGIN
568284990Scy#define UNITY_BEGIN() UnityBegin(__FILE__)
569284990Scy#endif
570284990Scy
571284990Scy#ifndef UNITY_END
572284990Scy#define UNITY_END() UnityEnd()
573284990Scy#endif
574284990Scy
575284990Scy//-------------------------------------------------------
576284990Scy// Basic Fail and Ignore
577284990Scy//-------------------------------------------------------
578284990Scy
579284990Scy#define UNITY_TEST_FAIL(line, message)   UnityFail(   (message), (UNITY_LINE_TYPE)line);
580284990Scy#define UNITY_TEST_IGNORE(line, message) UnityIgnore( (message), (UNITY_LINE_TYPE)line);
581284990Scy
582284990Scy//-------------------------------------------------------
583284990Scy// Test Asserts
584284990Scy//-------------------------------------------------------
585284990Scy
586284990Scy#define UNITY_TEST_ASSERT(condition, line, message)                                              if (condition) {} else {UNITY_TEST_FAIL((UNITY_LINE_TYPE)line, message);}
587284990Scy#define UNITY_TEST_ASSERT_NULL(pointer, line, message)                                           UNITY_TEST_ASSERT(((pointer) == NULL),  (UNITY_LINE_TYPE)line, message)
588284990Scy#define UNITY_TEST_ASSERT_NOT_NULL(pointer, line, message)                                       UNITY_TEST_ASSERT(((pointer) != NULL),  (UNITY_LINE_TYPE)line, message)
589284990Scy
590284990Scy#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)
591284990Scy#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)
592284990Scy#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)
593284990Scy#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)
594284990Scy#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)
595284990Scy#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)
596284990Scy#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)
597284990Scy#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)
598284990Scy#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)
599284990Scy#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)
600284990Scy#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)
601284990Scy#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)
602284990Scy
603284990Scy#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)
604284990Scy#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)
605284990Scy#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)
606284990Scy#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)
607284990Scy#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)
608284990Scy#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)
609284990Scy#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)
610284990Scy#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)
611284990Scy#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)
612284990Scy#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)
613284990Scy#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)
614284990Scy
615284990Scy#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)
616284990Scy#define UNITY_TEST_ASSERT_EQUAL_STRING(expected, actual, line, message)                          UnityAssertEqualString((const char*)(expected), (const char*)(actual), (message), (UNITY_LINE_TYPE)line)
617294554Sdelphij#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)
618284990Scy
619284990Scy#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)
620284990Scy#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)
621284990Scy#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)
622284990Scy#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)
623284990Scy#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)
624284990Scy#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)
625284990Scy#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)
626284990Scy#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)
627284990Scy#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)
628284990Scy#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)
629284990Scy#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)
630284990Scy#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)
631284990Scy#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)
632284990Scy#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)
633284990Scy
634284990Scy#ifdef UNITY_SUPPORT_64
635284990Scy#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)
636284990Scy#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)
637284990Scy#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)
638284990Scy#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)
639284990Scy#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)
640284990Scy#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)
641284990Scy#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)
642284990Scy#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)
643284990Scy#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)
644284990Scy#else
645284990Scy#define UNITY_TEST_ASSERT_EQUAL_INT64(expected, actual, line, message)                           UNITY_TEST_FAIL((UNITY_LINE_TYPE)line, UnityStrErr64)
646284990Scy#define UNITY_TEST_ASSERT_EQUAL_UINT64(expected, actual, line, message)                          UNITY_TEST_FAIL((UNITY_LINE_TYPE)line, UnityStrErr64)
647284990Scy#define UNITY_TEST_ASSERT_EQUAL_HEX64(expected, actual, line, message)                           UNITY_TEST_FAIL((UNITY_LINE_TYPE)line, UnityStrErr64)
648284990Scy#define UNITY_TEST_ASSERT_EQUAL_INT64_ARRAY(expected, actual, num_elements, line, message)       UNITY_TEST_FAIL((UNITY_LINE_TYPE)line, UnityStrErr64)
649284990Scy#define UNITY_TEST_ASSERT_EQUAL_UINT64_ARRAY(expected, actual, num_elements, line, message)      UNITY_TEST_FAIL((UNITY_LINE_TYPE)line, UnityStrErr64)
650284990Scy#define UNITY_TEST_ASSERT_EQUAL_HEX64_ARRAY(expected, actual, num_elements, line, message)       UNITY_TEST_FAIL((UNITY_LINE_TYPE)line, UnityStrErr64)
651284990Scy#define UNITY_TEST_ASSERT_INT64_WITHIN(delta, expected, actual, line, message)                   UNITY_TEST_FAIL((UNITY_LINE_TYPE)line, UnityStrErr64)
652284990Scy#define UNITY_TEST_ASSERT_UINT64_WITHIN(delta, expected, actual, line, message)                  UNITY_TEST_FAIL((UNITY_LINE_TYPE)line, UnityStrErr64)
653284990Scy#define UNITY_TEST_ASSERT_HEX64_WITHIN(delta, expected, actual, line, message)                   UNITY_TEST_FAIL((UNITY_LINE_TYPE)line, UnityStrErr64)
654284990Scy#endif
655284990Scy
656284990Scy#ifdef UNITY_EXCLUDE_FLOAT
657284990Scy#define UNITY_TEST_ASSERT_FLOAT_WITHIN(delta, expected, actual, line, message)                   UNITY_TEST_FAIL((UNITY_LINE_TYPE)line, UnityStrErrFloat)
658284990Scy#define UNITY_TEST_ASSERT_EQUAL_FLOAT(expected, actual, line, message)                           UNITY_TEST_FAIL((UNITY_LINE_TYPE)line, UnityStrErrFloat)
659284990Scy#define UNITY_TEST_ASSERT_EQUAL_FLOAT_ARRAY(expected, actual, num_elements, line, message)       UNITY_TEST_FAIL((UNITY_LINE_TYPE)line, UnityStrErrFloat)
660284990Scy#define UNITY_TEST_ASSERT_FLOAT_IS_INF(actual, line, message)                                    UNITY_TEST_FAIL((UNITY_LINE_TYPE)line, UnityStrErrFloat)
661284990Scy#define UNITY_TEST_ASSERT_FLOAT_IS_NEG_INF(actual, line, message)                                UNITY_TEST_FAIL((UNITY_LINE_TYPE)line, UnityStrErrFloat)
662284990Scy#define UNITY_TEST_ASSERT_FLOAT_IS_NAN(actual, line, message)                                    UNITY_TEST_FAIL((UNITY_LINE_TYPE)line, UnityStrErrFloat)
663284990Scy#define UNITY_TEST_ASSERT_FLOAT_IS_DETERMINATE(actual, line, message)                            UNITY_TEST_FAIL((UNITY_LINE_TYPE)line, UnityStrErrFloat)
664284990Scy#define UNITY_TEST_ASSERT_FLOAT_IS_NOT_INF(actual, line, message)                                UNITY_TEST_FAIL((UNITY_LINE_TYPE)line, UnityStrErrFloat)
665284990Scy#define UNITY_TEST_ASSERT_FLOAT_IS_NOT_NEG_INF(actual, line, message)                            UNITY_TEST_FAIL((UNITY_LINE_TYPE)line, UnityStrErrFloat)
666284990Scy#define UNITY_TEST_ASSERT_FLOAT_IS_NOT_NAN(actual, line, message)                                UNITY_TEST_FAIL((UNITY_LINE_TYPE)line, UnityStrErrFloat)
667284990Scy#define UNITY_TEST_ASSERT_FLOAT_IS_NOT_DETERMINATE(actual, line, message)                        UNITY_TEST_FAIL((UNITY_LINE_TYPE)line, UnityStrErrFloat)
668284990Scy#else
669284990Scy#define UNITY_TEST_ASSERT_FLOAT_WITHIN(delta, expected, actual, line, message)                   UnityAssertFloatsWithin((_UF)(delta), (_UF)(expected), (_UF)(actual), (message), (UNITY_LINE_TYPE)line)
670284990Scy#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)
671284990Scy#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)
672284990Scy#define UNITY_TEST_ASSERT_FLOAT_IS_INF(actual, line, message)                                    UnityAssertFloatSpecial((_UF)(actual), (message), (UNITY_LINE_TYPE)line, UNITY_FLOAT_IS_INF)
673284990Scy#define UNITY_TEST_ASSERT_FLOAT_IS_NEG_INF(actual, line, message)                                UnityAssertFloatSpecial((_UF)(actual), (message), (UNITY_LINE_TYPE)line, UNITY_FLOAT_IS_NEG_INF)
674284990Scy#define UNITY_TEST_ASSERT_FLOAT_IS_NAN(actual, line, message)                                    UnityAssertFloatSpecial((_UF)(actual), (message), (UNITY_LINE_TYPE)line, UNITY_FLOAT_IS_NAN)
675284990Scy#define UNITY_TEST_ASSERT_FLOAT_IS_DETERMINATE(actual, line, message)                            UnityAssertFloatSpecial((_UF)(actual), (message), (UNITY_LINE_TYPE)line, UNITY_FLOAT_IS_DET)
676284990Scy#define UNITY_TEST_ASSERT_FLOAT_IS_NOT_INF(actual, line, message)                                UnityAssertFloatSpecial((_UF)(actual), (message), (UNITY_LINE_TYPE)line, UNITY_FLOAT_IS_NOT_INF)
677284990Scy#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)
678284990Scy#define UNITY_TEST_ASSERT_FLOAT_IS_NOT_NAN(actual, line, message)                                UnityAssertFloatSpecial((_UF)(actual), (message), (UNITY_LINE_TYPE)line, UNITY_FLOAT_IS_NOT_NAN)
679284990Scy#define UNITY_TEST_ASSERT_FLOAT_IS_NOT_DETERMINATE(actual, line, message)                        UnityAssertFloatSpecial((_UF)(actual), (message), (UNITY_LINE_TYPE)line, UNITY_FLOAT_IS_NOT_DET)
680284990Scy#endif
681284990Scy
682284990Scy#ifdef UNITY_EXCLUDE_DOUBLE
683284990Scy#define UNITY_TEST_ASSERT_DOUBLE_WITHIN(delta, expected, actual, line, message)                  UNITY_TEST_FAIL((UNITY_LINE_TYPE)line, UnityStrErrDouble)
684284990Scy#define UNITY_TEST_ASSERT_EQUAL_DOUBLE(expected, actual, line, message)                          UNITY_TEST_FAIL((UNITY_LINE_TYPE)line, UnityStrErrDouble)
685284990Scy#define UNITY_TEST_ASSERT_EQUAL_DOUBLE_ARRAY(expected, actual, num_elements, line, message)      UNITY_TEST_FAIL((UNITY_LINE_TYPE)line, UnityStrErrDouble)
686284990Scy#define UNITY_TEST_ASSERT_DOUBLE_IS_INF(actual, line, message)                                   UNITY_TEST_FAIL((UNITY_LINE_TYPE)line, UnityStrErrDouble)
687284990Scy#define UNITY_TEST_ASSERT_DOUBLE_IS_NEG_INF(actual, line, message)                               UNITY_TEST_FAIL((UNITY_LINE_TYPE)line, UnityStrErrDouble)
688284990Scy#define UNITY_TEST_ASSERT_DOUBLE_IS_NAN(actual, line, message)                                   UNITY_TEST_FAIL((UNITY_LINE_TYPE)line, UnityStrErrDouble)
689284990Scy#define UNITY_TEST_ASSERT_DOUBLE_IS_DETERMINATE(actual, line, message)                           UNITY_TEST_FAIL((UNITY_LINE_TYPE)line, UnityStrErrDouble)
690284990Scy#define UNITY_TEST_ASSERT_DOUBLE_IS_NOT_INF(actual, line, message)                               UNITY_TEST_FAIL((UNITY_LINE_TYPE)line, UnityStrErrDouble)
691284990Scy#define UNITY_TEST_ASSERT_DOUBLE_IS_NOT_NEG_INF(actual, line, message)                           UNITY_TEST_FAIL((UNITY_LINE_TYPE)line, UnityStrErrDouble)
692284990Scy#define UNITY_TEST_ASSERT_DOUBLE_IS_NOT_NAN(actual, line, message)                               UNITY_TEST_FAIL((UNITY_LINE_TYPE)line, UnityStrErrDouble)
693284990Scy#define UNITY_TEST_ASSERT_DOUBLE_IS_NOT_DETERMINATE(actual, line, message)                       UNITY_TEST_FAIL((UNITY_LINE_TYPE)line, UnityStrErrDouble)
694284990Scy#else
695284990Scy#define UNITY_TEST_ASSERT_DOUBLE_WITHIN(delta, expected, actual, line, message)                  UnityAssertDoublesWithin((_UD)(delta), (_UD)(expected), (_UD)(actual), (message), (UNITY_LINE_TYPE)line)
696284990Scy#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)
697284990Scy#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)
698284990Scy#define UNITY_TEST_ASSERT_DOUBLE_IS_INF(actual, line, message)                                   UnityAssertDoubleSpecial((_UD)(actual), (message), (UNITY_LINE_TYPE)line, UNITY_FLOAT_IS_INF)
699284990Scy#define UNITY_TEST_ASSERT_DOUBLE_IS_NEG_INF(actual, line, message)                               UnityAssertDoubleSpecial((_UD)(actual), (message), (UNITY_LINE_TYPE)line, UNITY_FLOAT_IS_NEG_INF)
700284990Scy#define UNITY_TEST_ASSERT_DOUBLE_IS_NAN(actual, line, message)                                   UnityAssertDoubleSpecial((_UD)(actual), (message), (UNITY_LINE_TYPE)line, UNITY_FLOAT_IS_NAN)
701284990Scy#define UNITY_TEST_ASSERT_DOUBLE_IS_DETERMINATE(actual, line, message)                           UnityAssertDoubleSpecial((_UD)(actual), (message), (UNITY_LINE_TYPE)line, UNITY_FLOAT_IS_DET)
702284990Scy#define UNITY_TEST_ASSERT_DOUBLE_IS_NOT_INF(actual, line, message)                               UnityAssertDoubleSpecial((_UD)(actual), (message), (UNITY_LINE_TYPE)line, UNITY_FLOAT_IS_NOT_INF)
703284990Scy#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)
704284990Scy#define UNITY_TEST_ASSERT_DOUBLE_IS_NOT_NAN(actual, line, message)                               UnityAssertDoubleSpecial((_UD)(actual), (message), (UNITY_LINE_TYPE)line, UNITY_FLOAT_IS_NOT_NAN)
705284990Scy#define UNITY_TEST_ASSERT_DOUBLE_IS_NOT_DETERMINATE(actual, line, message)                       UnityAssertDoubleSpecial((_UD)(actual), (message), (UNITY_LINE_TYPE)line, UNITY_FLOAT_IS_NOT_DET)
706284990Scy#endif
707284990Scy
708284990Scy//End of UNITY_INTERNALS_H
709284990Scy#endif
710284990Scy
711284990Scy//#define TEST_EXPECT_FAIL()																		Unity.isExpectingFail = 1;
712284990Scy//#define TEST_EXPECT_FAIL_MESSAGE(message)														Unity.isExpectingFail = 1; Unity.XFAILMessage = message; //PROBLEM : does this work on all compilers?
713284990Scy
714284990Scy#define TEST_EXPECT_FAIL()																		UnityExpectFail();
715284990Scy#define TEST_EXPECT_FAIL_MESSAGE(message)														UnityExpectFailMessage( (message) );
716