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