xref: /netbsd-src/external/bsd/ntp/dist/sntp/unity/unity_internals.h (revision eabc0478de71e4e011a5b4e0392741e01d491794)
1*eabc0478Schristos /*	$NetBSD: unity_internals.h,v 1.3 2024/08/18 20:47:26 christos Exp $	*/
2067f5680Schristos 
3f17b710fSchristos /* ==========================================
4f17b710fSchristos     Unity Project - A Test Framework for C
5f17b710fSchristos     Copyright (c) 2007-14 Mike Karlesky, Mark VanderVoord, Greg Williams
6f17b710fSchristos     [Released under MIT License. Please refer to license.txt for details]
7f17b710fSchristos ========================================== */
8f17b710fSchristos 
9f17b710fSchristos #ifndef UNITY_INTERNALS_H
10f17b710fSchristos #define UNITY_INTERNALS_H
11f17b710fSchristos 
12f17b710fSchristos #ifdef UNITY_INCLUDE_CONFIG_H
13f17b710fSchristos #include "unity_config.h"
14f17b710fSchristos #endif
15f17b710fSchristos 
16f17b710fSchristos #include <setjmp.h>
17f17b710fSchristos 
18f17b710fSchristos // Unity Attempts to Auto-Detect Integer Types
19f17b710fSchristos // Attempt 1: UINT_MAX, ULONG_MAX, etc in <stdint.h>
20f17b710fSchristos // Attempt 2: UINT_MAX, ULONG_MAX, etc in <limits.h>
21f17b710fSchristos // Attempt 3: Deduced from sizeof() macros
22f17b710fSchristos #ifndef UNITY_EXCLUDE_STDINT_H
23f17b710fSchristos #include <stdint.h>
24f17b710fSchristos #endif
25f17b710fSchristos 
26f17b710fSchristos #ifndef UNITY_EXCLUDE_LIMITS_H
27f17b710fSchristos #include <limits.h>
28f17b710fSchristos #endif
29f17b710fSchristos 
30f17b710fSchristos #ifndef UNITY_EXCLUDE_SIZEOF
31f17b710fSchristos #ifndef UINT_MAX
32f17b710fSchristos #define UINT_MAX     (sizeof(unsigned int) * 256 - 1)
33f17b710fSchristos #endif
34f17b710fSchristos #ifndef ULONG_MAX
35f17b710fSchristos #define ULONG_MAX    (sizeof(unsigned long) * 256 - 1)
36f17b710fSchristos #endif
37f17b710fSchristos #ifndef UINTPTR_MAX
38f17b710fSchristos //apparently this is not a constant expression: (sizeof(unsigned int *) * 256 - 1) so we have to just let this fall through
39f17b710fSchristos #endif
40f17b710fSchristos #endif
41f17b710fSchristos //-------------------------------------------------------
42f17b710fSchristos // Guess Widths If Not Specified
43f17b710fSchristos //-------------------------------------------------------
44f17b710fSchristos 
45f17b710fSchristos // Determine the size of an int, if not already specificied.
46f17b710fSchristos // We cannot use sizeof(int), because it is not yet defined
47f17b710fSchristos // at this stage in the trnslation of the C program.
48f17b710fSchristos // Therefore, infer it from UINT_MAX if possible.
49f17b710fSchristos #ifndef UNITY_INT_WIDTH
50f17b710fSchristos   #ifdef UINT_MAX
51f17b710fSchristos     #if (UINT_MAX == 0xFFFF)
52f17b710fSchristos       #define UNITY_INT_WIDTH (16)
53f17b710fSchristos     #elif (UINT_MAX == 0xFFFFFFFF)
54f17b710fSchristos       #define UNITY_INT_WIDTH (32)
55f17b710fSchristos     #elif (UINT_MAX == 0xFFFFFFFFFFFFFFFF)
56f17b710fSchristos       #define UNITY_INT_WIDTH (64)
57f17b710fSchristos     #endif
58f17b710fSchristos   #endif
59f17b710fSchristos #endif
60f17b710fSchristos #ifndef UNITY_INT_WIDTH
61f17b710fSchristos   #define UNITY_INT_WIDTH (32)
62f17b710fSchristos #endif
63f17b710fSchristos 
64f17b710fSchristos // Determine the size of a long, if not already specified,
65f17b710fSchristos // by following the process used above to define
66f17b710fSchristos // UNITY_INT_WIDTH.
67f17b710fSchristos #ifndef UNITY_LONG_WIDTH
68f17b710fSchristos   #ifdef ULONG_MAX
69f17b710fSchristos     #if (ULONG_MAX == 0xFFFF)
70f17b710fSchristos       #define UNITY_LONG_WIDTH (16)
71f17b710fSchristos     #elif (ULONG_MAX == 0xFFFFFFFF)
72f17b710fSchristos       #define UNITY_LONG_WIDTH (32)
73f17b710fSchristos     #elif (ULONG_MAX == 0xFFFFFFFFFFFFFFFF)
74f17b710fSchristos       #define UNITY_LONG_WIDTH (64)
75f17b710fSchristos     #endif
76f17b710fSchristos   #endif
77f17b710fSchristos #endif
78f17b710fSchristos #ifndef UNITY_LONG_WIDTH
79f17b710fSchristos   #define UNITY_LONG_WIDTH (32)
80f17b710fSchristos #endif
81f17b710fSchristos 
82f17b710fSchristos // Determine the size of a pointer, if not already specified,
83f17b710fSchristos // by following the process used above to define
84f17b710fSchristos // UNITY_INT_WIDTH.
85f17b710fSchristos #ifndef UNITY_POINTER_WIDTH
86f17b710fSchristos   #ifdef UINTPTR_MAX
87a6f3f22fSchristos     #if (UINTPTR_MAX+0 <= 0xFFFF)
88f17b710fSchristos       #define UNITY_POINTER_WIDTH (16)
89a6f3f22fSchristos     #elif (UINTPTR_MAX+0 <= 0xFFFFFFFF)
90f17b710fSchristos       #define UNITY_POINTER_WIDTH (32)
91a6f3f22fSchristos     #elif (UINTPTR_MAX+0 <= 0xFFFFFFFFFFFFFFFF)
92f17b710fSchristos       #define UNITY_POINTER_WIDTH (64)
93f17b710fSchristos     #endif
94f17b710fSchristos   #endif
95f17b710fSchristos #endif
96f17b710fSchristos #ifndef UNITY_POINTER_WIDTH
97f17b710fSchristos   #ifdef INTPTR_MAX
98a6f3f22fSchristos     #if (INTPTR_MAX+0 <= 0x7FFF)
99f17b710fSchristos       #define UNITY_POINTER_WIDTH (16)
100a6f3f22fSchristos     #elif (INTPTR_MAX+0 <= 0x7FFFFFFF)
101f17b710fSchristos       #define UNITY_POINTER_WIDTH (32)
102a6f3f22fSchristos     #elif (INTPTR_MAX+0 <= 0x7FFFFFFFFFFFFFFF)
103f17b710fSchristos       #define UNITY_POINTER_WIDTH (64)
104f17b710fSchristos     #endif
105f17b710fSchristos   #endif
106f17b710fSchristos #endif
107f17b710fSchristos #ifndef UNITY_POINTER_WIDTH
108f17b710fSchristos   #define UNITY_POINTER_WIDTH UNITY_LONG_WIDTH
109f17b710fSchristos #endif
110f17b710fSchristos 
111f17b710fSchristos //-------------------------------------------------------
112f17b710fSchristos // Int Support (Define types based on detected sizes)
113f17b710fSchristos //-------------------------------------------------------
114f17b710fSchristos 
115f17b710fSchristos #if (UNITY_INT_WIDTH == 32)
116f17b710fSchristos     typedef unsigned char   _UU8;
117f17b710fSchristos     typedef unsigned short  _UU16;
118f17b710fSchristos     typedef unsigned int    _UU32;
119f17b710fSchristos     typedef signed char     _US8;
120f17b710fSchristos     typedef signed short    _US16;
121f17b710fSchristos     typedef signed int      _US32;
122f17b710fSchristos #elif (UNITY_INT_WIDTH == 16)
123f17b710fSchristos     typedef unsigned char   _UU8;
124f17b710fSchristos     typedef unsigned int    _UU16;
125f17b710fSchristos     typedef unsigned long   _UU32;
126f17b710fSchristos     typedef signed char     _US8;
127f17b710fSchristos     typedef signed int      _US16;
128f17b710fSchristos     typedef signed long     _US32;
129f17b710fSchristos #else
130f17b710fSchristos     #error Invalid UNITY_INT_WIDTH specified! (16 or 32 are supported)
131f17b710fSchristos #endif
132f17b710fSchristos 
133f17b710fSchristos //-------------------------------------------------------
134f17b710fSchristos // 64-bit Support
135f17b710fSchristos //-------------------------------------------------------
136f17b710fSchristos 
137f17b710fSchristos #ifndef UNITY_SUPPORT_64
138f17b710fSchristos #if UNITY_LONG_WIDTH > 32
139f17b710fSchristos #define UNITY_SUPPORT_64
140f17b710fSchristos #endif
141f17b710fSchristos #endif
142f17b710fSchristos #ifndef UNITY_SUPPORT_64
143f17b710fSchristos #if UNITY_POINTER_WIDTH > 32
144f17b710fSchristos #define UNITY_SUPPORT_64
145f17b710fSchristos #endif
146f17b710fSchristos #endif
147f17b710fSchristos 
148f17b710fSchristos #ifndef UNITY_SUPPORT_64
149f17b710fSchristos 
150f17b710fSchristos //No 64-bit Support
151f17b710fSchristos typedef _UU32 _U_UINT;
152f17b710fSchristos typedef _US32 _U_SINT;
153f17b710fSchristos 
154f17b710fSchristos #else
155f17b710fSchristos 
156f17b710fSchristos //64-bit Support
157f17b710fSchristos #if (UNITY_LONG_WIDTH == 32)
158f17b710fSchristos     typedef unsigned long long _UU64;
159f17b710fSchristos     typedef signed long long   _US64;
160f17b710fSchristos #elif (UNITY_LONG_WIDTH == 64)
161f17b710fSchristos     typedef unsigned long      _UU64;
162f17b710fSchristos     typedef signed long        _US64;
163f17b710fSchristos #else
164f17b710fSchristos     #error Invalid UNITY_LONG_WIDTH specified! (32 or 64 are supported)
165f17b710fSchristos #endif
166f17b710fSchristos typedef _UU64 _U_UINT;
167f17b710fSchristos typedef _US64 _U_SINT;
168f17b710fSchristos 
169f17b710fSchristos #endif
170f17b710fSchristos 
171f17b710fSchristos //-------------------------------------------------------
172f17b710fSchristos // Pointer Support
173f17b710fSchristos //-------------------------------------------------------
174f17b710fSchristos 
175f17b710fSchristos #if (UNITY_POINTER_WIDTH == 32)
176f17b710fSchristos     typedef _UU32 _UP;
177f17b710fSchristos #define UNITY_DISPLAY_STYLE_POINTER UNITY_DISPLAY_STYLE_HEX32
178f17b710fSchristos #elif (UNITY_POINTER_WIDTH == 64)
179f17b710fSchristos     typedef _UU64 _UP;
180f17b710fSchristos #define UNITY_DISPLAY_STYLE_POINTER UNITY_DISPLAY_STYLE_HEX64
181f17b710fSchristos #elif (UNITY_POINTER_WIDTH == 16)
182f17b710fSchristos     typedef _UU16 _UP;
183f17b710fSchristos #define UNITY_DISPLAY_STYLE_POINTER UNITY_DISPLAY_STYLE_HEX16
184f17b710fSchristos #else
185f17b710fSchristos     #error Invalid UNITY_POINTER_WIDTH specified! (16, 32 or 64 are supported)
186f17b710fSchristos #endif
187f17b710fSchristos 
188f17b710fSchristos #ifndef UNITY_PTR_ATTRIBUTE
189f17b710fSchristos   #define UNITY_PTR_ATTRIBUTE
190f17b710fSchristos #endif
191f17b710fSchristos 
192f17b710fSchristos //-------------------------------------------------------
193f17b710fSchristos // Float Support
194f17b710fSchristos //-------------------------------------------------------
195f17b710fSchristos 
196f17b710fSchristos #ifdef UNITY_EXCLUDE_FLOAT
197f17b710fSchristos 
198f17b710fSchristos //No Floating Point Support
199f17b710fSchristos #undef UNITY_INCLUDE_FLOAT
200f17b710fSchristos #undef UNITY_FLOAT_PRECISION
201f17b710fSchristos #undef UNITY_FLOAT_TYPE
202f17b710fSchristos #undef UNITY_FLOAT_VERBOSE
203f17b710fSchristos 
204f17b710fSchristos #else
205f17b710fSchristos 
206f17b710fSchristos #ifndef UNITY_INCLUDE_FLOAT
207f17b710fSchristos #define UNITY_INCLUDE_FLOAT
208f17b710fSchristos #endif
209f17b710fSchristos 
210f17b710fSchristos //Floating Point Support
211f17b710fSchristos #ifndef UNITY_FLOAT_PRECISION
212f17b710fSchristos #define UNITY_FLOAT_PRECISION (0.00001f)
213f17b710fSchristos #endif
214f17b710fSchristos #ifndef UNITY_FLOAT_TYPE
215f17b710fSchristos #define UNITY_FLOAT_TYPE float
216f17b710fSchristos #endif
217f17b710fSchristos typedef UNITY_FLOAT_TYPE _UF;
218f17b710fSchristos 
219f17b710fSchristos #endif
220f17b710fSchristos 
221f17b710fSchristos //-------------------------------------------------------
222f17b710fSchristos // Double Float Support
223f17b710fSchristos //-------------------------------------------------------
224f17b710fSchristos 
225f17b710fSchristos //unlike FLOAT, we DON'T include by default
226f17b710fSchristos #ifndef UNITY_EXCLUDE_DOUBLE
227f17b710fSchristos #ifndef UNITY_INCLUDE_DOUBLE
228f17b710fSchristos #define UNITY_EXCLUDE_DOUBLE
229f17b710fSchristos #endif
230f17b710fSchristos #endif
231f17b710fSchristos 
232f17b710fSchristos #ifdef UNITY_EXCLUDE_DOUBLE
233f17b710fSchristos 
234f17b710fSchristos //No Floating Point Support
235f17b710fSchristos #undef UNITY_DOUBLE_PRECISION
236f17b710fSchristos #undef UNITY_DOUBLE_TYPE
237f17b710fSchristos #undef UNITY_DOUBLE_VERBOSE
238f17b710fSchristos 
239f17b710fSchristos #ifdef UNITY_INCLUDE_DOUBLE
240f17b710fSchristos #undef UNITY_INCLUDE_DOUBLE
241f17b710fSchristos #endif
242f17b710fSchristos 
243f17b710fSchristos #else
244f17b710fSchristos 
245f17b710fSchristos //Double Floating Point Support
246f17b710fSchristos #ifndef UNITY_DOUBLE_PRECISION
247f17b710fSchristos #define UNITY_DOUBLE_PRECISION (1e-12f)
248f17b710fSchristos #endif
249f17b710fSchristos #ifndef UNITY_DOUBLE_TYPE
250f17b710fSchristos #define UNITY_DOUBLE_TYPE double
251f17b710fSchristos #endif
252f17b710fSchristos typedef UNITY_DOUBLE_TYPE _UD;
253f17b710fSchristos 
254f17b710fSchristos #endif
255f17b710fSchristos 
256f17b710fSchristos #ifdef UNITY_DOUBLE_VERBOSE
257f17b710fSchristos #ifndef UNITY_FLOAT_VERBOSE
258f17b710fSchristos #define UNITY_FLOAT_VERBOSE
259f17b710fSchristos #endif
260f17b710fSchristos #endif
261f17b710fSchristos 
262f17b710fSchristos //-------------------------------------------------------
263f17b710fSchristos // Output Method: stdout (DEFAULT)
264f17b710fSchristos //-------------------------------------------------------
265f17b710fSchristos #ifndef UNITY_OUTPUT_CHAR
266f17b710fSchristos //Default to using putchar, which is defined in stdio.h
267f17b710fSchristos #include <stdio.h>
268f17b710fSchristos #define UNITY_OUTPUT_CHAR(a) putchar(a)
269f17b710fSchristos #else
270f17b710fSchristos //If defined as something else, make sure we declare it here so it's ready for use
271f17b710fSchristos extern int UNITY_OUTPUT_CHAR(int);
272f17b710fSchristos #endif
273f17b710fSchristos 
274f17b710fSchristos #ifndef UNITY_OUTPUT_START
275f17b710fSchristos #define UNITY_OUTPUT_START()
276f17b710fSchristos #endif
277f17b710fSchristos 
278f17b710fSchristos #ifndef UNITY_OUTPUT_COMPLETE
279f17b710fSchristos #define UNITY_OUTPUT_COMPLETE()
280f17b710fSchristos #endif
281f17b710fSchristos 
282f17b710fSchristos //-------------------------------------------------------
283f17b710fSchristos // Footprint
284f17b710fSchristos //-------------------------------------------------------
285f17b710fSchristos 
286f17b710fSchristos #ifndef UNITY_LINE_TYPE
287f17b710fSchristos #define UNITY_LINE_TYPE _U_UINT
288f17b710fSchristos #endif
289f17b710fSchristos 
290f17b710fSchristos #ifndef UNITY_COUNTER_TYPE
291f17b710fSchristos #define UNITY_COUNTER_TYPE _U_UINT
292f17b710fSchristos #endif
293f17b710fSchristos 
294f17b710fSchristos //-------------------------------------------------------
295f17b710fSchristos // Language Features Available
296f17b710fSchristos //-------------------------------------------------------
297f17b710fSchristos #if !defined(UNITY_WEAK_ATTRIBUTE) && !defined(UNITY_WEAK_PRAGMA)
298f17b710fSchristos #   ifdef __GNUC__ // includes clang
299f17b710fSchristos #       if !(defined(__WIN32__) && defined(__clang__))
300f17b710fSchristos #           define UNITY_WEAK_ATTRIBUTE __attribute__((weak))
301f17b710fSchristos #       endif
302f17b710fSchristos #   endif
303f17b710fSchristos #endif
304f17b710fSchristos 
305f17b710fSchristos #ifdef UNITY_NO_WEAK
306f17b710fSchristos #   undef UNITY_WEAK_ATTRIBUTE
307f17b710fSchristos #   undef UNITY_WEAK_PRAGMA
308f17b710fSchristos #endif
309f17b710fSchristos 
3104c290c01Schristos #if !defined(UNITY_NORETURN_ATTRIBUTE)
3114c290c01Schristos #   ifdef __GNUC__ // includes clang
3124c290c01Schristos #       if !(defined(__WIN32__) && defined(__clang__))
313*eabc0478Schristos #           define UNITY_NORETURN_ATTRIBUTE __attribute__((__noreturn__))
3144c290c01Schristos #       endif
3154c290c01Schristos #   endif
3164c290c01Schristos #endif
3174c290c01Schristos 
3184c290c01Schristos #ifndef UNITY_NORETURN_ATTRIBUTE
3194c290c01Schristos #   define UNITY_NORETURN_ATTRIBUTE
3204c290c01Schristos #endif
3214c290c01Schristos 
322f17b710fSchristos 
323f17b710fSchristos //-------------------------------------------------------
324f17b710fSchristos // Internal Structs Needed
325f17b710fSchristos //-------------------------------------------------------
326f17b710fSchristos 
327f17b710fSchristos typedef void (*UnityTestFunction)(void);
328f17b710fSchristos 
329f17b710fSchristos #define UNITY_DISPLAY_RANGE_INT  (0x10)
330f17b710fSchristos #define UNITY_DISPLAY_RANGE_UINT (0x20)
331f17b710fSchristos #define UNITY_DISPLAY_RANGE_HEX  (0x40)
332f17b710fSchristos #define UNITY_DISPLAY_RANGE_AUTO (0x80)
333f17b710fSchristos 
334f17b710fSchristos typedef enum
335f17b710fSchristos {
336f17b710fSchristos #if (UNITY_INT_WIDTH == 16)
337f17b710fSchristos     UNITY_DISPLAY_STYLE_INT      = 2 + UNITY_DISPLAY_RANGE_INT + UNITY_DISPLAY_RANGE_AUTO,
338f17b710fSchristos #elif (UNITY_INT_WIDTH  == 32)
339f17b710fSchristos     UNITY_DISPLAY_STYLE_INT      = 4 + UNITY_DISPLAY_RANGE_INT + UNITY_DISPLAY_RANGE_AUTO,
340f17b710fSchristos #elif (UNITY_INT_WIDTH  == 64)
341f17b710fSchristos     UNITY_DISPLAY_STYLE_INT      = 8 + UNITY_DISPLAY_RANGE_INT + UNITY_DISPLAY_RANGE_AUTO,
342f17b710fSchristos #endif
343f17b710fSchristos     UNITY_DISPLAY_STYLE_INT8     = 1 + UNITY_DISPLAY_RANGE_INT,
344f17b710fSchristos     UNITY_DISPLAY_STYLE_INT16    = 2 + UNITY_DISPLAY_RANGE_INT,
345f17b710fSchristos     UNITY_DISPLAY_STYLE_INT32    = 4 + UNITY_DISPLAY_RANGE_INT,
346f17b710fSchristos #ifdef UNITY_SUPPORT_64
347f17b710fSchristos     UNITY_DISPLAY_STYLE_INT64    = 8 + UNITY_DISPLAY_RANGE_INT,
348f17b710fSchristos #endif
349f17b710fSchristos 
350f17b710fSchristos #if (UNITY_INT_WIDTH == 16)
351f17b710fSchristos     UNITY_DISPLAY_STYLE_UINT     = 2 + UNITY_DISPLAY_RANGE_UINT + UNITY_DISPLAY_RANGE_AUTO,
352f17b710fSchristos #elif (UNITY_INT_WIDTH  == 32)
353f17b710fSchristos     UNITY_DISPLAY_STYLE_UINT     = 4 + UNITY_DISPLAY_RANGE_UINT + UNITY_DISPLAY_RANGE_AUTO,
354f17b710fSchristos #elif (UNITY_INT_WIDTH  == 64)
355f17b710fSchristos     UNITY_DISPLAY_STYLE_UINT     = 8 + UNITY_DISPLAY_RANGE_UINT + UNITY_DISPLAY_RANGE_AUTO,
356f17b710fSchristos #endif
357f17b710fSchristos     UNITY_DISPLAY_STYLE_UINT8    = 1 + UNITY_DISPLAY_RANGE_UINT,
358f17b710fSchristos     UNITY_DISPLAY_STYLE_UINT16   = 2 + UNITY_DISPLAY_RANGE_UINT,
359f17b710fSchristos     UNITY_DISPLAY_STYLE_UINT32   = 4 + UNITY_DISPLAY_RANGE_UINT,
360f17b710fSchristos #ifdef UNITY_SUPPORT_64
361f17b710fSchristos     UNITY_DISPLAY_STYLE_UINT64   = 8 + UNITY_DISPLAY_RANGE_UINT,
362f17b710fSchristos #endif
363f17b710fSchristos     UNITY_DISPLAY_STYLE_HEX8     = 1 + UNITY_DISPLAY_RANGE_HEX,
364f17b710fSchristos     UNITY_DISPLAY_STYLE_HEX16    = 2 + UNITY_DISPLAY_RANGE_HEX,
365f17b710fSchristos     UNITY_DISPLAY_STYLE_HEX32    = 4 + UNITY_DISPLAY_RANGE_HEX,
366f17b710fSchristos #ifdef UNITY_SUPPORT_64
367f17b710fSchristos     UNITY_DISPLAY_STYLE_HEX64    = 8 + UNITY_DISPLAY_RANGE_HEX,
368f17b710fSchristos #endif
369f17b710fSchristos     UNITY_DISPLAY_STYLE_UNKNOWN
370f17b710fSchristos } UNITY_DISPLAY_STYLE_T;
371f17b710fSchristos 
372f17b710fSchristos #ifndef UNITY_EXCLUDE_FLOAT
373f17b710fSchristos typedef enum _UNITY_FLOAT_TRAIT_T
374f17b710fSchristos {
375f17b710fSchristos     UNITY_FLOAT_IS_NOT_INF       = 0,
376f17b710fSchristos     UNITY_FLOAT_IS_INF,
377f17b710fSchristos     UNITY_FLOAT_IS_NOT_NEG_INF,
378f17b710fSchristos     UNITY_FLOAT_IS_NEG_INF,
379f17b710fSchristos     UNITY_FLOAT_IS_NOT_NAN,
380f17b710fSchristos     UNITY_FLOAT_IS_NAN,
381f17b710fSchristos     UNITY_FLOAT_IS_NOT_DET,
382f17b710fSchristos     UNITY_FLOAT_IS_DET,
383f17b710fSchristos } UNITY_FLOAT_TRAIT_T;
384f17b710fSchristos #endif
385f17b710fSchristos 
386f17b710fSchristos struct _Unity
387f17b710fSchristos {
388f17b710fSchristos     const char* TestFile;
389f17b710fSchristos     const char* CurrentTestName;
390f17b710fSchristos     UNITY_LINE_TYPE CurrentTestLineNumber;
391f17b710fSchristos     UNITY_COUNTER_TYPE NumberOfTests;
392f17b710fSchristos     UNITY_COUNTER_TYPE TestFailures;
393f17b710fSchristos     UNITY_COUNTER_TYPE TestIgnores;
394f17b710fSchristos     UNITY_COUNTER_TYPE CurrentTestFailed;
395f17b710fSchristos     UNITY_COUNTER_TYPE CurrentTestIgnored;
396f17b710fSchristos     jmp_buf AbortFrame;
397f17b710fSchristos 	int isExpectingFail;
398f17b710fSchristos 	UNITY_COUNTER_TYPE TestXFAILS;
399f17b710fSchristos 	UNITY_COUNTER_TYPE TestPasses;
400f17b710fSchristos 	UNITY_COUNTER_TYPE TestXPASSES;
401f17b710fSchristos 	const char* XFAILMessage;
402f17b710fSchristos };
403f17b710fSchristos 
404f17b710fSchristos extern struct _Unity Unity;
405f17b710fSchristos 
406f17b710fSchristos //-------------------------------------------------------
407f17b710fSchristos // Test Suite Management
408f17b710fSchristos //-------------------------------------------------------
409f17b710fSchristos 
410f17b710fSchristos void UnityBegin(const char* filename);
411f17b710fSchristos int  UnityEnd(void);
412f17b710fSchristos void UnityConcludeTest(void);
413f17b710fSchristos void UnityDefaultTestRun(UnityTestFunction Func, const char* FuncName, const int FuncLineNum);
414f17b710fSchristos 
415f17b710fSchristos //-------------------------------------------------------
416f17b710fSchristos // Test Output
417f17b710fSchristos //-------------------------------------------------------
418f17b710fSchristos 
419f17b710fSchristos void UnityPrint(const char* string);
420f17b710fSchristos void UnityPrintMask(const _U_UINT mask, const _U_UINT number);
421f17b710fSchristos void UnityPrintNumberByStyle(const _U_SINT number, const UNITY_DISPLAY_STYLE_T style);
422f17b710fSchristos void UnityPrintNumber(const _U_SINT number);
423f17b710fSchristos void UnityPrintNumberUnsigned(const _U_UINT number);
424f17b710fSchristos void UnityPrintNumberHex(const _U_UINT number, const char nibbles);
425f17b710fSchristos 
426f17b710fSchristos #ifdef UNITY_FLOAT_VERBOSE
427f17b710fSchristos void UnityPrintFloat(const _UF number);
428f17b710fSchristos #endif
429f17b710fSchristos 
430f17b710fSchristos //-------------------------------------------------------
431f17b710fSchristos // Test Assertion Fuctions
432f17b710fSchristos //-------------------------------------------------------
433f17b710fSchristos //  Use the macros below this section instead of calling
434f17b710fSchristos //  these directly. The macros have a consistent naming
435f17b710fSchristos //  convention and will pull in file and line information
436f17b710fSchristos //  for you.
437f17b710fSchristos 
438f17b710fSchristos void UnityAssertEqualNumber(const _U_SINT expected,
439f17b710fSchristos                             const _U_SINT actual,
440f17b710fSchristos                             const char* msg,
441f17b710fSchristos                             const UNITY_LINE_TYPE lineNumber,
442f17b710fSchristos                             const UNITY_DISPLAY_STYLE_T style);
443f17b710fSchristos 
444f17b710fSchristos void UnityAssertEqualIntArray(UNITY_PTR_ATTRIBUTE const void* expected,
445f17b710fSchristos                               UNITY_PTR_ATTRIBUTE const void* actual,
446f17b710fSchristos                               const _UU32 num_elements,
447f17b710fSchristos                               const char* msg,
448f17b710fSchristos                               const UNITY_LINE_TYPE lineNumber,
449f17b710fSchristos                               const UNITY_DISPLAY_STYLE_T style);
450f17b710fSchristos 
451f17b710fSchristos void UnityAssertBits(const _U_SINT mask,
452f17b710fSchristos                      const _U_SINT expected,
453f17b710fSchristos                      const _U_SINT actual,
454f17b710fSchristos                      const char* msg,
455f17b710fSchristos                      const UNITY_LINE_TYPE lineNumber);
456f17b710fSchristos 
457f17b710fSchristos void UnityAssertEqualString(const char* expected,
458f17b710fSchristos                             const char* actual,
459f17b710fSchristos                             const char* msg,
460f17b710fSchristos                             const UNITY_LINE_TYPE lineNumber);
461f17b710fSchristos 
462f17b710fSchristos void UnityAssertEqualStringArray( const char** expected,
463f17b710fSchristos                                   const char** actual,
464f17b710fSchristos                                   const _UU32 num_elements,
465f17b710fSchristos                                   const char* msg,
466f17b710fSchristos                                   const UNITY_LINE_TYPE lineNumber);
467f17b710fSchristos 
468f17b710fSchristos void UnityAssertEqualMemory( UNITY_PTR_ATTRIBUTE const void* expected,
469f17b710fSchristos                              UNITY_PTR_ATTRIBUTE const void* actual,
470f17b710fSchristos                              const _UU32 length,
471f17b710fSchristos                              const _UU32 num_elements,
472f17b710fSchristos                              const char* msg,
473f17b710fSchristos                              const UNITY_LINE_TYPE lineNumber);
474f17b710fSchristos 
475f17b710fSchristos void UnityAssertNumbersWithin(const _U_SINT delta,
476f17b710fSchristos                               const _U_SINT expected,
477f17b710fSchristos                               const _U_SINT actual,
478f17b710fSchristos                               const char* msg,
479f17b710fSchristos                               const UNITY_LINE_TYPE lineNumber,
480f17b710fSchristos                               const UNITY_DISPLAY_STYLE_T style);
481f17b710fSchristos 
4824c290c01Schristos void UnityFail(const char* message, const UNITY_LINE_TYPE line) UNITY_NORETURN_ATTRIBUTE;
483f17b710fSchristos 
484f17b710fSchristos void UnityIgnore(const char* message, const UNITY_LINE_TYPE line);
485f17b710fSchristos 
486f17b710fSchristos #ifndef UNITY_EXCLUDE_FLOAT
487f17b710fSchristos void UnityAssertFloatsWithin(const _UF delta,
488f17b710fSchristos                              const _UF expected,
489f17b710fSchristos                              const _UF actual,
490f17b710fSchristos                              const char* msg,
491f17b710fSchristos                              const UNITY_LINE_TYPE lineNumber);
492f17b710fSchristos 
493f17b710fSchristos void UnityAssertEqualFloatArray(UNITY_PTR_ATTRIBUTE const _UF* expected,
494f17b710fSchristos                                 UNITY_PTR_ATTRIBUTE const _UF* actual,
495f17b710fSchristos                                 const _UU32 num_elements,
496f17b710fSchristos                                 const char* msg,
497f17b710fSchristos                                 const UNITY_LINE_TYPE lineNumber);
498f17b710fSchristos 
499f17b710fSchristos void UnityAssertFloatSpecial(const _UF actual,
500f17b710fSchristos                              const char* msg,
501f17b710fSchristos                              const UNITY_LINE_TYPE lineNumber,
502f17b710fSchristos                              const UNITY_FLOAT_TRAIT_T style);
503f17b710fSchristos #endif
504f17b710fSchristos 
505f17b710fSchristos #ifndef UNITY_EXCLUDE_DOUBLE
506f17b710fSchristos void UnityAssertDoublesWithin(const _UD delta,
507f17b710fSchristos                               const _UD expected,
508f17b710fSchristos                               const _UD actual,
509f17b710fSchristos                               const char* msg,
510f17b710fSchristos                               const UNITY_LINE_TYPE lineNumber);
511f17b710fSchristos 
512f17b710fSchristos void UnityAssertEqualDoubleArray(UNITY_PTR_ATTRIBUTE const _UD* expected,
513f17b710fSchristos                                  UNITY_PTR_ATTRIBUTE const _UD* actual,
514f17b710fSchristos                                  const _UU32 num_elements,
515f17b710fSchristos                                  const char* msg,
516f17b710fSchristos                                  const UNITY_LINE_TYPE lineNumber);
517f17b710fSchristos 
518f17b710fSchristos void UnityAssertDoubleSpecial(const _UD actual,
519f17b710fSchristos                               const char* msg,
520f17b710fSchristos                               const UNITY_LINE_TYPE lineNumber,
521f17b710fSchristos                               const UNITY_FLOAT_TRAIT_T style);
522f17b710fSchristos #endif
523f17b710fSchristos 
524*eabc0478Schristos void UnityExpectFailMessage(const char* msg,
525*eabc0478Schristos                             const UNITY_LINE_TYPE line);
526*eabc0478Schristos 
527f17b710fSchristos //-------------------------------------------------------
528f17b710fSchristos // Error Strings We Might Need
529f17b710fSchristos //-------------------------------------------------------
530f17b710fSchristos 
531f17b710fSchristos extern const char UnityStrErrFloat[];
532f17b710fSchristos extern const char UnityStrErrDouble[];
533f17b710fSchristos extern const char UnityStrErr64[];
534f17b710fSchristos 
535f17b710fSchristos //-------------------------------------------------------
536f17b710fSchristos // Test Running Macros
537f17b710fSchristos //-------------------------------------------------------
538f17b710fSchristos 
539f17b710fSchristos #define TEST_PROTECT() (setjmp(Unity.AbortFrame) == 0)
540f17b710fSchristos 
541f17b710fSchristos #define TEST_ABORT() {longjmp(Unity.AbortFrame, 1);}
542f17b710fSchristos 
543f17b710fSchristos //This tricky series of macros gives us an optional line argument to treat it as RUN_TEST(func, num=__LINE__)
544f17b710fSchristos #ifndef RUN_TEST
545f17b710fSchristos #ifdef __STDC_VERSION__
546f17b710fSchristos #if __STDC_VERSION__ >= 199901L
547f17b710fSchristos #define RUN_TEST(...) UnityDefaultTestRun(RUN_TEST_FIRST(__VA_ARGS__), RUN_TEST_SECOND(__VA_ARGS__))
548f17b710fSchristos #define RUN_TEST_FIRST(...) RUN_TEST_FIRST_HELPER(__VA_ARGS__, throwaway)
549f17b710fSchristos #define RUN_TEST_FIRST_HELPER(first,...) first, #first
550f17b710fSchristos #define RUN_TEST_SECOND(...) RUN_TEST_SECOND_HELPER(__VA_ARGS__, __LINE__, throwaway)
551f17b710fSchristos #define RUN_TEST_SECOND_HELPER(first,second,...) second
552f17b710fSchristos #endif
553f17b710fSchristos #endif
554f17b710fSchristos #endif
555f17b710fSchristos 
556f17b710fSchristos //If we can't do the tricky version, we'll just have to require them to always include the line number
557f17b710fSchristos #ifndef RUN_TEST
558f17b710fSchristos #ifdef CMOCK
559f17b710fSchristos #define RUN_TEST(func, num) UnityDefaultTestRun(func, #func, num)
560f17b710fSchristos #else
561f17b710fSchristos #define RUN_TEST(func) UnityDefaultTestRun(func, #func, __LINE__)
562f17b710fSchristos #endif
563f17b710fSchristos #endif
564f17b710fSchristos 
565f17b710fSchristos #define TEST_LINE_NUM (Unity.CurrentTestLineNumber)
566f17b710fSchristos #define TEST_IS_IGNORED (Unity.CurrentTestIgnored)
567f17b710fSchristos #define UNITY_NEW_TEST(a) \
568f17b710fSchristos     Unity.CurrentTestName = a; \
569f17b710fSchristos     Unity.CurrentTestLineNumber = (UNITY_LINE_TYPE)(__LINE__); \
570f17b710fSchristos     Unity.NumberOfTests++;
571f17b710fSchristos 
572f17b710fSchristos #ifndef UNITY_BEGIN
573f17b710fSchristos #define UNITY_BEGIN() UnityBegin(__FILE__)
574f17b710fSchristos #endif
575f17b710fSchristos 
576f17b710fSchristos #ifndef UNITY_END
577f17b710fSchristos #define UNITY_END() UnityEnd()
578f17b710fSchristos #endif
579f17b710fSchristos 
580f17b710fSchristos //-------------------------------------------------------
581f17b710fSchristos // Basic Fail and Ignore
582f17b710fSchristos //-------------------------------------------------------
583f17b710fSchristos 
584f17b710fSchristos #define UNITY_TEST_FAIL(line, message)   UnityFail(   (message), (UNITY_LINE_TYPE)line);
585f17b710fSchristos #define UNITY_TEST_IGNORE(line, message) UnityIgnore( (message), (UNITY_LINE_TYPE)line);
586f17b710fSchristos 
587f17b710fSchristos //-------------------------------------------------------
588f17b710fSchristos // Test Asserts
589f17b710fSchristos //-------------------------------------------------------
590f17b710fSchristos 
591f17b710fSchristos #define UNITY_TEST_ASSERT(condition, line, message)                                              if (condition) {} else {UNITY_TEST_FAIL((UNITY_LINE_TYPE)line, message);}
592f17b710fSchristos #define UNITY_TEST_ASSERT_NULL(pointer, line, message)                                           UNITY_TEST_ASSERT(((pointer) == NULL),  (UNITY_LINE_TYPE)line, message)
593f17b710fSchristos #define UNITY_TEST_ASSERT_NOT_NULL(pointer, line, message)                                       UNITY_TEST_ASSERT(((pointer) != NULL),  (UNITY_LINE_TYPE)line, message)
594f17b710fSchristos 
595f17b710fSchristos #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)
596f17b710fSchristos #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)
597f17b710fSchristos #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)
598f17b710fSchristos #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)
599f17b710fSchristos #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)
600f17b710fSchristos #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)
601f17b710fSchristos #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)
602f17b710fSchristos #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)
603f17b710fSchristos #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)
604f17b710fSchristos #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)
605f17b710fSchristos #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)
606f17b710fSchristos #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)
607f17b710fSchristos 
608f17b710fSchristos #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)
609f17b710fSchristos #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)
610f17b710fSchristos #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)
611f17b710fSchristos #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)
612f17b710fSchristos #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)
613f17b710fSchristos #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)
614f17b710fSchristos #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)
615f17b710fSchristos #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)
616f17b710fSchristos #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)
617f17b710fSchristos #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)
618f17b710fSchristos #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)
619f17b710fSchristos 
620f17b710fSchristos #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)
621f17b710fSchristos #define UNITY_TEST_ASSERT_EQUAL_STRING(expected, actual, line, message)                          UnityAssertEqualString((const char*)(expected), (const char*)(actual), (message), (UNITY_LINE_TYPE)line)
622ae49d4a4Schristos #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)
623f17b710fSchristos 
624f17b710fSchristos #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)
625f17b710fSchristos #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)
626f17b710fSchristos #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)
627f17b710fSchristos #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)
628f17b710fSchristos #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)
629f17b710fSchristos #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)
630f17b710fSchristos #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)
631f17b710fSchristos #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)
632f17b710fSchristos #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)
633f17b710fSchristos #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)
634f17b710fSchristos #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)
635f17b710fSchristos #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)
636f17b710fSchristos #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)
637f17b710fSchristos #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)
638f17b710fSchristos 
639f17b710fSchristos #ifdef UNITY_SUPPORT_64
640f17b710fSchristos #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)
641f17b710fSchristos #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)
642f17b710fSchristos #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)
643f17b710fSchristos #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)
644f17b710fSchristos #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)
645f17b710fSchristos #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)
646f17b710fSchristos #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)
647f17b710fSchristos #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)
648f17b710fSchristos #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)
649f17b710fSchristos #else
650f17b710fSchristos #define UNITY_TEST_ASSERT_EQUAL_INT64(expected, actual, line, message)                           UNITY_TEST_FAIL((UNITY_LINE_TYPE)line, UnityStrErr64)
651f17b710fSchristos #define UNITY_TEST_ASSERT_EQUAL_UINT64(expected, actual, line, message)                          UNITY_TEST_FAIL((UNITY_LINE_TYPE)line, UnityStrErr64)
652f17b710fSchristos #define UNITY_TEST_ASSERT_EQUAL_HEX64(expected, actual, line, message)                           UNITY_TEST_FAIL((UNITY_LINE_TYPE)line, UnityStrErr64)
653f17b710fSchristos #define UNITY_TEST_ASSERT_EQUAL_INT64_ARRAY(expected, actual, num_elements, line, message)       UNITY_TEST_FAIL((UNITY_LINE_TYPE)line, UnityStrErr64)
654f17b710fSchristos #define UNITY_TEST_ASSERT_EQUAL_UINT64_ARRAY(expected, actual, num_elements, line, message)      UNITY_TEST_FAIL((UNITY_LINE_TYPE)line, UnityStrErr64)
655f17b710fSchristos #define UNITY_TEST_ASSERT_EQUAL_HEX64_ARRAY(expected, actual, num_elements, line, message)       UNITY_TEST_FAIL((UNITY_LINE_TYPE)line, UnityStrErr64)
656f17b710fSchristos #define UNITY_TEST_ASSERT_INT64_WITHIN(delta, expected, actual, line, message)                   UNITY_TEST_FAIL((UNITY_LINE_TYPE)line, UnityStrErr64)
657f17b710fSchristos #define UNITY_TEST_ASSERT_UINT64_WITHIN(delta, expected, actual, line, message)                  UNITY_TEST_FAIL((UNITY_LINE_TYPE)line, UnityStrErr64)
658f17b710fSchristos #define UNITY_TEST_ASSERT_HEX64_WITHIN(delta, expected, actual, line, message)                   UNITY_TEST_FAIL((UNITY_LINE_TYPE)line, UnityStrErr64)
659f17b710fSchristos #endif
660f17b710fSchristos 
661f17b710fSchristos #ifdef UNITY_EXCLUDE_FLOAT
662f17b710fSchristos #define UNITY_TEST_ASSERT_FLOAT_WITHIN(delta, expected, actual, line, message)                   UNITY_TEST_FAIL((UNITY_LINE_TYPE)line, UnityStrErrFloat)
663f17b710fSchristos #define UNITY_TEST_ASSERT_EQUAL_FLOAT(expected, actual, line, message)                           UNITY_TEST_FAIL((UNITY_LINE_TYPE)line, UnityStrErrFloat)
664f17b710fSchristos #define UNITY_TEST_ASSERT_EQUAL_FLOAT_ARRAY(expected, actual, num_elements, line, message)       UNITY_TEST_FAIL((UNITY_LINE_TYPE)line, UnityStrErrFloat)
665f17b710fSchristos #define UNITY_TEST_ASSERT_FLOAT_IS_INF(actual, line, message)                                    UNITY_TEST_FAIL((UNITY_LINE_TYPE)line, UnityStrErrFloat)
666f17b710fSchristos #define UNITY_TEST_ASSERT_FLOAT_IS_NEG_INF(actual, line, message)                                UNITY_TEST_FAIL((UNITY_LINE_TYPE)line, UnityStrErrFloat)
667f17b710fSchristos #define UNITY_TEST_ASSERT_FLOAT_IS_NAN(actual, line, message)                                    UNITY_TEST_FAIL((UNITY_LINE_TYPE)line, UnityStrErrFloat)
668f17b710fSchristos #define UNITY_TEST_ASSERT_FLOAT_IS_DETERMINATE(actual, line, message)                            UNITY_TEST_FAIL((UNITY_LINE_TYPE)line, UnityStrErrFloat)
669f17b710fSchristos #define UNITY_TEST_ASSERT_FLOAT_IS_NOT_INF(actual, line, message)                                UNITY_TEST_FAIL((UNITY_LINE_TYPE)line, UnityStrErrFloat)
670f17b710fSchristos #define UNITY_TEST_ASSERT_FLOAT_IS_NOT_NEG_INF(actual, line, message)                            UNITY_TEST_FAIL((UNITY_LINE_TYPE)line, UnityStrErrFloat)
671f17b710fSchristos #define UNITY_TEST_ASSERT_FLOAT_IS_NOT_NAN(actual, line, message)                                UNITY_TEST_FAIL((UNITY_LINE_TYPE)line, UnityStrErrFloat)
672f17b710fSchristos #define UNITY_TEST_ASSERT_FLOAT_IS_NOT_DETERMINATE(actual, line, message)                        UNITY_TEST_FAIL((UNITY_LINE_TYPE)line, UnityStrErrFloat)
673f17b710fSchristos #else
674f17b710fSchristos #define UNITY_TEST_ASSERT_FLOAT_WITHIN(delta, expected, actual, line, message)                   UnityAssertFloatsWithin((_UF)(delta), (_UF)(expected), (_UF)(actual), (message), (UNITY_LINE_TYPE)line)
675f17b710fSchristos #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)
676f17b710fSchristos #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)
677f17b710fSchristos #define UNITY_TEST_ASSERT_FLOAT_IS_INF(actual, line, message)                                    UnityAssertFloatSpecial((_UF)(actual), (message), (UNITY_LINE_TYPE)line, UNITY_FLOAT_IS_INF)
678f17b710fSchristos #define UNITY_TEST_ASSERT_FLOAT_IS_NEG_INF(actual, line, message)                                UnityAssertFloatSpecial((_UF)(actual), (message), (UNITY_LINE_TYPE)line, UNITY_FLOAT_IS_NEG_INF)
679f17b710fSchristos #define UNITY_TEST_ASSERT_FLOAT_IS_NAN(actual, line, message)                                    UnityAssertFloatSpecial((_UF)(actual), (message), (UNITY_LINE_TYPE)line, UNITY_FLOAT_IS_NAN)
680f17b710fSchristos #define UNITY_TEST_ASSERT_FLOAT_IS_DETERMINATE(actual, line, message)                            UnityAssertFloatSpecial((_UF)(actual), (message), (UNITY_LINE_TYPE)line, UNITY_FLOAT_IS_DET)
681f17b710fSchristos #define UNITY_TEST_ASSERT_FLOAT_IS_NOT_INF(actual, line, message)                                UnityAssertFloatSpecial((_UF)(actual), (message), (UNITY_LINE_TYPE)line, UNITY_FLOAT_IS_NOT_INF)
682f17b710fSchristos #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)
683f17b710fSchristos #define UNITY_TEST_ASSERT_FLOAT_IS_NOT_NAN(actual, line, message)                                UnityAssertFloatSpecial((_UF)(actual), (message), (UNITY_LINE_TYPE)line, UNITY_FLOAT_IS_NOT_NAN)
684f17b710fSchristos #define UNITY_TEST_ASSERT_FLOAT_IS_NOT_DETERMINATE(actual, line, message)                        UnityAssertFloatSpecial((_UF)(actual), (message), (UNITY_LINE_TYPE)line, UNITY_FLOAT_IS_NOT_DET)
685f17b710fSchristos #endif
686f17b710fSchristos 
687f17b710fSchristos #ifdef UNITY_EXCLUDE_DOUBLE
688f17b710fSchristos #define UNITY_TEST_ASSERT_DOUBLE_WITHIN(delta, expected, actual, line, message)                  UNITY_TEST_FAIL((UNITY_LINE_TYPE)line, UnityStrErrDouble)
689f17b710fSchristos #define UNITY_TEST_ASSERT_EQUAL_DOUBLE(expected, actual, line, message)                          UNITY_TEST_FAIL((UNITY_LINE_TYPE)line, UnityStrErrDouble)
690f17b710fSchristos #define UNITY_TEST_ASSERT_EQUAL_DOUBLE_ARRAY(expected, actual, num_elements, line, message)      UNITY_TEST_FAIL((UNITY_LINE_TYPE)line, UnityStrErrDouble)
691f17b710fSchristos #define UNITY_TEST_ASSERT_DOUBLE_IS_INF(actual, line, message)                                   UNITY_TEST_FAIL((UNITY_LINE_TYPE)line, UnityStrErrDouble)
692f17b710fSchristos #define UNITY_TEST_ASSERT_DOUBLE_IS_NEG_INF(actual, line, message)                               UNITY_TEST_FAIL((UNITY_LINE_TYPE)line, UnityStrErrDouble)
693f17b710fSchristos #define UNITY_TEST_ASSERT_DOUBLE_IS_NAN(actual, line, message)                                   UNITY_TEST_FAIL((UNITY_LINE_TYPE)line, UnityStrErrDouble)
694f17b710fSchristos #define UNITY_TEST_ASSERT_DOUBLE_IS_DETERMINATE(actual, line, message)                           UNITY_TEST_FAIL((UNITY_LINE_TYPE)line, UnityStrErrDouble)
695f17b710fSchristos #define UNITY_TEST_ASSERT_DOUBLE_IS_NOT_INF(actual, line, message)                               UNITY_TEST_FAIL((UNITY_LINE_TYPE)line, UnityStrErrDouble)
696f17b710fSchristos #define UNITY_TEST_ASSERT_DOUBLE_IS_NOT_NEG_INF(actual, line, message)                           UNITY_TEST_FAIL((UNITY_LINE_TYPE)line, UnityStrErrDouble)
697f17b710fSchristos #define UNITY_TEST_ASSERT_DOUBLE_IS_NOT_NAN(actual, line, message)                               UNITY_TEST_FAIL((UNITY_LINE_TYPE)line, UnityStrErrDouble)
698f17b710fSchristos #define UNITY_TEST_ASSERT_DOUBLE_IS_NOT_DETERMINATE(actual, line, message)                       UNITY_TEST_FAIL((UNITY_LINE_TYPE)line, UnityStrErrDouble)
699f17b710fSchristos #else
700f17b710fSchristos #define UNITY_TEST_ASSERT_DOUBLE_WITHIN(delta, expected, actual, line, message)                  UnityAssertDoublesWithin((_UD)(delta), (_UD)(expected), (_UD)(actual), (message), (UNITY_LINE_TYPE)line)
701f17b710fSchristos #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)
702f17b710fSchristos #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)
703f17b710fSchristos #define UNITY_TEST_ASSERT_DOUBLE_IS_INF(actual, line, message)                                   UnityAssertDoubleSpecial((_UD)(actual), (message), (UNITY_LINE_TYPE)line, UNITY_FLOAT_IS_INF)
704f17b710fSchristos #define UNITY_TEST_ASSERT_DOUBLE_IS_NEG_INF(actual, line, message)                               UnityAssertDoubleSpecial((_UD)(actual), (message), (UNITY_LINE_TYPE)line, UNITY_FLOAT_IS_NEG_INF)
705f17b710fSchristos #define UNITY_TEST_ASSERT_DOUBLE_IS_NAN(actual, line, message)                                   UnityAssertDoubleSpecial((_UD)(actual), (message), (UNITY_LINE_TYPE)line, UNITY_FLOAT_IS_NAN)
706f17b710fSchristos #define UNITY_TEST_ASSERT_DOUBLE_IS_DETERMINATE(actual, line, message)                           UnityAssertDoubleSpecial((_UD)(actual), (message), (UNITY_LINE_TYPE)line, UNITY_FLOAT_IS_DET)
707f17b710fSchristos #define UNITY_TEST_ASSERT_DOUBLE_IS_NOT_INF(actual, line, message)                               UnityAssertDoubleSpecial((_UD)(actual), (message), (UNITY_LINE_TYPE)line, UNITY_FLOAT_IS_NOT_INF)
708f17b710fSchristos #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)
709f17b710fSchristos #define UNITY_TEST_ASSERT_DOUBLE_IS_NOT_NAN(actual, line, message)                               UnityAssertDoubleSpecial((_UD)(actual), (message), (UNITY_LINE_TYPE)line, UNITY_FLOAT_IS_NOT_NAN)
710f17b710fSchristos #define UNITY_TEST_ASSERT_DOUBLE_IS_NOT_DETERMINATE(actual, line, message)                       UnityAssertDoubleSpecial((_UD)(actual), (message), (UNITY_LINE_TYPE)line, UNITY_FLOAT_IS_NOT_DET)
711f17b710fSchristos #endif
712f17b710fSchristos 
713f17b710fSchristos //End of UNITY_INTERNALS_H
714f17b710fSchristos #endif
715f17b710fSchristos 
716*eabc0478Schristos // Not part of standard distribution
717f17b710fSchristos 
718f17b710fSchristos #define TEST_EXPECT_FAIL()									UnityExpectFail();
719*eabc0478Schristos #define TEST_EXPECT_FAIL_MESSAGE(message)							UnityExpectFailMessage((message), __LINE__);
720