1290001Sglebius/* ==========================================
2290001Sglebius    Unity Project - A Test Framework for C
3290001Sglebius    Copyright (c) 2007-14 Mike Karlesky, Mark VanderVoord, Greg Williams
4290001Sglebius    [Released under MIT License. Please refer to license.txt for details]
5290001Sglebius========================================== */
6290001Sglebius
7290001Sglebius#ifndef UNITY_INTERNALS_H
8290001Sglebius#define UNITY_INTERNALS_H
9290001Sglebius
10290001Sglebius#ifdef UNITY_INCLUDE_CONFIG_H
11290001Sglebius#include "unity_config.h"
12290001Sglebius#endif
13290001Sglebius
14290001Sglebius#include <setjmp.h>
15290001Sglebius
16290001Sglebius// Unity Attempts to Auto-Detect Integer Types
17290001Sglebius// Attempt 1: UINT_MAX, ULONG_MAX, etc in <stdint.h>
18290001Sglebius// Attempt 2: UINT_MAX, ULONG_MAX, etc in <limits.h>
19290001Sglebius// Attempt 3: Deduced from sizeof() macros
20290001Sglebius#ifndef UNITY_EXCLUDE_STDINT_H
21290001Sglebius#include <stdint.h>
22290001Sglebius#endif
23290001Sglebius
24290001Sglebius#ifndef UNITY_EXCLUDE_LIMITS_H
25290001Sglebius#include <limits.h>
26290001Sglebius#endif
27290001Sglebius
28290001Sglebius#ifndef UNITY_EXCLUDE_SIZEOF
29290001Sglebius#ifndef UINT_MAX
30290001Sglebius#define UINT_MAX     (sizeof(unsigned int) * 256 - 1)
31290001Sglebius#endif
32290001Sglebius#ifndef ULONG_MAX
33290001Sglebius#define ULONG_MAX    (sizeof(unsigned long) * 256 - 1)
34290001Sglebius#endif
35290001Sglebius#ifndef UINTPTR_MAX
36290001Sglebius//apparently this is not a constant expression: (sizeof(unsigned int *) * 256 - 1) so we have to just let this fall through
37290001Sglebius#endif
38290001Sglebius#endif
39290001Sglebius//-------------------------------------------------------
40290001Sglebius// Guess Widths If Not Specified
41290001Sglebius//-------------------------------------------------------
42290001Sglebius
43290001Sglebius// Determine the size of an int, if not already specificied.
44290001Sglebius// We cannot use sizeof(int), because it is not yet defined
45290001Sglebius// at this stage in the trnslation of the C program.
46290001Sglebius// Therefore, infer it from UINT_MAX if possible.
47290001Sglebius#ifndef UNITY_INT_WIDTH
48290001Sglebius  #ifdef UINT_MAX
49290001Sglebius    #if (UINT_MAX == 0xFFFF)
50290001Sglebius      #define UNITY_INT_WIDTH (16)
51290001Sglebius    #elif (UINT_MAX == 0xFFFFFFFF)
52290001Sglebius      #define UNITY_INT_WIDTH (32)
53290001Sglebius    #elif (UINT_MAX == 0xFFFFFFFFFFFFFFFF)
54290001Sglebius      #define UNITY_INT_WIDTH (64)
55290001Sglebius    #endif
56290001Sglebius  #endif
57290001Sglebius#endif
58290001Sglebius#ifndef UNITY_INT_WIDTH
59290001Sglebius  #define UNITY_INT_WIDTH (32)
60290001Sglebius#endif
61290001Sglebius
62290001Sglebius// Determine the size of a long, if not already specified,
63290001Sglebius// by following the process used above to define
64290001Sglebius// UNITY_INT_WIDTH.
65290001Sglebius#ifndef UNITY_LONG_WIDTH
66290001Sglebius  #ifdef ULONG_MAX
67290001Sglebius    #if (ULONG_MAX == 0xFFFF)
68290001Sglebius      #define UNITY_LONG_WIDTH (16)
69290001Sglebius    #elif (ULONG_MAX == 0xFFFFFFFF)
70290001Sglebius      #define UNITY_LONG_WIDTH (32)
71290001Sglebius    #elif (ULONG_MAX == 0xFFFFFFFFFFFFFFFF)
72290001Sglebius      #define UNITY_LONG_WIDTH (64)
73290001Sglebius    #endif
74290001Sglebius  #endif
75290001Sglebius#endif
76290001Sglebius#ifndef UNITY_LONG_WIDTH
77290001Sglebius  #define UNITY_LONG_WIDTH (32)
78290001Sglebius#endif
79290001Sglebius
80290001Sglebius// Determine the size of a pointer, if not already specified,
81290001Sglebius// by following the process used above to define
82290001Sglebius// UNITY_INT_WIDTH.
83290001Sglebius#ifndef UNITY_POINTER_WIDTH
84290001Sglebius  #ifdef UINTPTR_MAX
85290001Sglebius    #if (UINTPTR_MAX+0 <= 0xFFFF)
86290001Sglebius      #define UNITY_POINTER_WIDTH (16)
87290001Sglebius    #elif (UINTPTR_MAX+0 <= 0xFFFFFFFF)
88290001Sglebius      #define UNITY_POINTER_WIDTH (32)
89290001Sglebius    #elif (UINTPTR_MAX+0 <= 0xFFFFFFFFFFFFFFFF)
90290001Sglebius      #define UNITY_POINTER_WIDTH (64)
91290001Sglebius    #endif
92290001Sglebius  #endif
93290001Sglebius#endif
94290001Sglebius#ifndef UNITY_POINTER_WIDTH
95290001Sglebius  #ifdef INTPTR_MAX
96290001Sglebius    #if (INTPTR_MAX+0 <= 0x7FFF)
97290001Sglebius      #define UNITY_POINTER_WIDTH (16)
98290001Sglebius    #elif (INTPTR_MAX+0 <= 0x7FFFFFFF)
99290001Sglebius      #define UNITY_POINTER_WIDTH (32)
100290001Sglebius    #elif (INTPTR_MAX+0 <= 0x7FFFFFFFFFFFFFFF)
101290001Sglebius      #define UNITY_POINTER_WIDTH (64)
102290001Sglebius    #endif
103290001Sglebius  #endif
104290001Sglebius#endif
105290001Sglebius#ifndef UNITY_POINTER_WIDTH
106290001Sglebius  #define UNITY_POINTER_WIDTH UNITY_LONG_WIDTH
107290001Sglebius#endif
108290001Sglebius
109290001Sglebius//-------------------------------------------------------
110290001Sglebius// Int Support (Define types based on detected sizes)
111290001Sglebius//-------------------------------------------------------
112290001Sglebius
113290001Sglebius#if (UNITY_INT_WIDTH == 32)
114290001Sglebius    typedef unsigned char   _UU8;
115290001Sglebius    typedef unsigned short  _UU16;
116290001Sglebius    typedef unsigned int    _UU32;
117290001Sglebius    typedef signed char     _US8;
118290001Sglebius    typedef signed short    _US16;
119290001Sglebius    typedef signed int      _US32;
120290001Sglebius#elif (UNITY_INT_WIDTH == 16)
121290001Sglebius    typedef unsigned char   _UU8;
122290001Sglebius    typedef unsigned int    _UU16;
123290001Sglebius    typedef unsigned long   _UU32;
124290001Sglebius    typedef signed char     _US8;
125290001Sglebius    typedef signed int      _US16;
126290001Sglebius    typedef signed long     _US32;
127290001Sglebius#else
128290001Sglebius    #error Invalid UNITY_INT_WIDTH specified! (16 or 32 are supported)
129290001Sglebius#endif
130290001Sglebius
131290001Sglebius//-------------------------------------------------------
132290001Sglebius// 64-bit Support
133290001Sglebius//-------------------------------------------------------
134290001Sglebius
135290001Sglebius#ifndef UNITY_SUPPORT_64
136290001Sglebius#if UNITY_LONG_WIDTH > 32
137290001Sglebius#define UNITY_SUPPORT_64
138290001Sglebius#endif
139290001Sglebius#endif
140290001Sglebius#ifndef UNITY_SUPPORT_64
141290001Sglebius#if UNITY_POINTER_WIDTH > 32
142290001Sglebius#define UNITY_SUPPORT_64
143290001Sglebius#endif
144290001Sglebius#endif
145290001Sglebius
146290001Sglebius#ifndef UNITY_SUPPORT_64
147290001Sglebius
148290001Sglebius//No 64-bit Support
149290001Sglebiustypedef _UU32 _U_UINT;
150290001Sglebiustypedef _US32 _U_SINT;
151290001Sglebius
152290001Sglebius#else
153290001Sglebius
154290001Sglebius//64-bit Support
155290001Sglebius#if (UNITY_LONG_WIDTH == 32)
156290001Sglebius    typedef unsigned long long _UU64;
157290001Sglebius    typedef signed long long   _US64;
158290001Sglebius#elif (UNITY_LONG_WIDTH == 64)
159290001Sglebius    typedef unsigned long      _UU64;
160290001Sglebius    typedef signed long        _US64;
161290001Sglebius#else
162290001Sglebius    #error Invalid UNITY_LONG_WIDTH specified! (32 or 64 are supported)
163290001Sglebius#endif
164290001Sglebiustypedef _UU64 _U_UINT;
165290001Sglebiustypedef _US64 _U_SINT;
166290001Sglebius
167290001Sglebius#endif
168290001Sglebius
169290001Sglebius//-------------------------------------------------------
170290001Sglebius// Pointer Support
171290001Sglebius//-------------------------------------------------------
172290001Sglebius
173290001Sglebius#if (UNITY_POINTER_WIDTH == 32)
174290001Sglebius    typedef _UU32 _UP;
175290001Sglebius#define UNITY_DISPLAY_STYLE_POINTER UNITY_DISPLAY_STYLE_HEX32
176290001Sglebius#elif (UNITY_POINTER_WIDTH == 64)
177290001Sglebius    typedef _UU64 _UP;
178290001Sglebius#define UNITY_DISPLAY_STYLE_POINTER UNITY_DISPLAY_STYLE_HEX64
179290001Sglebius#elif (UNITY_POINTER_WIDTH == 16)
180290001Sglebius    typedef _UU16 _UP;
181290001Sglebius#define UNITY_DISPLAY_STYLE_POINTER UNITY_DISPLAY_STYLE_HEX16
182290001Sglebius#else
183290001Sglebius    #error Invalid UNITY_POINTER_WIDTH specified! (16, 32 or 64 are supported)
184290001Sglebius#endif
185290001Sglebius
186290001Sglebius#ifndef UNITY_PTR_ATTRIBUTE
187290001Sglebius  #define UNITY_PTR_ATTRIBUTE
188290001Sglebius#endif
189290001Sglebius
190290001Sglebius//-------------------------------------------------------
191290001Sglebius// Float Support
192290001Sglebius//-------------------------------------------------------
193290001Sglebius
194290001Sglebius#ifdef UNITY_EXCLUDE_FLOAT
195290001Sglebius
196290001Sglebius//No Floating Point Support
197290001Sglebius#undef UNITY_INCLUDE_FLOAT
198290001Sglebius#undef UNITY_FLOAT_PRECISION
199290001Sglebius#undef UNITY_FLOAT_TYPE
200290001Sglebius#undef UNITY_FLOAT_VERBOSE
201290001Sglebius
202290001Sglebius#else
203290001Sglebius
204290001Sglebius#ifndef UNITY_INCLUDE_FLOAT
205290001Sglebius#define UNITY_INCLUDE_FLOAT
206290001Sglebius#endif
207290001Sglebius
208290001Sglebius//Floating Point Support
209290001Sglebius#ifndef UNITY_FLOAT_PRECISION
210290001Sglebius#define UNITY_FLOAT_PRECISION (0.00001f)
211290001Sglebius#endif
212290001Sglebius#ifndef UNITY_FLOAT_TYPE
213290001Sglebius#define UNITY_FLOAT_TYPE float
214290001Sglebius#endif
215290001Sglebiustypedef UNITY_FLOAT_TYPE _UF;
216290001Sglebius
217290001Sglebius#endif
218290001Sglebius
219290001Sglebius//-------------------------------------------------------
220290001Sglebius// Double Float Support
221290001Sglebius//-------------------------------------------------------
222290001Sglebius
223290001Sglebius//unlike FLOAT, we DON'T include by default
224290001Sglebius#ifndef UNITY_EXCLUDE_DOUBLE
225290001Sglebius#ifndef UNITY_INCLUDE_DOUBLE
226290001Sglebius#define UNITY_EXCLUDE_DOUBLE
227290001Sglebius#endif
228290001Sglebius#endif
229290001Sglebius
230290001Sglebius#ifdef UNITY_EXCLUDE_DOUBLE
231290001Sglebius
232290001Sglebius//No Floating Point Support
233290001Sglebius#undef UNITY_DOUBLE_PRECISION
234290001Sglebius#undef UNITY_DOUBLE_TYPE
235290001Sglebius#undef UNITY_DOUBLE_VERBOSE
236290001Sglebius
237290001Sglebius#ifdef UNITY_INCLUDE_DOUBLE
238290001Sglebius#undef UNITY_INCLUDE_DOUBLE
239290001Sglebius#endif
240290001Sglebius
241290001Sglebius#else
242290001Sglebius
243290001Sglebius//Double Floating Point Support
244290001Sglebius#ifndef UNITY_DOUBLE_PRECISION
245290001Sglebius#define UNITY_DOUBLE_PRECISION (1e-12f)
246290001Sglebius#endif
247290001Sglebius#ifndef UNITY_DOUBLE_TYPE
248290001Sglebius#define UNITY_DOUBLE_TYPE double
249290001Sglebius#endif
250290001Sglebiustypedef UNITY_DOUBLE_TYPE _UD;
251290001Sglebius
252290001Sglebius#endif
253290001Sglebius
254290001Sglebius#ifdef UNITY_DOUBLE_VERBOSE
255290001Sglebius#ifndef UNITY_FLOAT_VERBOSE
256290001Sglebius#define UNITY_FLOAT_VERBOSE
257290001Sglebius#endif
258290001Sglebius#endif
259290001Sglebius
260290001Sglebius//-------------------------------------------------------
261290001Sglebius// Output Method: stdout (DEFAULT)
262290001Sglebius//-------------------------------------------------------
263290001Sglebius#ifndef UNITY_OUTPUT_CHAR
264290001Sglebius//Default to using putchar, which is defined in stdio.h
265290001Sglebius#include <stdio.h>
266290001Sglebius#define UNITY_OUTPUT_CHAR(a) putchar(a)
267290001Sglebius#else
268290001Sglebius//If defined as something else, make sure we declare it here so it's ready for use
269290001Sglebiusextern int UNITY_OUTPUT_CHAR(int);
270290001Sglebius#endif
271290001Sglebius
272290001Sglebius#ifndef UNITY_OUTPUT_START
273290001Sglebius#define UNITY_OUTPUT_START()
274290001Sglebius#endif
275290001Sglebius
276290001Sglebius#ifndef UNITY_OUTPUT_COMPLETE
277290001Sglebius#define UNITY_OUTPUT_COMPLETE()
278290001Sglebius#endif
279290001Sglebius
280290001Sglebius//-------------------------------------------------------
281290001Sglebius// Footprint
282290001Sglebius//-------------------------------------------------------
283290001Sglebius
284290001Sglebius#ifndef UNITY_LINE_TYPE
285290001Sglebius#define UNITY_LINE_TYPE _U_UINT
286290001Sglebius#endif
287290001Sglebius
288290001Sglebius#ifndef UNITY_COUNTER_TYPE
289290001Sglebius#define UNITY_COUNTER_TYPE _U_UINT
290290001Sglebius#endif
291290001Sglebius
292290001Sglebius//-------------------------------------------------------
293290001Sglebius// Language Features Available
294290001Sglebius//-------------------------------------------------------
295290001Sglebius#if !defined(UNITY_WEAK_ATTRIBUTE) && !defined(UNITY_WEAK_PRAGMA)
296290001Sglebius#   ifdef __GNUC__ // includes clang
297290001Sglebius#       if !(defined(__WIN32__) && defined(__clang__))
298290001Sglebius#           define UNITY_WEAK_ATTRIBUTE __attribute__((weak))
299290001Sglebius#       endif
300290001Sglebius#   endif
301290001Sglebius#endif
302290001Sglebius
303290001Sglebius#ifdef UNITY_NO_WEAK
304290001Sglebius#   undef UNITY_WEAK_ATTRIBUTE
305290001Sglebius#   undef UNITY_WEAK_PRAGMA
306290001Sglebius#endif
307290001Sglebius
308293896Sglebius#if !defined(UNITY_NORETURN_ATTRIBUTE)
309293896Sglebius#   ifdef __GNUC__ // includes clang
310293896Sglebius#       if !(defined(__WIN32__) && defined(__clang__))
311293896Sglebius#           define UNITY_NORETURN_ATTRIBUTE __attribute__((noreturn))
312293896Sglebius#       endif
313293896Sglebius#   endif
314293896Sglebius#endif
315290001Sglebius
316293896Sglebius#ifndef UNITY_NORETURN_ATTRIBUTE
317293896Sglebius#   define UNITY_NORETURN_ATTRIBUTE
318293896Sglebius#endif
319293896Sglebius
320293896Sglebius
321290001Sglebius//-------------------------------------------------------
322290001Sglebius// Internal Structs Needed
323290001Sglebius//-------------------------------------------------------
324290001Sglebius
325290001Sglebiustypedef void (*UnityTestFunction)(void);
326290001Sglebius
327290001Sglebius#define UNITY_DISPLAY_RANGE_INT  (0x10)
328290001Sglebius#define UNITY_DISPLAY_RANGE_UINT (0x20)
329290001Sglebius#define UNITY_DISPLAY_RANGE_HEX  (0x40)
330290001Sglebius#define UNITY_DISPLAY_RANGE_AUTO (0x80)
331290001Sglebius
332290001Sglebiustypedef enum
333290001Sglebius{
334290001Sglebius#if (UNITY_INT_WIDTH == 16)
335290001Sglebius    UNITY_DISPLAY_STYLE_INT      = 2 + UNITY_DISPLAY_RANGE_INT + UNITY_DISPLAY_RANGE_AUTO,
336290001Sglebius#elif (UNITY_INT_WIDTH  == 32)
337290001Sglebius    UNITY_DISPLAY_STYLE_INT      = 4 + UNITY_DISPLAY_RANGE_INT + UNITY_DISPLAY_RANGE_AUTO,
338290001Sglebius#elif (UNITY_INT_WIDTH  == 64)
339290001Sglebius    UNITY_DISPLAY_STYLE_INT      = 8 + UNITY_DISPLAY_RANGE_INT + UNITY_DISPLAY_RANGE_AUTO,
340290001Sglebius#endif
341290001Sglebius    UNITY_DISPLAY_STYLE_INT8     = 1 + UNITY_DISPLAY_RANGE_INT,
342290001Sglebius    UNITY_DISPLAY_STYLE_INT16    = 2 + UNITY_DISPLAY_RANGE_INT,
343290001Sglebius    UNITY_DISPLAY_STYLE_INT32    = 4 + UNITY_DISPLAY_RANGE_INT,
344290001Sglebius#ifdef UNITY_SUPPORT_64
345290001Sglebius    UNITY_DISPLAY_STYLE_INT64    = 8 + UNITY_DISPLAY_RANGE_INT,
346290001Sglebius#endif
347290001Sglebius
348290001Sglebius#if (UNITY_INT_WIDTH == 16)
349290001Sglebius    UNITY_DISPLAY_STYLE_UINT     = 2 + UNITY_DISPLAY_RANGE_UINT + UNITY_DISPLAY_RANGE_AUTO,
350290001Sglebius#elif (UNITY_INT_WIDTH  == 32)
351290001Sglebius    UNITY_DISPLAY_STYLE_UINT     = 4 + UNITY_DISPLAY_RANGE_UINT + UNITY_DISPLAY_RANGE_AUTO,
352290001Sglebius#elif (UNITY_INT_WIDTH  == 64)
353290001Sglebius    UNITY_DISPLAY_STYLE_UINT     = 8 + UNITY_DISPLAY_RANGE_UINT + UNITY_DISPLAY_RANGE_AUTO,
354290001Sglebius#endif
355290001Sglebius    UNITY_DISPLAY_STYLE_UINT8    = 1 + UNITY_DISPLAY_RANGE_UINT,
356290001Sglebius    UNITY_DISPLAY_STYLE_UINT16   = 2 + UNITY_DISPLAY_RANGE_UINT,
357290001Sglebius    UNITY_DISPLAY_STYLE_UINT32   = 4 + UNITY_DISPLAY_RANGE_UINT,
358290001Sglebius#ifdef UNITY_SUPPORT_64
359290001Sglebius    UNITY_DISPLAY_STYLE_UINT64   = 8 + UNITY_DISPLAY_RANGE_UINT,
360290001Sglebius#endif
361290001Sglebius    UNITY_DISPLAY_STYLE_HEX8     = 1 + UNITY_DISPLAY_RANGE_HEX,
362290001Sglebius    UNITY_DISPLAY_STYLE_HEX16    = 2 + UNITY_DISPLAY_RANGE_HEX,
363290001Sglebius    UNITY_DISPLAY_STYLE_HEX32    = 4 + UNITY_DISPLAY_RANGE_HEX,
364290001Sglebius#ifdef UNITY_SUPPORT_64
365290001Sglebius    UNITY_DISPLAY_STYLE_HEX64    = 8 + UNITY_DISPLAY_RANGE_HEX,
366290001Sglebius#endif
367290001Sglebius    UNITY_DISPLAY_STYLE_UNKNOWN
368290001Sglebius} UNITY_DISPLAY_STYLE_T;
369290001Sglebius
370290001Sglebius#ifndef UNITY_EXCLUDE_FLOAT
371290001Sglebiustypedef enum _UNITY_FLOAT_TRAIT_T
372290001Sglebius{
373290001Sglebius    UNITY_FLOAT_IS_NOT_INF       = 0,
374290001Sglebius    UNITY_FLOAT_IS_INF,
375290001Sglebius    UNITY_FLOAT_IS_NOT_NEG_INF,
376290001Sglebius    UNITY_FLOAT_IS_NEG_INF,
377290001Sglebius    UNITY_FLOAT_IS_NOT_NAN,
378290001Sglebius    UNITY_FLOAT_IS_NAN,
379290001Sglebius    UNITY_FLOAT_IS_NOT_DET,
380290001Sglebius    UNITY_FLOAT_IS_DET,
381290001Sglebius} UNITY_FLOAT_TRAIT_T;
382290001Sglebius#endif
383290001Sglebius
384290001Sglebiusstruct _Unity
385290001Sglebius{
386290001Sglebius    const char* TestFile;
387290001Sglebius    const char* CurrentTestName;
388290001Sglebius    UNITY_LINE_TYPE CurrentTestLineNumber;
389290001Sglebius    UNITY_COUNTER_TYPE NumberOfTests;
390290001Sglebius    UNITY_COUNTER_TYPE TestFailures;
391290001Sglebius    UNITY_COUNTER_TYPE TestIgnores;
392290001Sglebius    UNITY_COUNTER_TYPE CurrentTestFailed;
393290001Sglebius    UNITY_COUNTER_TYPE CurrentTestIgnored;
394290001Sglebius    jmp_buf AbortFrame;
395290001Sglebius	int isExpectingFail;
396290001Sglebius	UNITY_COUNTER_TYPE TestXFAILS;
397290001Sglebius	UNITY_COUNTER_TYPE TestPasses;
398290001Sglebius	UNITY_COUNTER_TYPE TestXPASSES;
399290001Sglebius	const char* XFAILMessage;
400290001Sglebius};
401290001Sglebius
402290001Sglebiusextern struct _Unity Unity;
403290001Sglebius
404290001Sglebius//-------------------------------------------------------
405290001Sglebius// Test Suite Management
406290001Sglebius//-------------------------------------------------------
407290001Sglebius
408290001Sglebiusvoid UnityBegin(const char* filename);
409290001Sglebiusint  UnityEnd(void);
410290001Sglebiusvoid UnityConcludeTest(void);
411290001Sglebiusvoid UnityDefaultTestRun(UnityTestFunction Func, const char* FuncName, const int FuncLineNum);
412290001Sglebius
413290001Sglebius//-------------------------------------------------------
414290001Sglebius// Test Output
415290001Sglebius//-------------------------------------------------------
416290001Sglebius
417290001Sglebiusvoid UnityPrint(const char* string);
418290001Sglebiusvoid UnityPrintMask(const _U_UINT mask, const _U_UINT number);
419290001Sglebiusvoid UnityPrintNumberByStyle(const _U_SINT number, const UNITY_DISPLAY_STYLE_T style);
420290001Sglebiusvoid UnityPrintNumber(const _U_SINT number);
421290001Sglebiusvoid UnityPrintNumberUnsigned(const _U_UINT number);
422290001Sglebiusvoid UnityPrintNumberHex(const _U_UINT number, const char nibbles);
423290001Sglebius
424290001Sglebius#ifdef UNITY_FLOAT_VERBOSE
425290001Sglebiusvoid UnityPrintFloat(const _UF number);
426290001Sglebius#endif
427290001Sglebius
428290001Sglebius//-------------------------------------------------------
429290001Sglebius// Test Assertion Fuctions
430290001Sglebius//-------------------------------------------------------
431290001Sglebius//  Use the macros below this section instead of calling
432290001Sglebius//  these directly. The macros have a consistent naming
433290001Sglebius//  convention and will pull in file and line information
434290001Sglebius//  for you.
435290001Sglebius
436290001Sglebiusvoid UnityAssertEqualNumber(const _U_SINT expected,
437290001Sglebius                            const _U_SINT actual,
438290001Sglebius                            const char* msg,
439290001Sglebius                            const UNITY_LINE_TYPE lineNumber,
440290001Sglebius                            const UNITY_DISPLAY_STYLE_T style);
441290001Sglebius
442290001Sglebiusvoid UnityAssertEqualIntArray(UNITY_PTR_ATTRIBUTE const void* expected,
443290001Sglebius                              UNITY_PTR_ATTRIBUTE const void* actual,
444290001Sglebius                              const _UU32 num_elements,
445290001Sglebius                              const char* msg,
446290001Sglebius                              const UNITY_LINE_TYPE lineNumber,
447290001Sglebius                              const UNITY_DISPLAY_STYLE_T style);
448290001Sglebius
449290001Sglebiusvoid UnityAssertBits(const _U_SINT mask,
450290001Sglebius                     const _U_SINT expected,
451290001Sglebius                     const _U_SINT actual,
452290001Sglebius                     const char* msg,
453290001Sglebius                     const UNITY_LINE_TYPE lineNumber);
454290001Sglebius
455290001Sglebiusvoid UnityAssertEqualString(const char* expected,
456290001Sglebius                            const char* actual,
457290001Sglebius                            const char* msg,
458290001Sglebius                            const UNITY_LINE_TYPE lineNumber);
459290001Sglebius
460290001Sglebiusvoid UnityAssertEqualStringArray( const char** expected,
461290001Sglebius                                  const char** actual,
462290001Sglebius                                  const _UU32 num_elements,
463290001Sglebius                                  const char* msg,
464290001Sglebius                                  const UNITY_LINE_TYPE lineNumber);
465290001Sglebius
466290001Sglebiusvoid UnityAssertEqualMemory( UNITY_PTR_ATTRIBUTE const void* expected,
467290001Sglebius                             UNITY_PTR_ATTRIBUTE const void* actual,
468290001Sglebius                             const _UU32 length,
469290001Sglebius                             const _UU32 num_elements,
470290001Sglebius                             const char* msg,
471290001Sglebius                             const UNITY_LINE_TYPE lineNumber);
472290001Sglebius
473290001Sglebiusvoid UnityAssertNumbersWithin(const _U_SINT delta,
474290001Sglebius                              const _U_SINT expected,
475290001Sglebius                              const _U_SINT actual,
476290001Sglebius                              const char* msg,
477290001Sglebius                              const UNITY_LINE_TYPE lineNumber,
478290001Sglebius                              const UNITY_DISPLAY_STYLE_T style);
479290001Sglebius
480293896Sglebiusvoid UnityFail(const char* message, const UNITY_LINE_TYPE line) UNITY_NORETURN_ATTRIBUTE;
481290001Sglebius
482290001Sglebiusvoid UnityIgnore(const char* message, const UNITY_LINE_TYPE line);
483290001Sglebius
484290001Sglebius#ifndef UNITY_EXCLUDE_FLOAT
485290001Sglebiusvoid UnityAssertFloatsWithin(const _UF delta,
486290001Sglebius                             const _UF expected,
487290001Sglebius                             const _UF actual,
488290001Sglebius                             const char* msg,
489290001Sglebius                             const UNITY_LINE_TYPE lineNumber);
490290001Sglebius
491290001Sglebiusvoid UnityAssertEqualFloatArray(UNITY_PTR_ATTRIBUTE const _UF* expected,
492290001Sglebius                                UNITY_PTR_ATTRIBUTE const _UF* actual,
493290001Sglebius                                const _UU32 num_elements,
494290001Sglebius                                const char* msg,
495290001Sglebius                                const UNITY_LINE_TYPE lineNumber);
496290001Sglebius
497290001Sglebiusvoid UnityAssertFloatSpecial(const _UF actual,
498290001Sglebius                             const char* msg,
499290001Sglebius                             const UNITY_LINE_TYPE lineNumber,
500290001Sglebius                             const UNITY_FLOAT_TRAIT_T style);
501290001Sglebius#endif
502290001Sglebius
503290001Sglebius#ifndef UNITY_EXCLUDE_DOUBLE
504290001Sglebiusvoid UnityAssertDoublesWithin(const _UD delta,
505290001Sglebius                              const _UD expected,
506290001Sglebius                              const _UD actual,
507290001Sglebius                              const char* msg,
508290001Sglebius                              const UNITY_LINE_TYPE lineNumber);
509290001Sglebius
510290001Sglebiusvoid UnityAssertEqualDoubleArray(UNITY_PTR_ATTRIBUTE const _UD* expected,
511290001Sglebius                                 UNITY_PTR_ATTRIBUTE const _UD* actual,
512290001Sglebius                                 const _UU32 num_elements,
513290001Sglebius                                 const char* msg,
514290001Sglebius                                 const UNITY_LINE_TYPE lineNumber);
515290001Sglebius
516290001Sglebiusvoid UnityAssertDoubleSpecial(const _UD actual,
517290001Sglebius                              const char* msg,
518290001Sglebius                              const UNITY_LINE_TYPE lineNumber,
519290001Sglebius                              const UNITY_FLOAT_TRAIT_T style);
520290001Sglebius#endif
521290001Sglebius
522290001Sglebius//-------------------------------------------------------
523290001Sglebius// Error Strings We Might Need
524290001Sglebius//-------------------------------------------------------
525290001Sglebius
526290001Sglebiusextern const char UnityStrErrFloat[];
527290001Sglebiusextern const char UnityStrErrDouble[];
528290001Sglebiusextern const char UnityStrErr64[];
529290001Sglebius
530290001Sglebius//-------------------------------------------------------
531290001Sglebius// Test Running Macros
532290001Sglebius//-------------------------------------------------------
533290001Sglebius
534290001Sglebius#define TEST_PROTECT() (setjmp(Unity.AbortFrame) == 0)
535290001Sglebius
536290001Sglebius#define TEST_ABORT() {longjmp(Unity.AbortFrame, 1);}
537290001Sglebius
538290001Sglebius//This tricky series of macros gives us an optional line argument to treat it as RUN_TEST(func, num=__LINE__)
539290001Sglebius#ifndef RUN_TEST
540290001Sglebius#ifdef __STDC_VERSION__
541290001Sglebius#if __STDC_VERSION__ >= 199901L
542290001Sglebius#define RUN_TEST(...) UnityDefaultTestRun(RUN_TEST_FIRST(__VA_ARGS__), RUN_TEST_SECOND(__VA_ARGS__))
543290001Sglebius#define RUN_TEST_FIRST(...) RUN_TEST_FIRST_HELPER(__VA_ARGS__, throwaway)
544290001Sglebius#define RUN_TEST_FIRST_HELPER(first,...) first, #first
545290001Sglebius#define RUN_TEST_SECOND(...) RUN_TEST_SECOND_HELPER(__VA_ARGS__, __LINE__, throwaway)
546290001Sglebius#define RUN_TEST_SECOND_HELPER(first,second,...) second
547290001Sglebius#endif
548290001Sglebius#endif
549290001Sglebius#endif
550290001Sglebius
551290001Sglebius//If we can't do the tricky version, we'll just have to require them to always include the line number
552290001Sglebius#ifndef RUN_TEST
553290001Sglebius#ifdef CMOCK
554290001Sglebius#define RUN_TEST(func, num) UnityDefaultTestRun(func, #func, num)
555290001Sglebius#else
556290001Sglebius#define RUN_TEST(func) UnityDefaultTestRun(func, #func, __LINE__)
557290001Sglebius#endif
558290001Sglebius#endif
559290001Sglebius
560290001Sglebius#define TEST_LINE_NUM (Unity.CurrentTestLineNumber)
561290001Sglebius#define TEST_IS_IGNORED (Unity.CurrentTestIgnored)
562290001Sglebius#define UNITY_NEW_TEST(a) \
563290001Sglebius    Unity.CurrentTestName = a; \
564290001Sglebius    Unity.CurrentTestLineNumber = (UNITY_LINE_TYPE)(__LINE__); \
565290001Sglebius    Unity.NumberOfTests++;
566290001Sglebius
567290001Sglebius#ifndef UNITY_BEGIN
568290001Sglebius#define UNITY_BEGIN() UnityBegin(__FILE__)
569290001Sglebius#endif
570290001Sglebius
571290001Sglebius#ifndef UNITY_END
572290001Sglebius#define UNITY_END() UnityEnd()
573290001Sglebius#endif
574290001Sglebius
575290001Sglebius//-------------------------------------------------------
576290001Sglebius// Basic Fail and Ignore
577290001Sglebius//-------------------------------------------------------
578290001Sglebius
579290001Sglebius#define UNITY_TEST_FAIL(line, message)   UnityFail(   (message), (UNITY_LINE_TYPE)line);
580290001Sglebius#define UNITY_TEST_IGNORE(line, message) UnityIgnore( (message), (UNITY_LINE_TYPE)line);
581290001Sglebius
582290001Sglebius//-------------------------------------------------------
583290001Sglebius// Test Asserts
584290001Sglebius//-------------------------------------------------------
585290001Sglebius
586290001Sglebius#define UNITY_TEST_ASSERT(condition, line, message)                                              if (condition) {} else {UNITY_TEST_FAIL((UNITY_LINE_TYPE)line, message);}
587290001Sglebius#define UNITY_TEST_ASSERT_NULL(pointer, line, message)                                           UNITY_TEST_ASSERT(((pointer) == NULL),  (UNITY_LINE_TYPE)line, message)
588290001Sglebius#define UNITY_TEST_ASSERT_NOT_NULL(pointer, line, message)                                       UNITY_TEST_ASSERT(((pointer) != NULL),  (UNITY_LINE_TYPE)line, message)
589290001Sglebius
590290001Sglebius#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)
591290001Sglebius#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)
592290001Sglebius#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)
593290001Sglebius#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)
594290001Sglebius#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)
595290001Sglebius#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)
596290001Sglebius#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)
597290001Sglebius#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)
598290001Sglebius#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)
599290001Sglebius#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)
600290001Sglebius#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)
601290001Sglebius#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)
602290001Sglebius
603290001Sglebius#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)
604290001Sglebius#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)
605290001Sglebius#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)
606290001Sglebius#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)
607290001Sglebius#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)
608290001Sglebius#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)
609290001Sglebius#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)
610290001Sglebius#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)
611290001Sglebius#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)
612290001Sglebius#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)
613290001Sglebius#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)
614290001Sglebius
615290001Sglebius#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)
616290001Sglebius#define UNITY_TEST_ASSERT_EQUAL_STRING(expected, actual, line, message)                          UnityAssertEqualString((const char*)(expected), (const char*)(actual), (message), (UNITY_LINE_TYPE)line)
617294905Sdelphij#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)
618290001Sglebius
619290001Sglebius#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)
620290001Sglebius#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)
621290001Sglebius#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)
622290001Sglebius#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)
623290001Sglebius#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)
624290001Sglebius#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)
625290001Sglebius#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)
626290001Sglebius#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)
627290001Sglebius#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)
628290001Sglebius#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)
629290001Sglebius#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)
630290001Sglebius#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)
631290001Sglebius#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)
632290001Sglebius#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)
633290001Sglebius
634290001Sglebius#ifdef UNITY_SUPPORT_64
635290001Sglebius#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)
636290001Sglebius#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)
637290001Sglebius#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)
638290001Sglebius#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)
639290001Sglebius#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)
640290001Sglebius#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)
641290001Sglebius#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)
642290001Sglebius#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)
643290001Sglebius#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)
644290001Sglebius#else
645290001Sglebius#define UNITY_TEST_ASSERT_EQUAL_INT64(expected, actual, line, message)                           UNITY_TEST_FAIL((UNITY_LINE_TYPE)line, UnityStrErr64)
646290001Sglebius#define UNITY_TEST_ASSERT_EQUAL_UINT64(expected, actual, line, message)                          UNITY_TEST_FAIL((UNITY_LINE_TYPE)line, UnityStrErr64)
647290001Sglebius#define UNITY_TEST_ASSERT_EQUAL_HEX64(expected, actual, line, message)                           UNITY_TEST_FAIL((UNITY_LINE_TYPE)line, UnityStrErr64)
648290001Sglebius#define UNITY_TEST_ASSERT_EQUAL_INT64_ARRAY(expected, actual, num_elements, line, message)       UNITY_TEST_FAIL((UNITY_LINE_TYPE)line, UnityStrErr64)
649290001Sglebius#define UNITY_TEST_ASSERT_EQUAL_UINT64_ARRAY(expected, actual, num_elements, line, message)      UNITY_TEST_FAIL((UNITY_LINE_TYPE)line, UnityStrErr64)
650290001Sglebius#define UNITY_TEST_ASSERT_EQUAL_HEX64_ARRAY(expected, actual, num_elements, line, message)       UNITY_TEST_FAIL((UNITY_LINE_TYPE)line, UnityStrErr64)
651290001Sglebius#define UNITY_TEST_ASSERT_INT64_WITHIN(delta, expected, actual, line, message)                   UNITY_TEST_FAIL((UNITY_LINE_TYPE)line, UnityStrErr64)
652290001Sglebius#define UNITY_TEST_ASSERT_UINT64_WITHIN(delta, expected, actual, line, message)                  UNITY_TEST_FAIL((UNITY_LINE_TYPE)line, UnityStrErr64)
653290001Sglebius#define UNITY_TEST_ASSERT_HEX64_WITHIN(delta, expected, actual, line, message)                   UNITY_TEST_FAIL((UNITY_LINE_TYPE)line, UnityStrErr64)
654290001Sglebius#endif
655290001Sglebius
656290001Sglebius#ifdef UNITY_EXCLUDE_FLOAT
657290001Sglebius#define UNITY_TEST_ASSERT_FLOAT_WITHIN(delta, expected, actual, line, message)                   UNITY_TEST_FAIL((UNITY_LINE_TYPE)line, UnityStrErrFloat)
658290001Sglebius#define UNITY_TEST_ASSERT_EQUAL_FLOAT(expected, actual, line, message)                           UNITY_TEST_FAIL((UNITY_LINE_TYPE)line, UnityStrErrFloat)
659290001Sglebius#define UNITY_TEST_ASSERT_EQUAL_FLOAT_ARRAY(expected, actual, num_elements, line, message)       UNITY_TEST_FAIL((UNITY_LINE_TYPE)line, UnityStrErrFloat)
660290001Sglebius#define UNITY_TEST_ASSERT_FLOAT_IS_INF(actual, line, message)                                    UNITY_TEST_FAIL((UNITY_LINE_TYPE)line, UnityStrErrFloat)
661290001Sglebius#define UNITY_TEST_ASSERT_FLOAT_IS_NEG_INF(actual, line, message)                                UNITY_TEST_FAIL((UNITY_LINE_TYPE)line, UnityStrErrFloat)
662290001Sglebius#define UNITY_TEST_ASSERT_FLOAT_IS_NAN(actual, line, message)                                    UNITY_TEST_FAIL((UNITY_LINE_TYPE)line, UnityStrErrFloat)
663290001Sglebius#define UNITY_TEST_ASSERT_FLOAT_IS_DETERMINATE(actual, line, message)                            UNITY_TEST_FAIL((UNITY_LINE_TYPE)line, UnityStrErrFloat)
664290001Sglebius#define UNITY_TEST_ASSERT_FLOAT_IS_NOT_INF(actual, line, message)                                UNITY_TEST_FAIL((UNITY_LINE_TYPE)line, UnityStrErrFloat)
665290001Sglebius#define UNITY_TEST_ASSERT_FLOAT_IS_NOT_NEG_INF(actual, line, message)                            UNITY_TEST_FAIL((UNITY_LINE_TYPE)line, UnityStrErrFloat)
666290001Sglebius#define UNITY_TEST_ASSERT_FLOAT_IS_NOT_NAN(actual, line, message)                                UNITY_TEST_FAIL((UNITY_LINE_TYPE)line, UnityStrErrFloat)
667290001Sglebius#define UNITY_TEST_ASSERT_FLOAT_IS_NOT_DETERMINATE(actual, line, message)                        UNITY_TEST_FAIL((UNITY_LINE_TYPE)line, UnityStrErrFloat)
668290001Sglebius#else
669290001Sglebius#define UNITY_TEST_ASSERT_FLOAT_WITHIN(delta, expected, actual, line, message)                   UnityAssertFloatsWithin((_UF)(delta), (_UF)(expected), (_UF)(actual), (message), (UNITY_LINE_TYPE)line)
670290001Sglebius#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)
671290001Sglebius#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)
672290001Sglebius#define UNITY_TEST_ASSERT_FLOAT_IS_INF(actual, line, message)                                    UnityAssertFloatSpecial((_UF)(actual), (message), (UNITY_LINE_TYPE)line, UNITY_FLOAT_IS_INF)
673290001Sglebius#define UNITY_TEST_ASSERT_FLOAT_IS_NEG_INF(actual, line, message)                                UnityAssertFloatSpecial((_UF)(actual), (message), (UNITY_LINE_TYPE)line, UNITY_FLOAT_IS_NEG_INF)
674290001Sglebius#define UNITY_TEST_ASSERT_FLOAT_IS_NAN(actual, line, message)                                    UnityAssertFloatSpecial((_UF)(actual), (message), (UNITY_LINE_TYPE)line, UNITY_FLOAT_IS_NAN)
675290001Sglebius#define UNITY_TEST_ASSERT_FLOAT_IS_DETERMINATE(actual, line, message)                            UnityAssertFloatSpecial((_UF)(actual), (message), (UNITY_LINE_TYPE)line, UNITY_FLOAT_IS_DET)
676290001Sglebius#define UNITY_TEST_ASSERT_FLOAT_IS_NOT_INF(actual, line, message)                                UnityAssertFloatSpecial((_UF)(actual), (message), (UNITY_LINE_TYPE)line, UNITY_FLOAT_IS_NOT_INF)
677290001Sglebius#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)
678290001Sglebius#define UNITY_TEST_ASSERT_FLOAT_IS_NOT_NAN(actual, line, message)                                UnityAssertFloatSpecial((_UF)(actual), (message), (UNITY_LINE_TYPE)line, UNITY_FLOAT_IS_NOT_NAN)
679290001Sglebius#define UNITY_TEST_ASSERT_FLOAT_IS_NOT_DETERMINATE(actual, line, message)                        UnityAssertFloatSpecial((_UF)(actual), (message), (UNITY_LINE_TYPE)line, UNITY_FLOAT_IS_NOT_DET)
680290001Sglebius#endif
681290001Sglebius
682290001Sglebius#ifdef UNITY_EXCLUDE_DOUBLE
683290001Sglebius#define UNITY_TEST_ASSERT_DOUBLE_WITHIN(delta, expected, actual, line, message)                  UNITY_TEST_FAIL((UNITY_LINE_TYPE)line, UnityStrErrDouble)
684290001Sglebius#define UNITY_TEST_ASSERT_EQUAL_DOUBLE(expected, actual, line, message)                          UNITY_TEST_FAIL((UNITY_LINE_TYPE)line, UnityStrErrDouble)
685290001Sglebius#define UNITY_TEST_ASSERT_EQUAL_DOUBLE_ARRAY(expected, actual, num_elements, line, message)      UNITY_TEST_FAIL((UNITY_LINE_TYPE)line, UnityStrErrDouble)
686290001Sglebius#define UNITY_TEST_ASSERT_DOUBLE_IS_INF(actual, line, message)                                   UNITY_TEST_FAIL((UNITY_LINE_TYPE)line, UnityStrErrDouble)
687290001Sglebius#define UNITY_TEST_ASSERT_DOUBLE_IS_NEG_INF(actual, line, message)                               UNITY_TEST_FAIL((UNITY_LINE_TYPE)line, UnityStrErrDouble)
688290001Sglebius#define UNITY_TEST_ASSERT_DOUBLE_IS_NAN(actual, line, message)                                   UNITY_TEST_FAIL((UNITY_LINE_TYPE)line, UnityStrErrDouble)
689290001Sglebius#define UNITY_TEST_ASSERT_DOUBLE_IS_DETERMINATE(actual, line, message)                           UNITY_TEST_FAIL((UNITY_LINE_TYPE)line, UnityStrErrDouble)
690290001Sglebius#define UNITY_TEST_ASSERT_DOUBLE_IS_NOT_INF(actual, line, message)                               UNITY_TEST_FAIL((UNITY_LINE_TYPE)line, UnityStrErrDouble)
691290001Sglebius#define UNITY_TEST_ASSERT_DOUBLE_IS_NOT_NEG_INF(actual, line, message)                           UNITY_TEST_FAIL((UNITY_LINE_TYPE)line, UnityStrErrDouble)
692290001Sglebius#define UNITY_TEST_ASSERT_DOUBLE_IS_NOT_NAN(actual, line, message)                               UNITY_TEST_FAIL((UNITY_LINE_TYPE)line, UnityStrErrDouble)
693290001Sglebius#define UNITY_TEST_ASSERT_DOUBLE_IS_NOT_DETERMINATE(actual, line, message)                       UNITY_TEST_FAIL((UNITY_LINE_TYPE)line, UnityStrErrDouble)
694290001Sglebius#else
695290001Sglebius#define UNITY_TEST_ASSERT_DOUBLE_WITHIN(delta, expected, actual, line, message)                  UnityAssertDoublesWithin((_UD)(delta), (_UD)(expected), (_UD)(actual), (message), (UNITY_LINE_TYPE)line)
696290001Sglebius#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)
697290001Sglebius#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)
698290001Sglebius#define UNITY_TEST_ASSERT_DOUBLE_IS_INF(actual, line, message)                                   UnityAssertDoubleSpecial((_UD)(actual), (message), (UNITY_LINE_TYPE)line, UNITY_FLOAT_IS_INF)
699290001Sglebius#define UNITY_TEST_ASSERT_DOUBLE_IS_NEG_INF(actual, line, message)                               UnityAssertDoubleSpecial((_UD)(actual), (message), (UNITY_LINE_TYPE)line, UNITY_FLOAT_IS_NEG_INF)
700290001Sglebius#define UNITY_TEST_ASSERT_DOUBLE_IS_NAN(actual, line, message)                                   UnityAssertDoubleSpecial((_UD)(actual), (message), (UNITY_LINE_TYPE)line, UNITY_FLOAT_IS_NAN)
701290001Sglebius#define UNITY_TEST_ASSERT_DOUBLE_IS_DETERMINATE(actual, line, message)                           UnityAssertDoubleSpecial((_UD)(actual), (message), (UNITY_LINE_TYPE)line, UNITY_FLOAT_IS_DET)
702290001Sglebius#define UNITY_TEST_ASSERT_DOUBLE_IS_NOT_INF(actual, line, message)                               UnityAssertDoubleSpecial((_UD)(actual), (message), (UNITY_LINE_TYPE)line, UNITY_FLOAT_IS_NOT_INF)
703290001Sglebius#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)
704290001Sglebius#define UNITY_TEST_ASSERT_DOUBLE_IS_NOT_NAN(actual, line, message)                               UnityAssertDoubleSpecial((_UD)(actual), (message), (UNITY_LINE_TYPE)line, UNITY_FLOAT_IS_NOT_NAN)
705290001Sglebius#define UNITY_TEST_ASSERT_DOUBLE_IS_NOT_DETERMINATE(actual, line, message)                       UnityAssertDoubleSpecial((_UD)(actual), (message), (UNITY_LINE_TYPE)line, UNITY_FLOAT_IS_NOT_DET)
706290001Sglebius#endif
707290001Sglebius
708290001Sglebius//End of UNITY_INTERNALS_H
709290001Sglebius#endif
710290001Sglebius
711290001Sglebius//#define TEST_EXPECT_FAIL()																		Unity.isExpectingFail = 1;
712290001Sglebius//#define TEST_EXPECT_FAIL_MESSAGE(message)														Unity.isExpectingFail = 1; Unity.XFAILMessage = message; //PROBLEM : does this work on all compilers?
713290001Sglebius
714290001Sglebius#define TEST_EXPECT_FAIL()																		UnityExpectFail();
715290001Sglebius#define TEST_EXPECT_FAIL_MESSAGE(message)														UnityExpectFailMessage( (message) );
716