RTEMS 7.0-rc1
Loading...
Searching...
No Matches
test.h
Go to the documentation of this file.
1/* SPDX-License-Identifier: BSD-2-Clause */
2
12/*
13 * Copyright (C) 2017, 2021 embedded brains GmbH & Co. KG
14 *
15 * Redistribution and use in source and binary forms, with or without
16 * modification, are permitted provided that the following conditions
17 * are met:
18 * 1. Redistributions of source code must retain the above copyright
19 * notice, this list of conditions and the following disclaimer.
20 * 2. Redistributions in binary form must reproduce the above copyright
21 * notice, this list of conditions and the following disclaimer in the
22 * documentation and/or other materials provided with the distribution.
23 *
24 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
25 * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
26 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
27 * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
28 * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
29 * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
30 * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
31 * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
32 * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
33 * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
34 * POSSIBILITY OF SUCH DAMAGE.
35 */
36
37#ifndef THE_T_TEST_FRAMEWORK_H
38#define THE_T_TEST_FRAMEWORK_H
39
40#include <stdarg.h>
41#include <stdbool.h>
42#include <stddef.h>
43#include <stdint.h>
44#include <string.h>
45
46#ifdef __rtems__
47#include <rtems/score/cpu.h>
48#include <rtems/rtems/status.h>
49#endif
50
51#ifdef __cplusplus
52extern "C" {
53#endif /* __cplusplus */
54
65typedef enum {
66 T_QUIET,
67 T_NORMAL,
68 T_VERBOSE
69} T_verbosity;
70
71typedef struct T_fixture {
72 void (*setup)(void *);
73 void (*stop)(void *);
74 void (*teardown)(void *);
75 size_t (*scope)(void *, char *, size_t);
76 void *initial_context;
77} T_fixture;
78
79typedef struct T_fixture_node {
80 struct T_fixture_node *next;
81 struct T_fixture_node *previous;
82 const T_fixture *fixture;
83 void *context;
84 unsigned int next_planned_steps;
85 unsigned int next_steps;
86 unsigned int failures;
88
89typedef struct T_remark {
90 struct T_remark *next;
91 const char *remark;
92} T_remark;
93
94#define T_ARRAY_SIZE(array) (sizeof(array) / sizeof((array)[0]))
95
96/*
97 * The __FILE__ includes the full file path from the command line. Enable the
98 * build system to give a sorter file name via a command line define.
99 */
100#ifndef T_FILE_NAME
101#define T_FILE_NAME __FILE__
102#endif
103
104#if defined(__GNUC__) || __STDC_VERSION__ >= 199409L
105#define T_ZERO_LENGTH_ARRAY
106#else
107#define T_ZERO_LENGTH_ARRAY 1
108#endif
109
122#ifdef __cplusplus
123#define T_NO_RETURN [[ noreturn ]]
124#else
125#define T_NO_RETURN _Noreturn
126#endif
127
128typedef struct T_case_context {
129 const char *name;
130 void (*body)(void);
131 const T_fixture *fixture;
132 const struct T_case_context *next;
134
135void T_case_register(T_case_context *);
136
137#define T_CHECK_STOP 1U
138
139#define T_CHECK_QUIET 2U
140
141/* If you change this value, you have to adjust T_VA_ARGS_KIND() as well */
142#define T_CHECK_FMT 4U
143
144#define T_CHECK_STEP_FLAG 8U
145
146#define T_CHECK_STEP_TO_FLAGS(step) ((unsigned int)(step) << 8)
147
148#define T_CHECK_STEP_FROM_FLAGS(flags) ((flags) >> 8)
149
150#define T_CHECK_STEP(step) (T_CHECK_STEP_TO_FLAGS(step) | T_CHECK_STEP_FLAG)
151
152typedef struct {
153 const char *file;
154 int line;
155 unsigned int flags;
157
158typedef struct {
159 T_check_context base;
160 const char *msg;
162
163#define T_VA_ARGS_FIRST(...) T_VA_ARGS_FIRST_SELECT(__VA_ARGS__, throw_away)
164#define T_VA_ARGS_FIRST_SELECT(first, ...) first
165
166/*
167 * The T_VA_ARGS_MORE() supports up to nine arguments. It expands to nothing
168 * if only one argument is given. It expands to a comma and the second and
169 * following arguments if at least two arguments are present. The 4U shall
170 * correspond to T_CHECK_FMT.
171 */
172#define T_VA_ARGS_MORE(...) \
173 T_VA_ARGS_XEXPAND(T_VA_ARGS_KIND(__VA_ARGS__), __VA_ARGS__)
174#define T_VA_ARGS_XEXPAND(kind, ...) T_VA_ARGS_EXPAND(kind, __VA_ARGS__)
175#define T_VA_ARGS_EXPAND(kind, ...) T_VA_ARGS_EXPAND_##kind(__VA_ARGS__)
176#define T_VA_ARGS_EXPAND_0U(first)
177#define T_VA_ARGS_EXPAND_4U(first, ...) , __VA_ARGS__
178#define T_VA_ARGS_KIND(...) \
179 T_VA_ARGS_SELECT(__VA_ARGS__, \
180 4U, 4U, 4U, 4U, 4U, 4U, 4U, 4U, 0U, throw_away)
181#define T_VA_ARGS_SELECT(a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, ...) a10
182
183void T_check(const T_check_context *, bool, ...);
184
185extern const T_check_context T_special;
186
187#define T_flags_true(flags, ...) \
188{ \
189 static const T_check_context T_check_instance = { \
190 T_FILE_NAME, __LINE__, \
191 (flags) | T_VA_ARGS_KIND(__VA_ARGS__) }; \
192 T_check(&T_check_instance, \
193 T_VA_ARGS_FIRST(__VA_ARGS__) T_VA_ARGS_MORE(__VA_ARGS__)); \
194}
195
196#define T_flags_eq(flags, a, ...) \
197 T_flags_true(flags, \
198 (a) == (T_VA_ARGS_FIRST(__VA_ARGS__)) T_VA_ARGS_MORE(__VA_ARGS__))
199
200#define T_flags_ne(flags, a, ...) \
201 T_flags_true(flags, \
202 (a) != (T_VA_ARGS_FIRST(__VA_ARGS__)) T_VA_ARGS_MORE(__VA_ARGS__))
203
204void T_check_eq_ptr(const T_check_context_msg *, uintptr_t, uintptr_t);
205
206#define T_flags_eq_ptr(a, e, flags, sa, se) \
207{ \
208 static const T_check_context_msg T_check_instance = { \
209 { T_FILE_NAME, __LINE__, (flags) | T_CHECK_FMT }, \
210 sa " == " se }; \
211 T_check_eq_ptr(&T_check_instance, (uintptr_t)a, (uintptr_t)e); \
212}
213
214void T_check_ne_ptr(const T_check_context_msg *, uintptr_t, uintptr_t);
215
216#define T_flags_ne_ptr(a, e, flags, sa, se) \
217{ \
218 static const T_check_context_msg T_check_instance = { \
219 { T_FILE_NAME, __LINE__, (flags) | T_CHECK_FMT }, \
220 sa " != " se }; \
221 T_check_ne_ptr(&T_check_instance, (uintptr_t)a, (uintptr_t)e); \
222}
223
224void T_check_null(const T_check_context_msg *, uintptr_t);
225
226#define T_flags_null(a, flags, sa) \
227{ \
228 static const T_check_context_msg T_check_instance = { \
229 { T_FILE_NAME, __LINE__, (flags) | T_CHECK_FMT }, sa }; \
230 T_check_null(&T_check_instance, (uintptr_t)a); \
231}
232
233void T_check_not_null(const T_check_context_msg *, uintptr_t);
234
235#define T_flags_not_null(a, flags, sa) \
236{ \
237 static const T_check_context_msg T_check_instance = { \
238 { T_FILE_NAME, __LINE__, (flags) | T_CHECK_FMT }, sa }; \
239 T_check_not_null(&T_check_instance, (uintptr_t)a); \
240}
241
242void T_check_eq_mem(const T_check_context_msg *, const void *, const void *,
243 size_t);
244
245#define T_flags_eq_mem(a, e, n, flags, sa, se, sn) \
246{ \
247 static const T_check_context_msg T_check_instance = { \
248 { T_FILE_NAME, __LINE__, (flags) | T_CHECK_FMT }, \
249 "memcmp(" sa ", " se ", " sn ") == 0" }; \
250 T_check_eq_mem(&T_check_instance, a, e, n); \
251}
252
253void T_check_ne_mem(const T_check_context_msg *, const void *, const void *,
254 size_t);
255
256#define T_flags_ne_mem(a, e, n, flags, sa, se, sn) \
257{ \
258 static const T_check_context_msg T_check_instance = { \
259 { T_FILE_NAME, __LINE__, (flags) | T_CHECK_FMT }, \
260 "memcmp(" sa ", " se ", " sn ") != 0" }; \
261 T_check_ne_mem(&T_check_instance, a, e, n); \
262}
263
264void T_check_eq_str(const T_check_context *, const char *, const char *);
265
266#define T_flags_eq_str(a, e, flags) \
267{ \
268 static const T_check_context T_check_instance = { \
269 T_FILE_NAME, __LINE__, (flags) | T_CHECK_FMT }; \
270 T_check_eq_str(&T_check_instance, a, e); \
271}
272
273void T_check_ne_str(const T_check_context *, const char *, const char *);
274
275#define T_flags_ne_str(a, e, flags) \
276{ \
277 static const T_check_context T_check_instance = { \
278 T_FILE_NAME, __LINE__, (flags) | T_CHECK_FMT }; \
279 T_check_ne_str(&T_check_instance, a, e); \
280}
281
282void T_check_eq_nstr(const T_check_context *, const char *, const char *,
283 size_t);
284
285#define T_flags_eq_nstr(a, e, n, flags) \
286{ \
287 static const T_check_context T_check_instance = { \
288 T_FILE_NAME, __LINE__, (flags) | T_CHECK_FMT }; \
289 T_check_eq_nstr(&T_check_instance, a, e, n); \
290}
291
292void T_check_ne_nstr(const T_check_context *, const char *, const char *,
293 size_t);
294
295#define T_flags_ne_nstr(a, e, n, flags) \
296{ \
297 static const T_check_context T_check_instance = { \
298 T_FILE_NAME, __LINE__, (flags) | T_CHECK_FMT }; \
299 T_check_ne_nstr(&T_check_instance, a, e, n); \
300}
301
302void T_check_eq_char(const T_check_context *, char, char);
303
304#define T_flags_eq_char(a, e, flags) \
305{ \
306 static const T_check_context T_check_instance = { \
307 T_FILE_NAME, __LINE__, (flags) | T_CHECK_FMT }; \
308 T_check_eq_char(&T_check_instance, a, e); \
309}
310
311void T_check_ne_char(const T_check_context *, char, char);
312
313#define T_flags_ne_char(a, e, flags) \
314{ \
315 static const T_check_context T_check_instance = { \
316 T_FILE_NAME, __LINE__, (flags) | T_CHECK_FMT }; \
317 T_check_ne_char(&T_check_instance, a, e); \
318}
319
320void T_check_eq_int(const T_check_context *, int, int);
321
322#define T_flags_eq_int(a, e, flags) \
323{ \
324 static const T_check_context T_check_instance = { \
325 T_FILE_NAME, __LINE__, (flags) | T_CHECK_FMT }; \
326 T_check_eq_int(&T_check_instance, a, e); \
327}
328
329void T_check_ne_int(const T_check_context *, int, int);
330
331#define T_flags_ne_int(a, e, flags) \
332{ \
333 static const T_check_context T_check_instance = { \
334 T_FILE_NAME, __LINE__, (flags) | T_CHECK_FMT }; \
335 T_check_ne_int(&T_check_instance, a, e); \
336}
337
338void T_check_ge_int(const T_check_context *, int, int);
339
340#define T_flags_ge_int(a, e, flags) \
341{ \
342 static const T_check_context T_check_instance = { \
343 T_FILE_NAME, __LINE__, (flags) | T_CHECK_FMT }; \
344 T_check_ge_int(&T_check_instance, a, e); \
345}
346
347void T_check_gt_int(const T_check_context *, int, int);
348
349#define T_flags_gt_int(a, e, flags) \
350{ \
351 static const T_check_context T_check_instance = { \
352 T_FILE_NAME, __LINE__, (flags) | T_CHECK_FMT }; \
353 T_check_gt_int(&T_check_instance, a, e); \
354}
355
356void T_check_le_int(const T_check_context *, int, int);
357
358#define T_flags_le_int(a, e, flags) \
359{ \
360 static const T_check_context T_check_instance = { \
361 T_FILE_NAME, __LINE__, (flags) | T_CHECK_FMT }; \
362 T_check_le_int(&T_check_instance, a, e); \
363}
364
365void T_check_lt_int(const T_check_context *, int, int);
366
367#define T_flags_lt_int(a, e, flags) \
368{ \
369 static const T_check_context T_check_instance = { \
370 T_FILE_NAME, __LINE__, (flags) | T_CHECK_FMT }; \
371 T_check_lt_int(&T_check_instance, a, e); \
372}
373
374void T_check_eq_uint(const T_check_context *, unsigned int, unsigned int);
375
376#define T_flags_eq_uint(a, e, flags) \
377{ \
378 static const T_check_context T_check_instance = { \
379 T_FILE_NAME, __LINE__, (flags) | T_CHECK_FMT }; \
380 T_check_eq_uint(&T_check_instance, a, e); \
381}
382
383void T_check_ne_uint(const T_check_context *, unsigned int, unsigned int);
384
385#define T_flags_ne_uint(a, e, flags) \
386{ \
387 static const T_check_context T_check_instance = { \
388 T_FILE_NAME, __LINE__, (flags) | T_CHECK_FMT }; \
389 T_check_ne_uint(&T_check_instance, a, e); \
390}
391
392void T_check_ge_uint(const T_check_context *, unsigned int, unsigned int);
393
394#define T_flags_ge_uint(a, e, flags) \
395{ \
396 static const T_check_context T_check_instance = { \
397 T_FILE_NAME, __LINE__, (flags) | T_CHECK_FMT }; \
398 T_check_ge_uint(&T_check_instance, a, e); \
399}
400
401void T_check_gt_uint(const T_check_context *, unsigned int, unsigned int);
402
403#define T_flags_gt_uint(a, e, flags) \
404{ \
405 static const T_check_context T_check_instance = { \
406 T_FILE_NAME, __LINE__, (flags) | T_CHECK_FMT }; \
407 T_check_gt_uint(&T_check_instance, a, e); \
408}
409
410void T_check_le_uint(const T_check_context *, unsigned int, unsigned int);
411
412#define T_flags_le_uint(a, e, flags) \
413{ \
414 static const T_check_context T_check_instance = { \
415 T_FILE_NAME, __LINE__, (flags) | T_CHECK_FMT }; \
416 T_check_le_uint(&T_check_instance, a, e); \
417}
418
419void T_check_lt_uint(const T_check_context *, unsigned int, unsigned int);
420
421#define T_flags_lt_uint(a, e, flags) \
422{ \
423 static const T_check_context T_check_instance = { \
424 T_FILE_NAME, __LINE__, (flags) | T_CHECK_FMT }; \
425 T_check_lt_uint(&T_check_instance, a, e); \
426}
427
428void T_check_eq_long(const T_check_context *, long, long);
429
430#define T_flags_eq_long(a, e, flags) \
431{ \
432 static const T_check_context T_check_instance = { \
433 T_FILE_NAME, __LINE__, (flags) | T_CHECK_FMT }; \
434 T_check_eq_long(&T_check_instance, a, e); \
435}
436
437void T_check_ne_long(const T_check_context *, long, long);
438
439#define T_flags_ne_long(a, e, flags) \
440{ \
441 static const T_check_context T_check_instance = { \
442 T_FILE_NAME, __LINE__, (flags) | T_CHECK_FMT }; \
443 T_check_ne_long(&T_check_instance, a, e); \
444}
445
446void T_check_ge_long(const T_check_context *, long, long);
447
448#define T_flags_ge_long(a, e, flags) \
449{ \
450 static const T_check_context T_check_instance = { \
451 T_FILE_NAME, __LINE__, (flags) | T_CHECK_FMT }; \
452 T_check_ge_long(&T_check_instance, a, e); \
453}
454
455void T_check_gt_long(const T_check_context *, long, long);
456
457#define T_flags_gt_long(a, e, flags) \
458{ \
459 static const T_check_context T_check_instance = { \
460 T_FILE_NAME, __LINE__, (flags) | T_CHECK_FMT }; \
461 T_check_gt_long(&T_check_instance, a, e); \
462}
463
464void T_check_le_long(const T_check_context *, long, long);
465
466#define T_flags_le_long(a, e, flags) \
467{ \
468 static const T_check_context T_check_instance = { \
469 T_FILE_NAME, __LINE__, (flags) | T_CHECK_FMT }; \
470 T_check_le_long(&T_check_instance, a, e); \
471}
472
473void T_check_lt_long(const T_check_context *, long, long);
474
475#define T_flags_lt_long(a, e, flags) \
476{ \
477 static const T_check_context T_check_instance = { \
478 T_FILE_NAME, __LINE__, (flags) | T_CHECK_FMT }; \
479 T_check_lt_long(&T_check_instance, a, e); \
480}
481
482void T_check_eq_ulong(const T_check_context *, unsigned long, unsigned long);
483
484#define T_flags_eq_ulong(a, e, flags) \
485{ \
486 static const T_check_context T_check_instance = { \
487 T_FILE_NAME, __LINE__, (flags) | T_CHECK_FMT }; \
488 T_check_eq_ulong(&T_check_instance, a, e); \
489}
490
491void T_check_ne_ulong(const T_check_context *, unsigned long, unsigned long);
492
493#define T_flags_ne_ulong(a, e, flags) \
494{ \
495 static const T_check_context T_check_instance = { \
496 T_FILE_NAME, __LINE__, (flags) | T_CHECK_FMT }; \
497 T_check_ne_ulong(&T_check_instance, a, e); \
498}
499
500void T_check_ge_ulong(const T_check_context *, unsigned long, unsigned long);
501
502#define T_flags_ge_ulong(a, e, flags) \
503{ \
504 static const T_check_context T_check_instance = { \
505 T_FILE_NAME, __LINE__, (flags) | T_CHECK_FMT }; \
506 T_check_ge_ulong(&T_check_instance, a, e); \
507}
508
509void T_check_gt_ulong(const T_check_context *, unsigned long, unsigned long);
510
511#define T_flags_gt_ulong(a, e, flags) \
512{ \
513 static const T_check_context T_check_instance = { \
514 T_FILE_NAME, __LINE__, (flags) | T_CHECK_FMT }; \
515 T_check_gt_ulong(&T_check_instance, a, e); \
516}
517
518void T_check_le_ulong(const T_check_context *, unsigned long, unsigned long);
519
520#define T_flags_le_ulong(a, e, flags) \
521{ \
522 static const T_check_context T_check_instance = { \
523 T_FILE_NAME, __LINE__, (flags) | T_CHECK_FMT }; \
524 T_check_le_ulong(&T_check_instance, a, e); \
525}
526
527void T_check_lt_ulong(const T_check_context *, unsigned long, unsigned long);
528
529#define T_flags_lt_ulong(a, e, flags) \
530{ \
531 static const T_check_context T_check_instance = { \
532 T_FILE_NAME, __LINE__, (flags) | T_CHECK_FMT }; \
533 T_check_lt_ulong(&T_check_instance, a, e); \
534}
535
536void T_check_eq_ll(const T_check_context *, long long, long long);
537
538#define T_flags_eq_ll(a, e, flags) \
539{ \
540 static const T_check_context T_check_instance = { \
541 T_FILE_NAME, __LINE__, (flags) | T_CHECK_FMT }; \
542 T_check_eq_ll(&T_check_instance, a, e); \
543}
544
545void T_check_ne_ll(const T_check_context *, long long, long long);
546
547#define T_flags_ne_ll(a, e, flags) \
548{ \
549 static const T_check_context T_check_instance = { \
550 T_FILE_NAME, __LINE__, (flags) | T_CHECK_FMT }; \
551 T_check_ne_ll(&T_check_instance, a, e); \
552}
553
554void T_check_ge_ll(const T_check_context *, long long, long long);
555
556#define T_flags_ge_ll(a, e, flags) \
557{ \
558 static const T_check_context T_check_instance = { \
559 T_FILE_NAME, __LINE__, (flags) | T_CHECK_FMT }; \
560 T_check_ge_ll(&T_check_instance, a, e); \
561}
562
563void T_check_gt_ll(const T_check_context *, long long, long long);
564
565#define T_flags_gt_ll(a, e, flags) \
566{ \
567 static const T_check_context T_check_instance = { \
568 T_FILE_NAME, __LINE__, (flags) | T_CHECK_FMT }; \
569 T_check_gt_ll(&T_check_instance, a, e); \
570}
571
572void T_check_le_ll(const T_check_context *, long long, long long);
573
574#define T_flags_le_ll(a, e, flags) \
575{ \
576 static const T_check_context T_check_instance = { \
577 T_FILE_NAME, __LINE__, (flags) | T_CHECK_FMT }; \
578 T_check_le_ll(&T_check_instance, a, e); \
579}
580
581void T_check_lt_ll(const T_check_context *, long long, long long);
582
583#define T_flags_lt_ll(a, e, flags) \
584{ \
585 static const T_check_context T_check_instance = { \
586 T_FILE_NAME, __LINE__, (flags) | T_CHECK_FMT }; \
587 T_check_lt_ll(&T_check_instance, a, e); \
588}
589
590void T_check_eq_ull(const T_check_context *, unsigned long long,
591 unsigned long long);
592
593#define T_flags_eq_ull(a, e, flags) \
594{ \
595 static const T_check_context T_check_instance = { \
596 T_FILE_NAME, __LINE__, (flags) | T_CHECK_FMT }; \
597 T_check_eq_ull(&T_check_instance, a, e); \
598}
599
600void T_check_ne_ull(const T_check_context *, unsigned long long,
601 unsigned long long);
602
603#define T_flags_ne_ull(a, e, flags) \
604{ \
605 static const T_check_context T_check_instance = { \
606 T_FILE_NAME, __LINE__, (flags) | T_CHECK_FMT }; \
607 T_check_ne_ull(&T_check_instance, a, e); \
608}
609
610void T_check_ge_ull(const T_check_context *, unsigned long long,
611 unsigned long long);
612
613#define T_flags_ge_ull(a, e, flags) \
614{ \
615 static const T_check_context T_check_instance = { \
616 T_FILE_NAME, __LINE__, (flags) | T_CHECK_FMT }; \
617 T_check_ge_ull(&T_check_instance, a, e); \
618}
619
620void T_check_gt_ull(const T_check_context *, unsigned long long,
621 unsigned long long);
622
623#define T_flags_gt_ull(a, e, flags) \
624{ \
625 static const T_check_context T_check_instance = { \
626 T_FILE_NAME, __LINE__, (flags) | T_CHECK_FMT }; \
627 T_check_gt_ull(&T_check_instance, a, e); \
628}
629
630void T_check_le_ull(const T_check_context *, unsigned long long,
631 unsigned long long);
632
633#define T_flags_le_ull(a, e, flags) \
634{ \
635 static const T_check_context T_check_instance = { \
636 T_FILE_NAME, __LINE__, (flags) | T_CHECK_FMT }; \
637 T_check_le_ull(&T_check_instance, a, e); \
638}
639
640void T_check_lt_ull(const T_check_context *, unsigned long long,
641 unsigned long long);
642
643#define T_flags_lt_ull(a, e, flags) \
644{ \
645 static const T_check_context T_check_instance = { \
646 T_FILE_NAME, __LINE__, (flags) | T_CHECK_FMT }; \
647 T_check_lt_ull(&T_check_instance, a, e); \
648}
649
650void T_check_eno(const T_check_context *, int, int);
651
652#define T_flags_eno(a, e, flags) \
653{ \
654 static const T_check_context T_check_instance = { \
655 T_FILE_NAME, __LINE__, (flags) | T_CHECK_FMT }; \
656 T_check_eno(&T_check_instance, a, e); \
657}
658
659void T_check_eno_success(const T_check_context *, int);
660
661#define T_flags_eno_success(a, flags) \
662{ \
663 static const T_check_context T_check_instance = { \
664 T_FILE_NAME, __LINE__, (flags) | T_CHECK_FMT }; \
665 T_check_eno_success(&T_check_instance, a); \
666}
667
668void T_check_psx_error(const T_check_context *, int, int);
669
670#define T_flags_psx_error(a, eno, flags) \
671{ \
672 static const T_check_context T_check_instance = { \
673 T_FILE_NAME, __LINE__, (flags) | T_CHECK_FMT }; \
674 T_check_psx_error(&T_check_instance, a, eno); \
675}
676
677void T_check_psx_success(const T_check_context *, int);
678
679#define T_flags_psx_success(a, flags) \
680{ \
681 static const T_check_context T_check_instance = { \
682 T_FILE_NAME, __LINE__, (flags) | T_CHECK_FMT }; \
683 T_check_psx_success(&T_check_instance, a); \
684}
685
688int T_printf(char const *, ...);
689
690int T_vprintf(char const *, va_list);
691
692int T_puts(const char *, size_t);
693
694int T_snprintf(char *, size_t, const char *, ...);
695
696void T_log(T_verbosity, char const *, ...);
697
698const char *T_case_name(void);
699
700T_verbosity T_set_verbosity(T_verbosity);
701
712#define T_true(...) T_flags_true(0, __VA_ARGS__)
713#define T_assert_true(...) T_flags_true(T_CHECK_STOP, __VA_ARGS__)
714#define T_quiet_true(...) T_flags_true(T_CHECK_QUIET, __VA_ARGS__)
715#define T_step_true(s, ...) T_flags_true(T_CHECK_STEP(s), __VA_ARGS__)
716#define T_step_assert_true(s, ...) \
717 T_flags_true(T_CHECK_STEP(s) | T_CHECK_STOP, __VA_ARGS__)
718
719#define T_false(...) \
720 T_flags_true(0, \
721 !(T_VA_ARGS_FIRST(__VA_ARGS__)) T_VA_ARGS_MORE(__VA_ARGS__))
722#define T_assert_false(...) \
723 T_flags_true(T_CHECK_STOP, \
724 !(T_VA_ARGS_FIRST(__VA_ARGS__)) T_VA_ARGS_MORE(__VA_ARGS__))
725#define T_quiet_false(...) \
726 T_flags_true(T_CHECK_QUIET, \
727 !(T_VA_ARGS_FIRST(__VA_ARGS__)) T_VA_ARGS_MORE(__VA_ARGS__))
728#define T_step_false(s, ...) \
729 T_flags_true(T_CHECK_STEP(s), \
730 !(T_VA_ARGS_FIRST(__VA_ARGS__)) T_VA_ARGS_MORE(__VA_ARGS__))
731#define T_step_assert_false(s, ...) \
732 T_flags_true(T_CHECK_STEP(s) | T_CHECK_STOP, \
733 !(T_VA_ARGS_FIRST(__VA_ARGS__)) T_VA_ARGS_MORE(__VA_ARGS__))
734
747#define T_eq(a, ...) T_flags_eq(0, a, __VA_ARGS__)
748#define T_assert_eq(a, ...) T_flags_eq(T_CHECK_STOP, a, __VA_ARGS__)
749#define T_quiet_eq(a, ...) T_flags_eq(T_CHECK_QUIET, a, __VA_ARGS__)
750#define T_step_eq(s, a, ...) T_flags_eq(T_CHECK_STEP(s), a, __VA_ARGS__)
751#define T_step_assert_eq(s, a, ...) \
752 T_flags_eq(T_CHECK_STEP(s) | T_CHECK_STOP, a, __VA_ARGS__)
753
754#define T_ne(a, ...) T_flags_ne(0, a, __VA_ARGS__)
755#define T_assert_ne(a, ...) T_flags_ne(T_CHECK_STOP, a, __VA_ARGS__)
756#define T_quiet_ne(a, ...) T_flags_ne(T_CHECK_QUIET, a, __VA_ARGS__)
757#define T_step_ne(s, a, ...) T_flags_ne(T_CHECK_STEP(s), a, __VA_ARGS__)
758#define T_step_assert_ne(s, a, ...) \
759 T_flags_ne(T_CHECK_STEP(s) | T_CHECK_STOP, a, __VA_ARGS__)
760
773#define T_eq_ptr(a, e) T_flags_eq_ptr(a, e, 0, #a, #e)
774#define T_assert_eq_ptr(a, e) T_flags_eq_ptr(a, e, T_CHECK_STOP, #a, #e)
775#define T_quiet_eq_ptr(a, e) T_flags_eq_ptr(a, e, T_CHECK_QUIET, #a, #e)
776#define T_step_eq_ptr(s, a, e) T_flags_eq_ptr(a, e, T_CHECK_STEP(s), #a, #e)
777#define T_step_assert_eq_ptr(s, a, e) \
778 T_flags_eq_ptr(a, e, T_CHECK_STEP(s) | T_CHECK_STOP, #a, #e)
779
780#define T_ne_ptr(a, e) T_flags_ne_ptr(a, e, 0, #a, #e)
781#define T_assert_ne_ptr(a, e) T_flags_ne_ptr(a, e, T_CHECK_STOP, #a, #e)
782#define T_quiet_ne_ptr(a, e) T_flags_ne_ptr(a, e, T_CHECK_QUIET, #a, #e)
783#define T_step_ne_ptr(s, a, e) T_flags_ne_ptr(a, e, T_CHECK_STEP(s), #a, #e)
784#define T_step_assert_ne_ptr(s, a, e) \
785 T_flags_ne_ptr(a, e, T_CHECK_STEP(s) | T_CHECK_STOP, #a, #e)
786
787#define T_null(a) T_flags_null(a, 0, #a)
788#define T_assert_null(a) T_flags_null(a, T_CHECK_STOP, #a)
789#define T_quiet_null(a) T_flags_null(a, T_CHECK_QUIET, #a)
790#define T_quiet_assert_null(a) \
791 T_flags_null(a, T_CHECK_QUIET | T_CHECK_STOP, #a)
792#define T_step_null(s, a) T_flags_null(a, T_CHECK_STEP(s), #a)
793#define T_step_assert_null(s, a) \
794 T_flags_null(a, T_CHECK_STEP(s) | T_CHECK_STOP, #a)
795
796#define T_not_null(a) T_flags_not_null(a, 0, #a)
797#define T_assert_not_null(a) T_flags_not_null(a, T_CHECK_STOP, #a)
798#define T_quiet_not_null(a) T_flags_not_null(a, T_CHECK_QUIET, #a)
799#define T_quiet_assert_not_null(a) \
800 T_flags_not_null(a, T_CHECK_QUIET | T_CHECK_STOP, #a)
801#define T_step_not_null(s, a) T_flags_not_null(a, T_CHECK_STEP(s), #a)
802#define T_step_assert_not_null(s, a) \
803 T_flags_not_null(a, T_CHECK_STEP(s) | T_CHECK_STOP, #a)
804
817#define T_eq_mem(a, e, n) T_flags_eq_mem(a, e, n, 0, #a, #e, #n)
818#define T_assert_eq_mem(a, e, n) \
819 T_flags_eq_mem(a, e, n, T_CHECK_STOP, #a, #e, #n)
820#define T_quiet_eq_mem(a, e, n) \
821 T_flags_eq_mem(a, e, n, T_CHECK_QUIET, #a, #e, #n)
822#define T_step_eq_mem(s, a, e, n) \
823 T_flags_eq_mem(a, e, n, T_CHECK_STEP(s), #a, #e, #n)
824#define T_step_assert_eq_mem(s, a, e, n) \
825 T_flags_eq_mem(a, e, n, T_CHECK_STEP(s) | T_CHECK_STOP, #a, #e, #n)
826
827#define T_ne_mem(a, e, n) T_flags_ne_mem(a, e, n, 0, #a, #e, #n)
828#define T_assert_ne_mem(a, e, n) \
829 T_flags_ne_mem(a, e, n, T_CHECK_STOP, #a, #e, #n)
830#define T_quiet_ne_mem(a, e, n) \
831 T_flags_ne_mem(a, e, n, T_CHECK_QUIET, #a, #e, #n)
832#define T_step_ne_mem(s, a, e, n) \
833 T_flags_ne_mem(a, e, n, T_CHECK_STEP(s), #a, #e, #n)
834#define T_step_assert_ne_mem(s, a, e, n) \
835 T_flags_ne_mem(a, e, n, T_CHECK_STEP(s) | T_CHECK_STOP, #a, #e, #n)
836
849#define T_eq_str(a, e) T_flags_eq_str(a, e, 0)
850#define T_assert_eq_str(a, e) T_flags_eq_str(a, e, T_CHECK_STOP)
851#define T_quiet_eq_str(a, e) T_flags_eq_str(a, e, T_CHECK_QUIET)
852#define T_step_eq_str(s, a, e) T_flags_eq_str(a, e, T_CHECK_STEP(s))
853#define T_step_assert_eq_str(s, a, e) \
854 T_flags_eq_str(a, e, T_CHECK_STEP(s) | T_CHECK_STOP)
855
856#define T_ne_str(a, e) T_flags_ne_str(a, e, 0)
857#define T_assert_ne_str(a, e) T_flags_ne_str(a, e, T_CHECK_STOP)
858#define T_quiet_ne_str(a, e) T_flags_ne_str(a, e, T_CHECK_QUIET)
859#define T_step_ne_str(s, a, e) T_flags_ne_str(a, e, T_CHECK_STEP(s))
860#define T_step_assert_ne_str(s, a, e) \
861 T_flags_ne_str(a, e, T_CHECK_STEP(s) | T_CHECK_STOP)
862
863#define T_eq_nstr(a, e, n) T_flags_eq_nstr(a, e, n, 0)
864#define T_assert_eq_nstr(a, e, n) T_flags_eq_nstr(a, e, n, T_CHECK_STOP)
865#define T_quiet_eq_nstr(a, e, n) T_flags_eq_nstr(a, e, n, T_CHECK_QUIET)
866#define T_step_eq_nstr(s, a, e, n) T_flags_eq_nstr(a, e, n, T_CHECK_STEP(s))
867#define T_step_assert_eq_nstr(s, a, e, n) \
868 T_flags_eq_nstr(a, e, n, T_CHECK_STEP(s) | T_CHECK_STOP)
869
870#define T_ne_nstr(a, e, n) T_flags_ne_nstr(a, e, n, 0)
871#define T_assert_ne_nstr(a, e, n) T_flags_ne_nstr(a, e, n, T_CHECK_STOP)
872#define T_quiet_ne_nstr(a, e, n) T_flags_ne_nstr(a, e, n, T_CHECK_QUIET)
873#define T_step_ne_nstr(s, a, e, n) T_flags_ne_nstr(a, e, n, T_CHECK_STEP(s))
874#define T_step_assert_ne_nstr(s, a, e, n) \
875 T_flags_ne_nstr(a, e, n, T_CHECK_STEP(s) | T_CHECK_STOP)
876
889#define T_eq_char(a, e) T_flags_eq_char(a, e, 0)
890#define T_assert_eq_char(a, e) T_flags_eq_char(a, e, T_CHECK_STOP)
891#define T_quiet_eq_char(a, e) T_flags_eq_char(a, e, T_CHECK_QUIET)
892#define T_step_eq_char(s, a, e) T_flags_eq_char(a, e, T_CHECK_STEP(s))
893#define T_step_assert_eq_char(s, a, e) \
894 T_flags_eq_char(a, e, T_CHECK_STEP(s) | T_CHECK_STOP)
895
896#define T_ne_char(a, e) T_flags_ne_char(a, e, 0)
897#define T_assert_ne_char(a, e) T_flags_ne_char(a, e, T_CHECK_STOP)
898#define T_quiet_ne_char(a, e) T_flags_ne_char(a, e, T_CHECK_QUIET)
899#define T_step_ne_char(s, a, e) T_flags_ne_char(a, e, T_CHECK_STEP(s))
900#define T_step_assert_ne_char(s, a, e) \
901 T_flags_ne_char(a, e, T_CHECK_STEP(s) | T_CHECK_STOP)
902
915#define T_eq_schar(a, e) T_flags_eq_int(a, e, 0)
916#define T_assert_eq_schar(a, e) T_flags_eq_int(a, e, T_CHECK_STOP)
917#define T_quiet_eq_schar(a, e) T_flags_eq_int(a, e, T_CHECK_QUIET)
918#define T_step_eq_schar(s, a, e) T_flags_eq_int(a, e, T_CHECK_STEP(s))
919#define T_step_assert_eq_schar(s, a, e) \
920 T_flags_eq_int(a, e, T_CHECK_STEP(s) | T_CHECK_STOP)
921
922#define T_ne_schar(a, e) T_flags_ne_int(a, e, 0)
923#define T_assert_ne_schar(a, e) T_flags_ne_int(a, e, T_CHECK_STOP)
924#define T_quiet_ne_schar(a, e) T_flags_ne_int(a, e, T_CHECK_QUIET)
925#define T_step_ne_schar(s, a, e) T_flags_ne_int(a, e, T_CHECK_STEP(s))
926#define T_step_assert_ne_schar(s, a, e) \
927 T_flags_ne_int(a, e, T_CHECK_STEP(s) | T_CHECK_STOP)
928
929#define T_ge_schar(a, e) T_flags_ge_int(a, e, 0)
930#define T_assert_ge_schar(a, e) T_flags_ge_int(a, e, T_CHECK_STOP)
931#define T_quiet_ge_schar(a, e) T_flags_ge_int(a, e, T_CHECK_QUIET)
932#define T_step_ge_schar(s, a, e) T_flags_ge_int(a, e, T_CHECK_STEP(s))
933#define T_step_assert_ge_schar(s, a, e) \
934 T_flags_ge_int(a, e, T_CHECK_STEP(s) | T_CHECK_STOP)
935
936#define T_gt_schar(a, e) T_flags_gt_int(a, e, 0)
937#define T_assert_gt_schar(a, e) T_flags_gt_int(a, e, T_CHECK_STOP)
938#define T_quiet_gt_schar(a, e) T_flags_gt_int(a, e, T_CHECK_QUIET)
939#define T_step_gt_schar(s, a, e) T_flags_gt_int(a, e, T_CHECK_STEP(s))
940#define T_step_assert_gt_schar(s, a, e) \
941 T_flags_gt_int(a, e, T_CHECK_STEP(s) | T_CHECK_STOP)
942
943#define T_le_schar(a, e) T_flags_le_int(a, e, 0)
944#define T_assert_le_schar(a, e) T_flags_le_int(a, e, T_CHECK_STOP)
945#define T_quiet_le_schar(a, e) T_flags_le_int(a, e, T_CHECK_QUIET)
946#define T_step_le_schar(s, a, e) T_flags_le_int(a, e, T_CHECK_STEP(s))
947#define T_step_assert_le_schar(s, a, e) \
948 T_flags_le_int(a, e, T_CHECK_STEP(s) | T_CHECK_STOP)
949
950#define T_lt_schar(a, e) T_flags_lt_int(a, e, 0)
951#define T_assert_lt_schar(a, e) T_flags_lt_int(a, e, T_CHECK_STOP)
952#define T_quiet_lt_schar(a, e) T_flags_lt_int(a, e, T_CHECK_QUIET)
953#define T_step_lt_schar(s, a, e) T_flags_lt_int(a, e, T_CHECK_STEP(s))
954#define T_step_assert_lt_schar(s, a, e) \
955 T_flags_lt_int(a, e, T_CHECK_STEP(s) | T_CHECK_STOP)
956
969#define T_eq_uchar(a, e) T_flags_eq_uint(a, e, 0)
970#define T_assert_eq_uchar(a, e) T_flags_eq_uint(a, e, T_CHECK_STOP)
971#define T_quiet_eq_uchar(a, e) T_flags_eq_uint(a, e, T_CHECK_QUIET)
972#define T_step_eq_uchar(s, a, e) T_flags_eq_uint(a, e, T_CHECK_STEP(s))
973#define T_step_assert_eq_uchar(s, a, e) \
974 T_flags_eq_uint(a, e, T_CHECK_STEP(s) | T_CHECK_STOP)
975
976#define T_ne_uchar(a, e) T_flags_ne_uint(a, e, 0)
977#define T_assert_ne_uchar(a, e) T_flags_ne_uint(a, e, T_CHECK_STOP)
978#define T_quiet_ne_uchar(a, e) T_flags_ne_uint(a, e, T_CHECK_QUIET)
979#define T_step_ne_uchar(s, a, e) T_flags_ne_uint(a, e, T_CHECK_STEP(s))
980#define T_step_assert_ne_uchar(s, a, e) \
981 T_flags_ne_uint(a, e, T_CHECK_STEP(s) | T_CHECK_STOP)
982
983#define T_ge_uchar(a, e) T_flags_ge_uint(a, e, 0)
984#define T_assert_ge_uchar(a, e) T_flags_ge_uint(a, e, T_CHECK_STOP)
985#define T_quiet_ge_uchar(a, e) T_flags_ge_uint(a, e, T_CHECK_QUIET)
986#define T_step_ge_uchar(s, a, e) T_flags_ge_uint(a, e, T_CHECK_STEP(s))
987#define T_step_assert_ge_uchar(s, a, e) \
988 T_flags_ge_uint(a, e, T_CHECK_STEP(s) | T_CHECK_STOP)
989
990#define T_gt_uchar(a, e) T_flags_gt_uint(a, e, 0)
991#define T_assert_gt_uchar(a, e) T_flags_gt_uint(a, e, T_CHECK_STOP)
992#define T_quiet_gt_uchar(a, e) T_flags_gt_uint(a, e, T_CHECK_QUIET)
993#define T_step_gt_uchar(s, a, e) T_flags_gt_uint(a, e, T_CHECK_STEP(s))
994#define T_step_assert_gt_uchar(s, a, e) \
995 T_flags_gt_uint(a, e, T_CHECK_STEP(s) | T_CHECK_STOP)
996
997#define T_le_uchar(a, e) T_flags_le_uint(a, e, 0)
998#define T_assert_le_uchar(a, e) T_flags_le_uint(a, e, T_CHECK_STOP)
999#define T_quiet_le_uchar(a, e) T_flags_le_uint(a, e, T_CHECK_QUIET)
1000#define T_step_le_uchar(s, a, e) T_flags_le_uint(a, e, T_CHECK_STEP(s))
1001#define T_step_assert_le_uchar(s, a, e) \
1002 T_flags_le_uint(a, e, T_CHECK_STEP(s) | T_CHECK_STOP)
1003
1004#define T_lt_uchar(a, e) T_flags_lt_uint(a, e, 0)
1005#define T_assert_lt_uchar(a, e) T_flags_lt_uint(a, e, T_CHECK_STOP)
1006#define T_quiet_lt_uchar(a, e) T_flags_lt_uint(a, e, T_CHECK_QUIET)
1007#define T_step_lt_uchar(s, a, e) T_flags_lt_uint(a, e, T_CHECK_STEP(s))
1008#define T_step_assert_lt_uchar(s, a, e) \
1009 T_flags_lt_uint(a, e, T_CHECK_STEP(s) | T_CHECK_STOP)
1010
1023#define T_eq_short(a, e) T_flags_eq_int(a, e, 0)
1024#define T_assert_eq_short(a, e) T_flags_eq_int(a, e, T_CHECK_STOP)
1025#define T_quiet_eq_short(a, e) T_flags_eq_int(a, e, T_CHECK_QUIET)
1026#define T_step_eq_short(s, a, e) T_flags_eq_int(a, e, T_CHECK_STEP(s))
1027#define T_step_assert_eq_short(s, a, e) \
1028 T_flags_eq_int(a, e, T_CHECK_STEP(s) | T_CHECK_STOP)
1029
1030#define T_ne_short(a, e) T_flags_ne_int(a, e, 0)
1031#define T_assert_ne_short(a, e) T_flags_ne_int(a, e, T_CHECK_STOP)
1032#define T_quiet_ne_short(a, e) T_flags_ne_int(a, e, T_CHECK_QUIET)
1033#define T_step_ne_short(s, a, e) T_flags_ne_int(a, e, T_CHECK_STEP(s))
1034#define T_step_assert_ne_short(s, a, e) \
1035 T_flags_ne_int(a, e, T_CHECK_STEP(s) | T_CHECK_STOP)
1036
1037#define T_ge_short(a, e) T_flags_ge_int(a, e, 0)
1038#define T_assert_ge_short(a, e) T_flags_ge_int(a, e, T_CHECK_STOP)
1039#define T_quiet_ge_short(a, e) T_flags_ge_int(a, e, T_CHECK_QUIET)
1040#define T_step_ge_short(s, a, e) T_flags_ge_int(a, e, T_CHECK_STEP(s))
1041#define T_step_assert_ge_short(s, a, e) \
1042 T_flags_ge_int(a, e, T_CHECK_STEP(s) | T_CHECK_STOP)
1043
1044#define T_gt_short(a, e) T_flags_gt_int(a, e, 0)
1045#define T_assert_gt_short(a, e) T_flags_gt_int(a, e, T_CHECK_STOP)
1046#define T_quiet_gt_short(a, e) T_flags_gt_int(a, e, T_CHECK_QUIET)
1047#define T_step_gt_short(s, a, e) T_flags_gt_int(a, e, T_CHECK_STEP(s))
1048#define T_step_assert_gt_short(s, a, e) \
1049 T_flags_gt_int(a, e, T_CHECK_STEP(s) | T_CHECK_STOP)
1050
1051#define T_le_short(a, e) T_flags_le_int(a, e, 0)
1052#define T_assert_le_short(a, e) T_flags_le_int(a, e, T_CHECK_STOP)
1053#define T_quiet_le_short(a, e) T_flags_le_int(a, e, T_CHECK_QUIET)
1054#define T_step_le_short(s, a, e) T_flags_le_int(a, e, T_CHECK_STEP(s))
1055#define T_step_assert_le_short(s, a, e) \
1056 T_flags_le_int(a, e, T_CHECK_STEP(s) | T_CHECK_STOP)
1057
1058#define T_lt_short(a, e) T_flags_lt_int(a, e, 0)
1059#define T_assert_lt_short(a, e) T_flags_lt_int(a, e, T_CHECK_STOP)
1060#define T_quiet_lt_short(a, e) T_flags_lt_int(a, e, T_CHECK_QUIET)
1061#define T_step_lt_short(s, a, e) T_flags_lt_int(a, e, T_CHECK_STEP(s))
1062#define T_step_assert_lt_short(s, a, e) \
1063 T_flags_lt_int(a, e, T_CHECK_STEP(s) | T_CHECK_STOP)
1064
1077#define T_eq_ushort(a, e) T_flags_eq_uint(a, e, 0)
1078#define T_assert_eq_ushort(a, e) T_flags_eq_uint(a, e, T_CHECK_STOP)
1079#define T_quiet_eq_ushort(a, e) T_flags_eq_uint(a, e, T_CHECK_QUIET)
1080#define T_step_eq_ushort(s, a, e) T_flags_eq_uint(a, e, T_CHECK_STEP(s))
1081#define T_step_assert_eq_ushort(s, a, e) \
1082 T_flags_eq_uint(a, e, T_CHECK_STEP(s) | T_CHECK_STOP)
1083
1084#define T_ne_ushort(a, e) T_flags_ne_uint(a, e, 0)
1085#define T_assert_ne_ushort(a, e) T_flags_ne_uint(a, e, T_CHECK_STOP)
1086#define T_quiet_ne_ushort(a, e) T_flags_ne_uint(a, e, T_CHECK_QUIET)
1087#define T_step_ne_ushort(s, a, e) T_flags_ne_uint(a, e, T_CHECK_STEP(s))
1088#define T_step_assert_ne_ushort(s, a, e) \
1089 T_flags_ne_uint(a, e, T_CHECK_STEP(s) | T_CHECK_STOP)
1090
1091#define T_ge_ushort(a, e) T_flags_ge_uint(a, e, 0)
1092#define T_assert_ge_ushort(a, e) T_flags_ge_uint(a, e, T_CHECK_STOP)
1093#define T_quiet_ge_ushort(a, e) T_flags_ge_uint(a, e, T_CHECK_QUIET)
1094#define T_step_ge_ushort(s, a, e) T_flags_ge_uint(a, e, T_CHECK_STEP(s))
1095#define T_step_assert_ge_ushort(s, a, e) \
1096 T_flags_ge_uint(a, e, T_CHECK_STEP(s) | T_CHECK_STOP)
1097
1098#define T_gt_ushort(a, e) T_flags_gt_uint(a, e, 0)
1099#define T_assert_gt_ushort(a, e) T_flags_gt_uint(a, e, T_CHECK_STOP)
1100#define T_quiet_gt_ushort(a, e) T_flags_gt_uint(a, e, T_CHECK_QUIET)
1101#define T_step_gt_ushort(s, a, e) T_flags_gt_uint(a, e, T_CHECK_STEP(s))
1102#define T_step_assert_gt_ushort(s, a, e) \
1103 T_flags_gt_uint(a, e, T_CHECK_STEP(s) | T_CHECK_STOP)
1104
1105#define T_le_ushort(a, e) T_flags_le_uint(a, e, 0)
1106#define T_assert_le_ushort(a, e) T_flags_le_uint(a, e, T_CHECK_STOP)
1107#define T_quiet_le_ushort(a, e) T_flags_le_uint(a, e, T_CHECK_QUIET)
1108#define T_step_le_ushort(s, a, e) T_flags_le_uint(a, e, T_CHECK_STEP(s))
1109#define T_step_assert_le_ushort(s, a, e) \
1110 T_flags_le_uint(a, e, T_CHECK_STEP(s) | T_CHECK_STOP)
1111
1112#define T_lt_ushort(a, e) T_flags_lt_uint(a, e, 0)
1113#define T_assert_lt_ushort(a, e) T_flags_lt_uint(a, e, T_CHECK_STOP)
1114#define T_quiet_lt_ushort(a, e) T_flags_lt_uint(a, e, T_CHECK_QUIET)
1115#define T_step_lt_ushort(s, a, e) T_flags_lt_uint(a, e, T_CHECK_STEP(s))
1116#define T_step_assert_lt_ushort(s, a, e) \
1117 T_flags_lt_uint(a, e, T_CHECK_STEP(s) | T_CHECK_STOP)
1118
1131#define T_eq_int(a, e) T_flags_eq_int(a, e, 0)
1132#define T_assert_eq_int(a, e) T_flags_eq_int(a, e, T_CHECK_STOP)
1133#define T_quiet_eq_int(a, e) T_flags_eq_int(a, e, T_CHECK_QUIET)
1134#define T_step_eq_int(s, a, e) T_flags_eq_int(a, e, T_CHECK_STEP(s))
1135#define T_step_assert_eq_int(s, a, e) \
1136 T_flags_eq_int(a, e, T_CHECK_STEP(s) | T_CHECK_STOP)
1137
1138#define T_ne_int(a, e) T_flags_ne_int(a, e, 0)
1139#define T_assert_ne_int(a, e) T_flags_ne_int(a, e, T_CHECK_STOP)
1140#define T_quiet_ne_int(a, e) T_flags_ne_int(a, e, T_CHECK_QUIET)
1141#define T_step_ne_int(s, a, e) T_flags_ne_int(a, e, T_CHECK_STEP(s))
1142#define T_step_assert_ne_int(s, a, e) \
1143 T_flags_ne_int(a, e, T_CHECK_STEP(s) | T_CHECK_STOP)
1144
1145#define T_ge_int(a, e) T_flags_ge_int(a, e, 0)
1146#define T_assert_ge_int(a, e) T_flags_ge_int(a, e, T_CHECK_STOP)
1147#define T_quiet_ge_int(a, e) T_flags_ge_int(a, e, T_CHECK_QUIET)
1148#define T_step_ge_int(s, a, e) T_flags_ge_int(a, e, T_CHECK_STEP(s))
1149#define T_step_assert_ge_int(s, a, e) \
1150 T_flags_ge_int(a, e, T_CHECK_STEP(s) | T_CHECK_STOP)
1151
1152#define T_gt_int(a, e) T_flags_gt_int(a, e, 0)
1153#define T_assert_gt_int(a, e) T_flags_gt_int(a, e, T_CHECK_STOP)
1154#define T_quiet_gt_int(a, e) T_flags_gt_int(a, e, T_CHECK_QUIET)
1155#define T_step_gt_int(s, a, e) T_flags_gt_int(a, e, T_CHECK_STEP(s))
1156#define T_step_assert_gt_int(s, a, e) \
1157 T_flags_gt_int(a, e, T_CHECK_STEP(s) | T_CHECK_STOP)
1158
1159#define T_le_int(a, e) T_flags_le_int(a, e, 0)
1160#define T_assert_le_int(a, e) T_flags_le_int(a, e, T_CHECK_STOP)
1161#define T_quiet_le_int(a, e) T_flags_le_int(a, e, T_CHECK_QUIET)
1162#define T_step_le_int(s, a, e) T_flags_le_int(a, e, T_CHECK_STEP(s))
1163#define T_step_assert_le_int(s, a, e) \
1164 T_flags_le_int(a, e, T_CHECK_STEP(s) | T_CHECK_STOP)
1165
1166#define T_lt_int(a, e) T_flags_lt_int(a, e, 0)
1167#define T_assert_lt_int(a, e) T_flags_lt_int(a, e, T_CHECK_STOP)
1168#define T_quiet_lt_int(a, e) T_flags_lt_int(a, e, T_CHECK_QUIET)
1169#define T_step_lt_int(s, a, e) T_flags_lt_int(a, e, T_CHECK_STEP(s))
1170#define T_step_assert_lt_int(s, a, e) \
1171 T_flags_lt_int(a, e, T_CHECK_STEP(s) | T_CHECK_STOP)
1172
1185#define T_eq_uint(a, e) T_flags_eq_uint(a, e, 0)
1186#define T_assert_eq_uint(a, e) T_flags_eq_uint(a, e, T_CHECK_STOP)
1187#define T_quiet_eq_uint(a, e) T_flags_eq_uint(a, e, T_CHECK_QUIET)
1188#define T_step_eq_uint(s, a, e) T_flags_eq_uint(a, e, T_CHECK_STEP(s))
1189#define T_step_assert_eq_uint(s, a, e) \
1190 T_flags_eq_uint(a, e, T_CHECK_STEP(s) | T_CHECK_STOP)
1191
1192#define T_ne_uint(a, e) T_flags_ne_uint(a, e, 0)
1193#define T_assert_ne_uint(a, e) T_flags_ne_uint(a, e, T_CHECK_STOP)
1194#define T_quiet_ne_uint(a, e) T_flags_ne_uint(a, e, T_CHECK_QUIET)
1195#define T_step_ne_uint(s, a, e) T_flags_ne_uint(a, e, T_CHECK_STEP(s))
1196#define T_step_assert_ne_uint(s, a, e) \
1197 T_flags_ne_uint(a, e, T_CHECK_STEP(s) | T_CHECK_STOP)
1198
1199#define T_ge_uint(a, e) T_flags_ge_uint(a, e, 0)
1200#define T_assert_ge_uint(a, e) T_flags_ge_uint(a, e, T_CHECK_STOP)
1201#define T_quiet_ge_uint(a, e) T_flags_ge_uint(a, e, T_CHECK_QUIET)
1202#define T_step_ge_uint(s, a, e) T_flags_ge_uint(a, e, T_CHECK_STEP(s))
1203#define T_step_assert_ge_uint(s, a, e) \
1204 T_flags_ge_uint(a, e, T_CHECK_STEP(s) | T_CHECK_STOP)
1205
1206#define T_gt_uint(a, e) T_flags_gt_uint(a, e, 0)
1207#define T_assert_gt_uint(a, e) T_flags_gt_uint(a, e, T_CHECK_STOP)
1208#define T_quiet_gt_uint(a, e) T_flags_gt_uint(a, e, T_CHECK_QUIET)
1209#define T_step_gt_uint(s, a, e) T_flags_gt_uint(a, e, T_CHECK_STEP(s))
1210#define T_step_assert_gt_uint(s, a, e) \
1211 T_flags_gt_uint(a, e, T_CHECK_STEP(s) | T_CHECK_STOP)
1212
1213#define T_le_uint(a, e) T_flags_le_uint(a, e, 0)
1214#define T_assert_le_uint(a, e) T_flags_le_uint(a, e, T_CHECK_STOP)
1215#define T_quiet_le_uint(a, e) T_flags_le_uint(a, e, T_CHECK_QUIET)
1216#define T_step_le_uint(s, a, e) T_flags_le_uint(a, e, T_CHECK_STEP(s))
1217#define T_step_assert_le_uint(s, a, e) \
1218 T_flags_le_uint(a, e, T_CHECK_STEP(s) | T_CHECK_STOP)
1219
1220#define T_lt_uint(a, e) T_flags_lt_uint(a, e, 0)
1221#define T_assert_lt_uint(a, e) T_flags_lt_uint(a, e, T_CHECK_STOP)
1222#define T_quiet_lt_uint(a, e) T_flags_lt_uint(a, e, T_CHECK_QUIET)
1223#define T_step_lt_uint(s, a, e) T_flags_lt_uint(a, e, T_CHECK_STEP(s))
1224#define T_step_assert_lt_uint(s, a, e) \
1225 T_flags_lt_uint(a, e, T_CHECK_STEP(s) | T_CHECK_STOP)
1226
1239#define T_eq_long(a, e) T_flags_eq_long(a, e, 0)
1240#define T_assert_eq_long(a, e) T_flags_eq_long(a, e, T_CHECK_STOP)
1241#define T_quiet_eq_long(a, e) T_flags_eq_long(a, e, T_CHECK_QUIET)
1242#define T_step_eq_long(s, a, e) T_flags_eq_long(a, e, T_CHECK_STEP(s))
1243#define T_step_assert_eq_long(s, a, e) \
1244 T_flags_eq_long(a, e, T_CHECK_STEP(s) | T_CHECK_STOP)
1245
1246#define T_ne_long(a, e) T_flags_ne_long(a, e, 0)
1247#define T_assert_ne_long(a, e) T_flags_ne_long(a, e, T_CHECK_STOP)
1248#define T_quiet_ne_long(a, e) T_flags_ne_long(a, e, T_CHECK_QUIET)
1249#define T_step_ne_long(s, a, e) T_flags_ne_long(a, e, T_CHECK_STEP(s))
1250#define T_step_assert_ne_long(s, a, e) \
1251 T_flags_ne_long(a, e, T_CHECK_STEP(s) | T_CHECK_STOP)
1252
1253#define T_ge_long(a, e) T_flags_ge_long(a, e, 0)
1254#define T_assert_ge_long(a, e) T_flags_ge_long(a, e, T_CHECK_STOP)
1255#define T_quiet_ge_long(a, e) T_flags_ge_long(a, e, T_CHECK_QUIET)
1256#define T_step_ge_long(s, a, e) T_flags_ge_long(a, e, T_CHECK_STEP(s))
1257#define T_step_assert_ge_long(s, a, e) \
1258 T_flags_ge_long(a, e, T_CHECK_STEP(s) | T_CHECK_STOP)
1259
1260#define T_gt_long(a, e) T_flags_gt_long(a, e, 0)
1261#define T_assert_gt_long(a, e) T_flags_gt_long(a, e, T_CHECK_STOP)
1262#define T_quiet_gt_long(a, e) T_flags_gt_long(a, e, T_CHECK_QUIET)
1263#define T_step_gt_long(s, a, e) T_flags_gt_long(a, e, T_CHECK_STEP(s))
1264#define T_step_assert_gt_long(s, a, e) \
1265 T_flags_gt_long(a, e, T_CHECK_STEP(s) | T_CHECK_STOP)
1266
1267#define T_le_long(a, e) T_flags_le_long(a, e, 0)
1268#define T_assert_le_long(a, e) T_flags_le_long(a, e, T_CHECK_STOP)
1269#define T_quiet_le_long(a, e) T_flags_le_long(a, e, T_CHECK_QUIET)
1270#define T_step_le_long(s, a, e) T_flags_le_long(a, e, T_CHECK_STEP(s))
1271#define T_step_assert_le_long(s, a, e) \
1272 T_flags_le_long(a, e, T_CHECK_STEP(s) | T_CHECK_STOP)
1273
1274#define T_lt_long(a, e) T_flags_lt_long(a, e, 0)
1275#define T_assert_lt_long(a, e) T_flags_lt_long(a, e, T_CHECK_STOP)
1276#define T_quiet_lt_long(a, e) T_flags_lt_long(a, e, T_CHECK_QUIET)
1277#define T_step_lt_long(s, a, e) T_flags_lt_long(a, e, T_CHECK_STEP(s))
1278#define T_step_assert_lt_long(s, a, e) \
1279 T_flags_lt_long(a, e, T_CHECK_STEP(s) | T_CHECK_STOP)
1280
1293#define T_eq_ulong(a, e) T_flags_eq_ulong(a, e, 0)
1294#define T_assert_eq_ulong(a, e) T_flags_eq_ulong(a, e, T_CHECK_STOP)
1295#define T_quiet_eq_ulong(a, e) T_flags_eq_ulong(a, e, T_CHECK_QUIET)
1296#define T_step_eq_ulong(s, a, e) T_flags_eq_ulong(a, e, T_CHECK_STEP(s))
1297#define T_step_assert_eq_ulong(s, a, e) \
1298 T_flags_eq_ulong(a, e, T_CHECK_STEP(s) | T_CHECK_STOP)
1299
1300#define T_ne_ulong(a, e) T_flags_ne_ulong(a, e, 0)
1301#define T_assert_ne_ulong(a, e) T_flags_ne_ulong(a, e, T_CHECK_STOP)
1302#define T_quiet_ne_ulong(a, e) T_flags_ne_ulong(a, e, T_CHECK_QUIET)
1303#define T_step_ne_ulong(s, a, e) T_flags_ne_ulong(a, e, T_CHECK_STEP(s))
1304#define T_step_assert_ne_ulong(s, a, e) \
1305 T_flags_ne_ulong(a, e, T_CHECK_STEP(s) | T_CHECK_STOP)
1306
1307#define T_ge_ulong(a, e) T_flags_ge_ulong(a, e, 0)
1308#define T_assert_ge_ulong(a, e) T_flags_ge_ulong(a, e, T_CHECK_STOP)
1309#define T_quiet_ge_ulong(a, e) T_flags_ge_ulong(a, e, T_CHECK_QUIET)
1310#define T_step_ge_ulong(s, a, e) T_flags_ge_ulong(a, e, T_CHECK_STEP(s))
1311#define T_step_assert_ge_ulong(s, a, e) \
1312 T_flags_ge_ulong(a, e, T_CHECK_STEP(s) | T_CHECK_STOP)
1313
1314#define T_gt_ulong(a, e) T_flags_gt_ulong(a, e, 0)
1315#define T_assert_gt_ulong(a, e) T_flags_gt_ulong(a, e, T_CHECK_STOP)
1316#define T_quiet_gt_ulong(a, e) T_flags_gt_ulong(a, e, T_CHECK_QUIET)
1317#define T_step_gt_ulong(s, a, e) T_flags_gt_ulong(a, e, T_CHECK_STEP(s))
1318#define T_step_assert_gt_ulong(s, a, e) \
1319 T_flags_gt_ulong(a, e, T_CHECK_STEP(s) | T_CHECK_STOP)
1320
1321#define T_le_ulong(a, e) T_flags_le_ulong(a, e, 0)
1322#define T_assert_le_ulong(a, e) T_flags_le_ulong(a, e, T_CHECK_STOP)
1323#define T_quiet_le_ulong(a, e) T_flags_le_ulong(a, e, T_CHECK_QUIET)
1324#define T_step_le_ulong(s, a, e) T_flags_le_ulong(a, e, T_CHECK_STEP(s))
1325#define T_step_assert_le_ulong(s, a, e) \
1326 T_flags_le_ulong(a, e, T_CHECK_STEP(s) | T_CHECK_STOP)
1327
1328#define T_lt_ulong(a, e) T_flags_lt_ulong(a, e, 0)
1329#define T_assert_lt_ulong(a, e) T_flags_lt_ulong(a, e, T_CHECK_STOP)
1330#define T_quiet_lt_ulong(a, e) T_flags_lt_ulong(a, e, T_CHECK_QUIET)
1331#define T_step_lt_ulong(s, a, e) T_flags_lt_ulong(a, e, T_CHECK_STEP(s))
1332#define T_step_assert_lt_ulong(s, a, e) \
1333 T_flags_lt_ulong(a, e, T_CHECK_STEP(s) | T_CHECK_STOP)
1334
1347#define T_eq_ll(a, e) T_flags_eq_ll(a, e, 0)
1348#define T_assert_eq_ll(a, e) T_flags_eq_ll(a, e, T_CHECK_STOP)
1349#define T_quiet_eq_ll(a, e) T_flags_eq_ll(a, e, T_CHECK_QUIET)
1350#define T_step_eq_ll(s, a, e) T_flags_eq_ll(a, e, T_CHECK_STEP(s))
1351#define T_step_assert_eq_ll(s, a, e) \
1352 T_flags_eq_ll(a, e, T_CHECK_STEP(s) | T_CHECK_STOP)
1353
1354#define T_ne_ll(a, e) T_flags_ne_ll(a, e, 0)
1355#define T_assert_ne_ll(a, e) T_flags_ne_ll(a, e, T_CHECK_STOP)
1356#define T_quiet_ne_ll(a, e) T_flags_ne_ll(a, e, T_CHECK_QUIET)
1357#define T_step_ne_ll(s, a, e) T_flags_ne_ll(a, e, T_CHECK_STEP(s))
1358#define T_step_assert_ne_ll(s, a, e) \
1359 T_flags_ne_ll(a, e, T_CHECK_STEP(s) | T_CHECK_STOP)
1360
1361#define T_ge_ll(a, e) T_flags_ge_ll(a, e, 0)
1362#define T_assert_ge_ll(a, e) T_flags_ge_ll(a, e, T_CHECK_STOP)
1363#define T_quiet_ge_ll(a, e) T_flags_ge_ll(a, e, T_CHECK_QUIET)
1364#define T_step_ge_ll(s, a, e) T_flags_ge_ll(a, e, T_CHECK_STEP(s))
1365#define T_step_assert_ge_ll(s, a, e) \
1366 T_flags_ge_ll(a, e, T_CHECK_STEP(s) | T_CHECK_STOP)
1367
1368#define T_gt_ll(a, e) T_flags_gt_ll(a, e, 0)
1369#define T_assert_gt_ll(a, e) T_flags_gt_ll(a, e, T_CHECK_STOP)
1370#define T_quiet_gt_ll(a, e) T_flags_gt_ll(a, e, T_CHECK_QUIET)
1371#define T_step_gt_ll(s, a, e) T_flags_gt_ll(a, e, T_CHECK_STEP(s))
1372#define T_step_assert_gt_ll(s, a, e) \
1373 T_flags_gt_ll(a, e, T_CHECK_STEP(s) | T_CHECK_STOP)
1374
1375#define T_le_ll(a, e) T_flags_le_ll(a, e, 0)
1376#define T_assert_le_ll(a, e) T_flags_le_ll(a, e, T_CHECK_STOP)
1377#define T_quiet_le_ll(a, e) T_flags_le_ll(a, e, T_CHECK_QUIET)
1378#define T_step_le_ll(s, a, e) T_flags_le_ll(a, e, T_CHECK_STEP(s))
1379#define T_step_assert_le_ll(s, a, e) \
1380 T_flags_le_ll(a, e, T_CHECK_STEP(s) | T_CHECK_STOP)
1381
1382#define T_lt_ll(a, e) T_flags_lt_ll(a, e, 0)
1383#define T_assert_lt_ll(a, e) T_flags_lt_ll(a, e, T_CHECK_STOP)
1384#define T_quiet_lt_ll(a, e) T_flags_lt_ll(a, e, T_CHECK_QUIET)
1385#define T_step_lt_ll(s, a, e) T_flags_lt_ll(a, e, T_CHECK_STEP(s))
1386#define T_step_assert_lt_ll(s, a, e) \
1387 T_flags_lt_ll(a, e, T_CHECK_STEP(s) | T_CHECK_STOP)
1388
1401#define T_eq_ull(a, e) T_flags_eq_ull(a, e, 0)
1402#define T_assert_eq_ull(a, e) T_flags_eq_ull(a, e, T_CHECK_STOP)
1403#define T_quiet_eq_ull(a, e) T_flags_eq_ull(a, e, T_CHECK_QUIET)
1404#define T_step_eq_ull(s, a, e) T_flags_eq_ull(a, e, T_CHECK_STEP(s))
1405#define T_step_assert_eq_ull(s, a, e) \
1406 T_flags_eq_ull(a, e, T_CHECK_STEP(s) | T_CHECK_STOP)
1407
1408#define T_ne_ull(a, e) T_flags_ne_ull(a, e, 0)
1409#define T_assert_ne_ull(a, e) T_flags_ne_ull(a, e, T_CHECK_STOP)
1410#define T_quiet_ne_ull(a, e) T_flags_ne_ull(a, e, T_CHECK_QUIET)
1411#define T_step_ne_ull(s, a, e) T_flags_ne_ull(a, e, T_CHECK_STEP(s))
1412#define T_step_assert_ne_ull(s, a, e) \
1413 T_flags_ne_ull(a, e, T_CHECK_STEP(s) | T_CHECK_STOP)
1414
1415#define T_ge_ull(a, e) T_flags_ge_ull(a, e, 0)
1416#define T_assert_ge_ull(a, e) T_flags_ge_ull(a, e, T_CHECK_STOP)
1417#define T_quiet_ge_ull(a, e) T_flags_ge_ull(a, e, T_CHECK_QUIET)
1418#define T_step_ge_ull(s, a, e) T_flags_ge_ull(a, e, T_CHECK_STEP(s))
1419#define T_step_assert_ge_ull(s, a, e) \
1420 T_flags_ge_ull(a, e, T_CHECK_STEP(s) | T_CHECK_STOP)
1421
1422#define T_gt_ull(a, e) T_flags_gt_ull(a, e, 0)
1423#define T_assert_gt_ull(a, e) T_flags_gt_ull(a, e, T_CHECK_STOP)
1424#define T_quiet_gt_ull(a, e) T_flags_gt_ull(a, e, T_CHECK_QUIET)
1425#define T_step_gt_ull(s, a, e) T_flags_gt_ull(a, e, T_CHECK_STEP(s))
1426#define T_step_assert_gt_ull(s, a, e) \
1427 T_flags_gt_ull(a, e, T_CHECK_STEP(s) | T_CHECK_STOP)
1428
1429#define T_le_ull(a, e) T_flags_le_ull(a, e, 0)
1430#define T_assert_le_ull(a, e) T_flags_le_ull(a, e, T_CHECK_STOP)
1431#define T_quiet_le_ull(a, e) T_flags_le_ull(a, e, T_CHECK_QUIET)
1432#define T_step_le_ull(s, a, e) T_flags_le_ull(a, e, T_CHECK_STEP(s))
1433#define T_step_assert_le_ull(s, a, e) \
1434 T_flags_le_ull(a, e, T_CHECK_STEP(s) | T_CHECK_STOP)
1435
1436#define T_lt_ull(a, e) T_flags_lt_ull(a, e, 0)
1437#define T_assert_lt_ull(a, e) T_flags_lt_ull(a, e, T_CHECK_STOP)
1438#define T_quiet_lt_ull(a, e) T_flags_lt_ull(a, e, T_CHECK_QUIET)
1439#define T_step_lt_ull(s, a, e) T_flags_lt_ull(a, e, T_CHECK_STEP(s))
1440#define T_step_assert_lt_ull(s, a, e) \
1441 T_flags_lt_ull(a, e, T_CHECK_STEP(s) | T_CHECK_STOP)
1442
1455#define T_eq_i8(a, e) T_flags_eq_int(a, e, 0)
1456#define T_assert_eq_i8(a, e) T_flags_eq_int(a, e, T_CHECK_STOP)
1457#define T_quiet_eq_i8(a, e) T_flags_eq_int(a, e, T_CHECK_QUIET)
1458#define T_step_eq_i8(s, a, e) T_flags_eq_int(a, e, T_CHECK_STEP(s))
1459#define T_step_assert_eq_i8(s, a, e) \
1460 T_flags_eq_int(a, e, T_CHECK_STEP(s) | T_CHECK_STOP)
1461
1462#define T_ne_i8(a, e) T_flags_ne_int(a, e, 0)
1463#define T_assert_ne_i8(a, e) T_flags_ne_int(a, e, T_CHECK_STOP)
1464#define T_quiet_ne_i8(a, e) T_flags_ne_int(a, e, T_CHECK_QUIET)
1465#define T_step_ne_i8(s, a, e) T_flags_ne_int(a, e, T_CHECK_STEP(s))
1466#define T_step_assert_ne_i8(s, a, e) \
1467 T_flags_ne_int(a, e, T_CHECK_STEP(s) | T_CHECK_STOP)
1468
1469#define T_ge_i8(a, e) T_flags_ge_int(a, e, 0)
1470#define T_assert_ge_i8(a, e) T_flags_ge_int(a, e, T_CHECK_STOP)
1471#define T_quiet_ge_i8(a, e) T_flags_ge_int(a, e, T_CHECK_QUIET)
1472#define T_step_ge_i8(s, a, e) T_flags_ge_int(a, e, T_CHECK_STEP(s))
1473#define T_step_assert_ge_i8(s, a, e) \
1474 T_flags_ge_int(a, e, T_CHECK_STEP(s) | T_CHECK_STOP)
1475
1476#define T_gt_i8(a, e) T_flags_gt_int(a, e, 0)
1477#define T_assert_gt_i8(a, e) T_flags_gt_int(a, e, T_CHECK_STOP)
1478#define T_quiet_gt_i8(a, e) T_flags_gt_int(a, e, T_CHECK_QUIET)
1479#define T_step_gt_i8(s, a, e) T_flags_gt_int(a, e, T_CHECK_STEP(s))
1480#define T_step_assert_gt_i8(s, a, e) \
1481 T_flags_gt_int(a, e, T_CHECK_STEP(s) | T_CHECK_STOP)
1482
1483#define T_le_i8(a, e) T_flags_le_int(a, e, 0)
1484#define T_assert_le_i8(a, e) T_flags_le_int(a, e, T_CHECK_STOP)
1485#define T_quiet_le_i8(a, e) T_flags_le_int(a, e, T_CHECK_QUIET)
1486#define T_step_le_i8(s, a, e) T_flags_le_int(a, e, T_CHECK_STEP(s))
1487#define T_step_assert_le_i8(s, a, e) \
1488 T_flags_le_int(a, e, T_CHECK_STEP(s) | T_CHECK_STOP)
1489
1490#define T_lt_i8(a, e) T_flags_lt_int(a, e, 0)
1491#define T_assert_lt_i8(a, e) T_flags_lt_int(a, e, T_CHECK_STOP)
1492#define T_quiet_lt_i8(a, e) T_flags_lt_int(a, e, T_CHECK_QUIET)
1493#define T_step_lt_i8(s, a, e) T_flags_lt_int(a, e, T_CHECK_STEP(s))
1494#define T_step_assert_lt_i8(s, a, e) \
1495 T_flags_lt_int(a, e, T_CHECK_STEP(s) | T_CHECK_STOP)
1496
1509#define T_eq_u8(a, e) T_flags_eq_uint(a, e, 0)
1510#define T_assert_eq_u8(a, e) T_flags_eq_uint(a, e, T_CHECK_STOP)
1511#define T_quiet_eq_u8(a, e) T_flags_eq_uint(a, e, T_CHECK_QUIET)
1512#define T_step_eq_u8(s, a, e) T_flags_eq_uint(a, e, T_CHECK_STEP(s))
1513#define T_step_assert_eq_u8(s, a, e) \
1514 T_flags_eq_uint(a, e, T_CHECK_STEP(s) | T_CHECK_STOP)
1515
1516#define T_ne_u8(a, e) T_flags_ne_uint(a, e, 0)
1517#define T_assert_ne_u8(a, e) T_flags_ne_uint(a, e, T_CHECK_STOP)
1518#define T_quiet_ne_u8(a, e) T_flags_ne_uint(a, e, T_CHECK_QUIET)
1519#define T_step_ne_u8(s, a, e) T_flags_ne_uint(a, e, T_CHECK_STEP(s))
1520#define T_step_assert_ne_u8(s, a, e) \
1521 T_flags_ne_uint(a, e, T_CHECK_STEP(s) | T_CHECK_STOP)
1522
1523#define T_ge_u8(a, e) T_flags_ge_uint(a, e, 0)
1524#define T_assert_ge_u8(a, e) T_flags_ge_uint(a, e, T_CHECK_STOP)
1525#define T_quiet_ge_u8(a, e) T_flags_ge_uint(a, e, T_CHECK_QUIET)
1526#define T_step_ge_u8(s, a, e) T_flags_ge_uint(a, e, T_CHECK_STEP(s))
1527#define T_step_assert_ge_u8(s, a, e) \
1528 T_flags_ge_uint(a, e, T_CHECK_STEP(s) | T_CHECK_STOP)
1529
1530#define T_gt_u8(a, e) T_flags_gt_uint(a, e, 0)
1531#define T_assert_gt_u8(a, e) T_flags_gt_uint(a, e, T_CHECK_STOP)
1532#define T_quiet_gt_u8(a, e) T_flags_gt_uint(a, e, T_CHECK_QUIET)
1533#define T_step_gt_u8(s, a, e) T_flags_gt_uint(a, e, T_CHECK_STEP(s))
1534#define T_step_assert_gt_u8(s, a, e) \
1535 T_flags_gt_uint(a, e, T_CHECK_STEP(s) | T_CHECK_STOP)
1536
1537#define T_le_u8(a, e) T_flags_le_uint(a, e, 0)
1538#define T_assert_le_u8(a, e) T_flags_le_uint(a, e, T_CHECK_STOP)
1539#define T_quiet_le_u8(a, e) T_flags_le_uint(a, e, T_CHECK_QUIET)
1540#define T_step_le_u8(s, a, e) T_flags_le_uint(a, e, T_CHECK_STEP(s))
1541#define T_step_assert_le_u8(s, a, e) \
1542 T_flags_le_uint(a, e, T_CHECK_STEP(s) | T_CHECK_STOP)
1543
1544#define T_lt_u8(a, e) T_flags_lt_uint(a, e, 0)
1545#define T_assert_lt_u8(a, e) T_flags_lt_uint(a, e, T_CHECK_STOP)
1546#define T_quiet_lt_u8(a, e) T_flags_lt_uint(a, e, T_CHECK_QUIET)
1547#define T_step_lt_u8(s, a, e) T_flags_lt_uint(a, e, T_CHECK_STEP(s))
1548#define T_step_assert_lt_u8(s, a, e) \
1549 T_flags_lt_uint(a, e, T_CHECK_STEP(s) | T_CHECK_STOP)
1550
1563#define T_eq_i16(a, e) T_flags_eq_int(a, e, 0)
1564#define T_assert_eq_i16(a, e) T_flags_eq_int(a, e, T_CHECK_STOP)
1565#define T_quiet_eq_i16(a, e) T_flags_eq_int(a, e, T_CHECK_QUIET)
1566#define T_step_eq_i16(s, a, e) T_flags_eq_int(a, e, T_CHECK_STEP(s))
1567#define T_step_assert_eq_i16(s, a, e) \
1568 T_flags_eq_int(a, e, T_CHECK_STEP(s) | T_CHECK_STOP)
1569
1570#define T_ne_i16(a, e) T_flags_ne_int(a, e, 0)
1571#define T_assert_ne_i16(a, e) T_flags_ne_int(a, e, T_CHECK_STOP)
1572#define T_quiet_ne_i16(a, e) T_flags_ne_int(a, e, T_CHECK_QUIET)
1573#define T_step_ne_i16(s, a, e) T_flags_ne_int(a, e, T_CHECK_STEP(s))
1574#define T_step_assert_ne_i16(s, a, e) \
1575 T_flags_ne_int(a, e, T_CHECK_STEP(s) | T_CHECK_STOP)
1576
1577#define T_ge_i16(a, e) T_flags_ge_int(a, e, 0)
1578#define T_assert_ge_i16(a, e) T_flags_ge_int(a, e, T_CHECK_STOP)
1579#define T_quiet_ge_i16(a, e) T_flags_ge_int(a, e, T_CHECK_QUIET)
1580#define T_step_ge_i16(s, a, e) T_flags_ge_int(a, e, T_CHECK_STEP(s))
1581#define T_step_assert_ge_i16(s, a, e) \
1582 T_flags_ge_int(a, e, T_CHECK_STEP(s) | T_CHECK_STOP)
1583
1584#define T_gt_i16(a, e) T_flags_gt_int(a, e, 0)
1585#define T_assert_gt_i16(a, e) T_flags_gt_int(a, e, T_CHECK_STOP)
1586#define T_quiet_gt_i16(a, e) T_flags_gt_int(a, e, T_CHECK_QUIET)
1587#define T_step_gt_i16(s, a, e) T_flags_gt_int(a, e, T_CHECK_STEP(s))
1588#define T_step_assert_gt_i16(s, a, e) \
1589 T_flags_gt_int(a, e, T_CHECK_STEP(s) | T_CHECK_STOP)
1590
1591#define T_le_i16(a, e) T_flags_le_int(a, e, 0)
1592#define T_assert_le_i16(a, e) T_flags_le_int(a, e, T_CHECK_STOP)
1593#define T_quiet_le_i16(a, e) T_flags_le_int(a, e, T_CHECK_QUIET)
1594#define T_step_le_i16(s, a, e) T_flags_le_int(a, e, T_CHECK_STEP(s))
1595#define T_step_assert_le_i16(s, a, e) \
1596 T_flags_le_int(a, e, T_CHECK_STEP(s) | T_CHECK_STOP)
1597
1598#define T_lt_i16(a, e) T_flags_lt_int(a, e, 0)
1599#define T_assert_lt_i16(a, e) T_flags_lt_int(a, e, T_CHECK_STOP)
1600#define T_quiet_lt_i16(a, e) T_flags_lt_int(a, e, T_CHECK_QUIET)
1601#define T_step_lt_i16(s, a, e) T_flags_lt_int(a, e, T_CHECK_STEP(s))
1602#define T_step_assert_lt_i16(s, a, e) \
1603 T_flags_lt_int(a, e, T_CHECK_STEP(s) | T_CHECK_STOP)
1604
1617#define T_eq_u16(a, e) T_flags_eq_uint(a, e, 0)
1618#define T_assert_eq_u16(a, e) T_flags_eq_uint(a, e, T_CHECK_STOP)
1619#define T_quiet_eq_u16(a, e) T_flags_eq_uint(a, e, T_CHECK_QUIET)
1620#define T_step_eq_u16(s, a, e) T_flags_eq_uint(a, e, T_CHECK_STEP(s))
1621#define T_step_assert_eq_u16(s, a, e) \
1622 T_flags_eq_uint(a, e, T_CHECK_STEP(s) | T_CHECK_STOP)
1623
1624#define T_ne_u16(a, e) T_flags_ne_uint(a, e, 0)
1625#define T_assert_ne_u16(a, e) T_flags_ne_uint(a, e, T_CHECK_STOP)
1626#define T_quiet_ne_u16(a, e) T_flags_ne_uint(a, e, T_CHECK_QUIET)
1627#define T_step_ne_u16(s, a, e) T_flags_ne_uint(a, e, T_CHECK_STEP(s))
1628#define T_step_assert_ne_u16(s, a, e) \
1629 T_flags_ne_uint(a, e, T_CHECK_STEP(s) | T_CHECK_STOP)
1630
1631#define T_ge_u16(a, e) T_flags_ge_uint(a, e, 0)
1632#define T_assert_ge_u16(a, e) T_flags_ge_uint(a, e, T_CHECK_STOP)
1633#define T_quiet_ge_u16(a, e) T_flags_ge_uint(a, e, T_CHECK_QUIET)
1634#define T_step_ge_u16(s, a, e) T_flags_ge_uint(a, e, T_CHECK_STEP(s))
1635#define T_step_assert_ge_u16(s, a, e) \
1636 T_flags_ge_uint(a, e, T_CHECK_STEP(s) | T_CHECK_STOP)
1637
1638#define T_gt_u16(a, e) T_flags_gt_uint(a, e, 0)
1639#define T_assert_gt_u16(a, e) T_flags_gt_uint(a, e, T_CHECK_STOP)
1640#define T_quiet_gt_u16(a, e) T_flags_gt_uint(a, e, T_CHECK_QUIET)
1641#define T_step_gt_u16(s, a, e) T_flags_gt_uint(a, e, T_CHECK_STEP(s))
1642#define T_step_assert_gt_u16(s, a, e) \
1643 T_flags_gt_uint(a, e, T_CHECK_STEP(s) | T_CHECK_STOP)
1644
1645#define T_le_u16(a, e) T_flags_le_uint(a, e, 0)
1646#define T_assert_le_u16(a, e) T_flags_le_uint(a, e, T_CHECK_STOP)
1647#define T_quiet_le_u16(a, e) T_flags_le_uint(a, e, T_CHECK_QUIET)
1648#define T_step_le_u16(s, a, e) T_flags_le_uint(a, e, T_CHECK_STEP(s))
1649#define T_step_assert_le_u16(s, a, e) \
1650 T_flags_le_uint(a, e, T_CHECK_STEP(s) | T_CHECK_STOP)
1651
1652#define T_lt_u16(a, e) T_flags_lt_uint(a, e, 0)
1653#define T_assert_lt_u16(a, e) T_flags_lt_uint(a, e, T_CHECK_STOP)
1654#define T_quiet_lt_u16(a, e) T_flags_lt_uint(a, e, T_CHECK_QUIET)
1655#define T_step_lt_u16(s, a, e) T_flags_lt_uint(a, e, T_CHECK_STEP(s))
1656#define T_step_assert_lt_u16(s, a, e) \
1657 T_flags_lt_uint(a, e, T_CHECK_STEP(s) | T_CHECK_STOP)
1658
1671#define T_eq_i32(a, e) T_flags_eq_long(a, e, 0)
1672#define T_assert_eq_i32(a, e) T_flags_eq_long(a, e, T_CHECK_STOP)
1673#define T_quiet_eq_i32(a, e) T_flags_eq_long(a, e, T_CHECK_QUIET)
1674#define T_step_eq_i32(s, a, e) T_flags_eq_long(a, e, T_CHECK_STEP(s))
1675#define T_step_assert_eq_i32(s, a, e) \
1676 T_flags_eq_long(a, e, T_CHECK_STEP(s) | T_CHECK_STOP)
1677
1678#define T_ne_i32(a, e) T_flags_ne_long(a, e, 0)
1679#define T_assert_ne_i32(a, e) T_flags_ne_long(a, e, T_CHECK_STOP)
1680#define T_quiet_ne_i32(a, e) T_flags_ne_long(a, e, T_CHECK_QUIET)
1681#define T_step_ne_i32(s, a, e) T_flags_ne_long(a, e, T_CHECK_STEP(s))
1682#define T_step_assert_ne_i32(s, a, e) \
1683 T_flags_ne_long(a, e, T_CHECK_STEP(s) | T_CHECK_STOP)
1684
1685#define T_ge_i32(a, e) T_flags_ge_long(a, e, 0)
1686#define T_assert_ge_i32(a, e) T_flags_ge_long(a, e, T_CHECK_STOP)
1687#define T_quiet_ge_i32(a, e) T_flags_ge_long(a, e, T_CHECK_QUIET)
1688#define T_step_ge_i32(s, a, e) T_flags_ge_long(a, e, T_CHECK_STEP(s))
1689#define T_step_assert_ge_i32(s, a, e) \
1690 T_flags_ge_long(a, e, T_CHECK_STEP(s) | T_CHECK_STOP)
1691
1692#define T_gt_i32(a, e) T_flags_gt_long(a, e, 0)
1693#define T_assert_gt_i32(a, e) T_flags_gt_long(a, e, T_CHECK_STOP)
1694#define T_quiet_gt_i32(a, e) T_flags_gt_long(a, e, T_CHECK_QUIET)
1695#define T_step_gt_i32(s, a, e) T_flags_gt_long(a, e, T_CHECK_STEP(s))
1696#define T_step_assert_gt_i32(s, a, e) \
1697 T_flags_gt_long(a, e, T_CHECK_STEP(s) | T_CHECK_STOP)
1698
1699#define T_le_i32(a, e) T_flags_le_long(a, e, 0)
1700#define T_assert_le_i32(a, e) T_flags_le_long(a, e, T_CHECK_STOP)
1701#define T_quiet_le_i32(a, e) T_flags_le_long(a, e, T_CHECK_QUIET)
1702#define T_step_le_i32(s, a, e) T_flags_le_long(a, e, T_CHECK_STEP(s))
1703#define T_step_assert_le_i32(s, a, e) \
1704 T_flags_le_long(a, e, T_CHECK_STEP(s) | T_CHECK_STOP)
1705
1706#define T_lt_i32(a, e) T_flags_lt_long(a, e, 0)
1707#define T_assert_lt_i32(a, e) T_flags_lt_long(a, e, T_CHECK_STOP)
1708#define T_quiet_lt_i32(a, e) T_flags_lt_long(a, e, T_CHECK_QUIET)
1709#define T_step_lt_i32(s, a, e) T_flags_lt_long(a, e, T_CHECK_STEP(s))
1710#define T_step_assert_lt_i32(s, a, e) \
1711 T_flags_lt_long(a, e, T_CHECK_STEP(s) | T_CHECK_STOP)
1712
1725#define T_eq_u32(a, e) T_flags_eq_ulong(a, e, 0)
1726#define T_assert_eq_u32(a, e) T_flags_eq_ulong(a, e, T_CHECK_STOP)
1727#define T_quiet_eq_u32(a, e) T_flags_eq_ulong(a, e, T_CHECK_QUIET)
1728#define T_step_eq_u32(s, a, e) T_flags_eq_ulong(a, e, T_CHECK_STEP(s))
1729#define T_step_assert_eq_u32(s, a, e) \
1730 T_flags_eq_ulong(a, e, T_CHECK_STEP(s) | T_CHECK_STOP)
1731
1732#define T_ne_u32(a, e) T_flags_ne_ulong(a, e, 0)
1733#define T_assert_ne_u32(a, e) T_flags_ne_ulong(a, e, T_CHECK_STOP)
1734#define T_quiet_ne_u32(a, e) T_flags_ne_ulong(a, e, T_CHECK_QUIET)
1735#define T_step_ne_u32(s, a, e) T_flags_ne_ulong(a, e, T_CHECK_STEP(s))
1736#define T_step_assert_ne_u32(s, a, e) \
1737 T_flags_ne_ulong(a, e, T_CHECK_STEP(s) | T_CHECK_STOP)
1738
1739#define T_ge_u32(a, e) T_flags_ge_ulong(a, e, 0)
1740#define T_assert_ge_u32(a, e) T_flags_ge_ulong(a, e, T_CHECK_STOP)
1741#define T_quiet_ge_u32(a, e) T_flags_ge_ulong(a, e, T_CHECK_QUIET)
1742#define T_step_ge_u32(s, a, e) T_flags_ge_ulong(a, e, T_CHECK_STEP(s))
1743#define T_step_assert_ge_u32(s, a, e) \
1744 T_flags_ge_ulong(a, e, T_CHECK_STEP(s) | T_CHECK_STOP)
1745
1746#define T_gt_u32(a, e) T_flags_gt_ulong(a, e, 0)
1747#define T_assert_gt_u32(a, e) T_flags_gt_ulong(a, e, T_CHECK_STOP)
1748#define T_quiet_gt_u32(a, e) T_flags_gt_ulong(a, e, T_CHECK_QUIET)
1749#define T_step_gt_u32(s, a, e) T_flags_gt_ulong(a, e, T_CHECK_STEP(s))
1750#define T_step_assert_gt_u32(s, a, e) \
1751 T_flags_gt_ulong(a, e, T_CHECK_STEP(s) | T_CHECK_STOP)
1752
1753#define T_le_u32(a, e) T_flags_le_ulong(a, e, 0)
1754#define T_assert_le_u32(a, e) T_flags_le_ulong(a, e, T_CHECK_STOP)
1755#define T_quiet_le_u32(a, e) T_flags_le_ulong(a, e, T_CHECK_QUIET)
1756#define T_step_le_u32(s, a, e) T_flags_le_ulong(a, e, T_CHECK_STEP(s))
1757#define T_step_assert_le_u32(s, a, e) \
1758 T_flags_le_ulong(a, e, T_CHECK_STEP(s) | T_CHECK_STOP)
1759
1760#define T_lt_u32(a, e) T_flags_lt_ulong(a, e, 0)
1761#define T_assert_lt_u32(a, e) T_flags_lt_ulong(a, e, T_CHECK_STOP)
1762#define T_quiet_lt_u32(a, e) T_flags_lt_ulong(a, e, T_CHECK_QUIET)
1763#define T_step_lt_u32(s, a, e) T_flags_lt_ulong(a, e, T_CHECK_STEP(s))
1764#define T_step_assert_lt_u32(s, a, e) \
1765 T_flags_lt_ulong(a, e, T_CHECK_STEP(s) | T_CHECK_STOP)
1766
1779#define T_eq_i64(a, e) T_flags_eq_ll(a, e, 0)
1780#define T_assert_eq_i64(a, e) T_flags_eq_ll(a, e, T_CHECK_STOP)
1781#define T_quiet_eq_i64(a, e) T_flags_eq_ll(a, e, T_CHECK_QUIET)
1782#define T_step_eq_i64(s, a, e) T_flags_eq_ll(a, e, T_CHECK_STEP(s))
1783#define T_step_assert_eq_i64(s, a, e) \
1784 T_flags_eq_ll(a, e, T_CHECK_STEP(s) | T_CHECK_STOP)
1785
1786#define T_ne_i64(a, e) T_flags_ne_ll(a, e, 0)
1787#define T_assert_ne_i64(a, e) T_flags_ne_ll(a, e, T_CHECK_STOP)
1788#define T_quiet_ne_i64(a, e) T_flags_ne_ll(a, e, T_CHECK_QUIET)
1789#define T_step_ne_i64(s, a, e) T_flags_ne_ll(a, e, T_CHECK_STEP(s))
1790#define T_step_assert_ne_i64(s, a, e) \
1791 T_flags_ne_ll(a, e, T_CHECK_STEP(s) | T_CHECK_STOP)
1792
1793#define T_ge_i64(a, e) T_flags_ge_ll(a, e, 0)
1794#define T_assert_ge_i64(a, e) T_flags_ge_ll(a, e, T_CHECK_STOP)
1795#define T_quiet_ge_i64(a, e) T_flags_ge_ll(a, e, T_CHECK_QUIET)
1796#define T_step_ge_i64(s, a, e) T_flags_ge_ll(a, e, T_CHECK_STEP(s))
1797#define T_step_assert_ge_i64(s, a, e) \
1798 T_flags_ge_ll(a, e, T_CHECK_STEP(s) | T_CHECK_STOP)
1799
1800#define T_gt_i64(a, e) T_flags_gt_ll(a, e, 0)
1801#define T_assert_gt_i64(a, e) T_flags_gt_ll(a, e, T_CHECK_STOP)
1802#define T_quiet_gt_i64(a, e) T_flags_gt_ll(a, e, T_CHECK_QUIET)
1803#define T_step_gt_i64(s, a, e) T_flags_gt_ll(a, e, T_CHECK_STEP(s))
1804#define T_step_assert_gt_i64(s, a, e) \
1805 T_flags_gt_ll(a, e, T_CHECK_STEP(s) | T_CHECK_STOP)
1806
1807#define T_le_i64(a, e) T_flags_le_ll(a, e, 0)
1808#define T_assert_le_i64(a, e) T_flags_le_ll(a, e, T_CHECK_STOP)
1809#define T_quiet_le_i64(a, e) T_flags_le_ll(a, e, T_CHECK_QUIET)
1810#define T_step_le_i64(s, a, e) T_flags_le_ll(a, e, T_CHECK_STEP(s))
1811#define T_step_assert_le_i64(s, a, e) \
1812 T_flags_le_ll(a, e, T_CHECK_STEP(s) | T_CHECK_STOP)
1813
1814#define T_lt_i64(a, e) T_flags_lt_ll(a, e, 0)
1815#define T_assert_lt_i64(a, e) T_flags_lt_ll(a, e, T_CHECK_STOP)
1816#define T_quiet_lt_i64(a, e) T_flags_lt_ll(a, e, T_CHECK_QUIET)
1817#define T_step_lt_i64(s, a, e) T_flags_lt_ll(a, e, T_CHECK_STEP(s))
1818#define T_step_assert_lt_i64(s, a, e) \
1819 T_flags_lt_ll(a, e, T_CHECK_STEP(s) | T_CHECK_STOP)
1820
1833#define T_eq_u64(a, e) T_flags_eq_ull(a, e, 0)
1834#define T_assert_eq_u64(a, e) T_flags_eq_ull(a, e, T_CHECK_STOP)
1835#define T_quiet_eq_u64(a, e) T_flags_eq_ull(a, e, T_CHECK_QUIET)
1836#define T_step_eq_u64(s, a, e) T_flags_eq_ull(a, e, T_CHECK_STEP(s))
1837#define T_step_assert_eq_u64(s, a, e) \
1838 T_flags_eq_ull(a, e, T_CHECK_STEP(s) | T_CHECK_STOP)
1839
1840#define T_ne_u64(a, e) T_flags_ne_ull(a, e, 0)
1841#define T_assert_ne_u64(a, e) T_flags_ne_ull(a, e, T_CHECK_STOP)
1842#define T_quiet_ne_u64(a, e) T_flags_ne_ull(a, e, T_CHECK_QUIET)
1843#define T_step_ne_u64(s, a, e) T_flags_ne_ull(a, e, T_CHECK_STEP(s))
1844#define T_step_assert_ne_u64(s, a, e) \
1845 T_flags_ne_ull(a, e, T_CHECK_STEP(s) | T_CHECK_STOP)
1846
1847#define T_ge_u64(a, e) T_flags_ge_ull(a, e, 0)
1848#define T_assert_ge_u64(a, e) T_flags_ge_ull(a, e, T_CHECK_STOP)
1849#define T_quiet_ge_u64(a, e) T_flags_ge_ull(a, e, T_CHECK_QUIET)
1850#define T_step_ge_u64(s, a, e) T_flags_ge_ull(a, e, T_CHECK_STEP(s))
1851#define T_step_assert_ge_u64(s, a, e) \
1852 T_flags_ge_ull(a, e, T_CHECK_STEP(s) | T_CHECK_STOP)
1853
1854#define T_gt_u64(a, e) T_flags_gt_ull(a, e, 0)
1855#define T_assert_gt_u64(a, e) T_flags_gt_ull(a, e, T_CHECK_STOP)
1856#define T_quiet_gt_u64(a, e) T_flags_gt_ull(a, e, T_CHECK_QUIET)
1857#define T_step_gt_u64(s, a, e) T_flags_gt_ull(a, e, T_CHECK_STEP(s))
1858#define T_step_assert_gt_u64(s, a, e) \
1859 T_flags_gt_ull(a, e, T_CHECK_STEP(s) | T_CHECK_STOP)
1860
1861#define T_le_u64(a, e) T_flags_le_ull(a, e, 0)
1862#define T_assert_le_u64(a, e) T_flags_le_ull(a, e, T_CHECK_STOP)
1863#define T_quiet_le_u64(a, e) T_flags_le_ull(a, e, T_CHECK_QUIET)
1864#define T_step_le_u64(s, a, e) T_flags_le_ull(a, e, T_CHECK_STEP(s))
1865#define T_step_assert_le_u64(s, a, e) \
1866 T_flags_le_ull(a, e, T_CHECK_STEP(s) | T_CHECK_STOP)
1867
1868#define T_lt_u64(a, e) T_flags_lt_ull(a, e, 0)
1869#define T_assert_lt_u64(a, e) T_flags_lt_ull(a, e, T_CHECK_STOP)
1870#define T_quiet_lt_u64(a, e) T_flags_lt_ull(a, e, T_CHECK_QUIET)
1871#define T_step_lt_u64(s, a, e) T_flags_lt_ull(a, e, T_CHECK_STEP(s))
1872#define T_step_assert_lt_u64(s, a, e) \
1873 T_flags_lt_ull(a, e, T_CHECK_STEP(s) | T_CHECK_STOP)
1874
1887#define T_eq_iptr(a, e) T_flags_eq_long(a, e, 0)
1888#define T_assert_eq_iptr(a, e) T_flags_eq_long(a, e, T_CHECK_STOP)
1889#define T_quiet_eq_iptr(a, e) T_flags_eq_long(a, e, T_CHECK_QUIET)
1890#define T_step_eq_iptr(s, a, e) T_flags_eq_long(a, e, T_CHECK_STEP(s))
1891#define T_step_assert_eq_iptr(s, a, e) \
1892 T_flags_eq_long(a, e, T_CHECK_STEP(s) | T_CHECK_STOP)
1893
1894#define T_ne_iptr(a, e) T_flags_ne_long(a, e, 0)
1895#define T_assert_ne_iptr(a, e) T_flags_ne_long(a, e, T_CHECK_STOP)
1896#define T_quiet_ne_iptr(a, e) T_flags_ne_long(a, e, T_CHECK_QUIET)
1897#define T_step_ne_iptr(s, a, e) T_flags_ne_long(a, e, T_CHECK_STEP(s))
1898#define T_step_assert_ne_iptr(s, a, e) \
1899 T_flags_ne_long(a, e, T_CHECK_STEP(s) | T_CHECK_STOP)
1900
1901#define T_ge_iptr(a, e) T_flags_ge_long(a, e, 0)
1902#define T_assert_ge_iptr(a, e) T_flags_ge_long(a, e, T_CHECK_STOP)
1903#define T_quiet_ge_iptr(a, e) T_flags_ge_long(a, e, T_CHECK_QUIET)
1904#define T_step_ge_iptr(s, a, e) T_flags_ge_long(a, e, T_CHECK_STEP(s))
1905#define T_step_assert_ge_iptr(s, a, e) \
1906 T_flags_ge_long(a, e, T_CHECK_STEP(s) | T_CHECK_STOP)
1907
1908#define T_gt_iptr(a, e) T_flags_gt_long(a, e, 0)
1909#define T_assert_gt_iptr(a, e) T_flags_gt_long(a, e, T_CHECK_STOP)
1910#define T_quiet_gt_iptr(a, e) T_flags_gt_long(a, e, T_CHECK_QUIET)
1911#define T_step_gt_iptr(s, a, e) T_flags_gt_long(a, e, T_CHECK_STEP(s))
1912#define T_step_assert_gt_iptr(s, a, e) \
1913 T_flags_gt_long(a, e, T_CHECK_STEP(s) | T_CHECK_STOP)
1914
1915#define T_le_iptr(a, e) T_flags_le_long(a, e, 0)
1916#define T_assert_le_iptr(a, e) T_flags_le_long(a, e, T_CHECK_STOP)
1917#define T_quiet_le_iptr(a, e) T_flags_le_long(a, e, T_CHECK_QUIET)
1918#define T_step_le_iptr(s, a, e) T_flags_le_long(a, e, T_CHECK_STEP(s))
1919#define T_step_assert_le_iptr(s, a, e) \
1920 T_flags_le_long(a, e, T_CHECK_STEP(s) | T_CHECK_STOP)
1921
1922#define T_lt_iptr(a, e) T_flags_lt_long(a, e, 0)
1923#define T_assert_lt_iptr(a, e) T_flags_lt_long(a, e, T_CHECK_STOP)
1924#define T_quiet_lt_iptr(a, e) T_flags_lt_long(a, e, T_CHECK_QUIET)
1925#define T_step_lt_iptr(s, a, e) T_flags_lt_long(a, e, T_CHECK_STEP(s))
1926#define T_step_assert_lt_iptr(s, a, e) \
1927 T_flags_lt_long(a, e, T_CHECK_STEP(s) | T_CHECK_STOP)
1928
1941#define T_eq_uptr(a, e) T_flags_eq_ulong(a, e, 0)
1942#define T_assert_eq_uptr(a, e) T_flags_eq_ulong(a, e, T_CHECK_STOP)
1943#define T_quiet_eq_uptr(a, e) T_flags_eq_ulong(a, e, T_CHECK_QUIET)
1944#define T_step_eq_uptr(s, a, e) T_flags_eq_ulong(a, e, T_CHECK_STEP(s))
1945#define T_step_assert_eq_uptr(s, a, e) \
1946 T_flags_eq_ulong(a, e, T_CHECK_STEP(s) | T_CHECK_STOP)
1947
1948#define T_ne_uptr(a, e) T_flags_ne_ulong(a, e, 0)
1949#define T_assert_ne_uptr(a, e) T_flags_ne_ulong(a, e, T_CHECK_STOP)
1950#define T_quiet_ne_uptr(a, e) T_flags_ne_ulong(a, e, T_CHECK_QUIET)
1951#define T_step_ne_uptr(s, a, e) T_flags_ne_ulong(a, e, T_CHECK_STEP(s))
1952#define T_step_assert_ne_uptr(s, a, e) \
1953 T_flags_ne_ulong(a, e, T_CHECK_STEP(s) | T_CHECK_STOP)
1954
1955#define T_ge_uptr(a, e) T_flags_ge_ulong(a, e, 0)
1956#define T_assert_ge_uptr(a, e) T_flags_ge_ulong(a, e, T_CHECK_STOP)
1957#define T_quiet_ge_uptr(a, e) T_flags_ge_ulong(a, e, T_CHECK_QUIET)
1958#define T_step_ge_uptr(s, a, e) T_flags_ge_ulong(a, e, T_CHECK_STEP(s))
1959#define T_step_assert_ge_uptr(s, a, e) \
1960 T_flags_ge_ulong(a, e, T_CHECK_STEP(s) | T_CHECK_STOP)
1961
1962#define T_gt_uptr(a, e) T_flags_gt_ulong(a, e, 0)
1963#define T_assert_gt_uptr(a, e) T_flags_gt_ulong(a, e, T_CHECK_STOP)
1964#define T_quiet_gt_uptr(a, e) T_flags_gt_ulong(a, e, T_CHECK_QUIET)
1965#define T_step_gt_uptr(s, a, e) T_flags_gt_ulong(a, e, T_CHECK_STEP(s))
1966#define T_step_assert_gt_uptr(s, a, e) \
1967 T_flags_gt_ulong(a, e, T_CHECK_STEP(s) | T_CHECK_STOP)
1968
1969#define T_le_uptr(a, e) T_flags_le_ulong(a, e, 0)
1970#define T_assert_le_uptr(a, e) T_flags_le_ulong(a, e, T_CHECK_STOP)
1971#define T_quiet_le_uptr(a, e) T_flags_le_ulong(a, e, T_CHECK_QUIET)
1972#define T_step_le_uptr(s, a, e) T_flags_le_ulong(a, e, T_CHECK_STEP(s))
1973#define T_step_assert_le_uptr(s, a, e) \
1974 T_flags_le_ulong(a, e, T_CHECK_STEP(s) | T_CHECK_STOP)
1975
1976#define T_lt_uptr(a, e) T_flags_lt_ulong(a, e, 0)
1977#define T_assert_lt_uptr(a, e) T_flags_lt_ulong(a, e, T_CHECK_STOP)
1978#define T_quiet_lt_uptr(a, e) T_flags_lt_ulong(a, e, T_CHECK_QUIET)
1979#define T_step_lt_uptr(s, a, e) T_flags_lt_ulong(a, e, T_CHECK_STEP(s))
1980#define T_step_assert_lt_uptr(s, a, e) \
1981 T_flags_lt_ulong(a, e, T_CHECK_STEP(s) | T_CHECK_STOP)
1982
1995#define T_eq_ssz(a, e) T_flags_eq_long(a, e, 0)
1996#define T_assert_eq_ssz(a, e) T_flags_eq_long(a, e, T_CHECK_STOP)
1997#define T_quiet_eq_ssz(a, e) T_flags_eq_long(a, e, T_CHECK_QUIET)
1998#define T_step_eq_ssz(s, a, e) T_flags_eq_long(a, e, T_CHECK_STEP(s))
1999#define T_step_assert_eq_ssz(s, a, e) \
2000 T_flags_eq_long(a, e, T_CHECK_STEP(s) | T_CHECK_STOP)
2001
2002#define T_ne_ssz(a, e) T_flags_ne_long(a, e, 0)
2003#define T_assert_ne_ssz(a, e) T_flags_ne_long(a, e, T_CHECK_STOP)
2004#define T_quiet_ne_ssz(a, e) T_flags_ne_long(a, e, T_CHECK_QUIET)
2005#define T_step_ne_ssz(s, a, e) T_flags_ne_long(a, e, T_CHECK_STEP(s))
2006#define T_step_assert_ne_ssz(s, a, e) \
2007 T_flags_ne_long(a, e, T_CHECK_STEP(s) | T_CHECK_STOP)
2008
2009#define T_ge_ssz(a, e) T_flags_ge_long(a, e, 0)
2010#define T_assert_ge_ssz(a, e) T_flags_ge_long(a, e, T_CHECK_STOP)
2011#define T_quiet_ge_ssz(a, e) T_flags_ge_long(a, e, T_CHECK_QUIET)
2012#define T_step_ge_ssz(s, a, e) T_flags_ge_long(a, e, T_CHECK_STEP(s))
2013#define T_step_assert_ge_ssz(s, a, e) \
2014 T_flags_ge_long(a, e, T_CHECK_STEP(s) | T_CHECK_STOP)
2015
2016#define T_gt_ssz(a, e) T_flags_gt_long(a, e, 0)
2017#define T_assert_gt_ssz(a, e) T_flags_gt_long(a, e, T_CHECK_STOP)
2018#define T_quiet_gt_ssz(a, e) T_flags_gt_long(a, e, T_CHECK_QUIET)
2019#define T_step_gt_ssz(s, a, e) T_flags_gt_long(a, e, T_CHECK_STEP(s))
2020#define T_step_assert_gt_ssz(s, a, e) \
2021 T_flags_gt_long(a, e, T_CHECK_STEP(s) | T_CHECK_STOP)
2022
2023#define T_le_ssz(a, e) T_flags_le_long(a, e, 0)
2024#define T_assert_le_ssz(a, e) T_flags_le_long(a, e, T_CHECK_STOP)
2025#define T_quiet_le_ssz(a, e) T_flags_le_long(a, e, T_CHECK_QUIET)
2026#define T_step_le_ssz(s, a, e) T_flags_le_long(a, e, T_CHECK_STEP(s))
2027#define T_step_assert_le_ssz(s, a, e) \
2028 T_flags_le_long(a, e, T_CHECK_STEP(s) | T_CHECK_STOP)
2029
2030#define T_lt_ssz(a, e) T_flags_lt_long(a, e, 0)
2031#define T_assert_lt_ssz(a, e) T_flags_lt_long(a, e, T_CHECK_STOP)
2032#define T_quiet_lt_ssz(a, e) T_flags_lt_long(a, e, T_CHECK_QUIET)
2033#define T_step_lt_ssz(s, a, e) T_flags_lt_long(a, e, T_CHECK_STEP(s))
2034#define T_step_assert_lt_ssz(s, a, e) \
2035 T_flags_lt_long(a, e, T_CHECK_STEP(s) | T_CHECK_STOP)
2036
2049#define T_eq_sz(a, e) T_flags_eq_ulong(a, e, 0)
2050#define T_assert_eq_sz(a, e) T_flags_eq_ulong(a, e, T_CHECK_STOP)
2051#define T_quiet_eq_sz(a, e) T_flags_eq_ulong(a, e, T_CHECK_QUIET)
2052#define T_step_eq_sz(s, a, e) T_flags_eq_ulong(a, e, T_CHECK_STEP(s))
2053#define T_step_assert_eq_sz(s, a, e) \
2054 T_flags_eq_ulong(a, e, T_CHECK_STEP(s) | T_CHECK_STOP)
2055
2056#define T_ne_sz(a, e) T_flags_ne_ulong(a, e, 0)
2057#define T_assert_ne_sz(a, e) T_flags_ne_ulong(a, e, T_CHECK_STOP)
2058#define T_quiet_ne_sz(a, e) T_flags_ne_ulong(a, e, T_CHECK_QUIET)
2059#define T_step_ne_sz(s, a, e) T_flags_ne_ulong(a, e, T_CHECK_STEP(s))
2060#define T_step_assert_ne_sz(s, a, e) \
2061 T_flags_ne_ulong(a, e, T_CHECK_STEP(s) | T_CHECK_STOP)
2062
2063#define T_ge_sz(a, e) T_flags_ge_ulong(a, e, 0)
2064#define T_assert_ge_sz(a, e) T_flags_ge_ulong(a, e, T_CHECK_STOP)
2065#define T_quiet_ge_sz(a, e) T_flags_ge_ulong(a, e, T_CHECK_QUIET)
2066#define T_step_ge_sz(s, a, e) T_flags_ge_ulong(a, e, T_CHECK_STEP(s))
2067#define T_step_assert_ge_sz(s, a, e) \
2068 T_flags_ge_ulong(a, e, T_CHECK_STEP(s) | T_CHECK_STOP)
2069
2070#define T_gt_sz(a, e) T_flags_gt_ulong(a, e, 0)
2071#define T_assert_gt_sz(a, e) T_flags_gt_ulong(a, e, T_CHECK_STOP)
2072#define T_quiet_gt_sz(a, e) T_flags_gt_ulong(a, e, T_CHECK_QUIET)
2073#define T_step_gt_sz(s, a, e) T_flags_gt_ulong(a, e, T_CHECK_STEP(s))
2074#define T_step_assert_gt_sz(s, a, e) \
2075 T_flags_gt_ulong(a, e, T_CHECK_STEP(s) | T_CHECK_STOP)
2076
2077#define T_le_sz(a, e) T_flags_le_ulong(a, e, 0)
2078#define T_assert_le_sz(a, e) T_flags_le_ulong(a, e, T_CHECK_STOP)
2079#define T_quiet_le_sz(a, e) T_flags_le_ulong(a, e, T_CHECK_QUIET)
2080#define T_step_le_sz(s, a, e) T_flags_le_ulong(a, e, T_CHECK_STEP(s))
2081#define T_step_assert_le_sz(s, a, e) \
2082 T_flags_le_ulong(a, e, T_CHECK_STEP(s) | T_CHECK_STOP)
2083
2084#define T_lt_sz(a, e) T_flags_lt_ulong(a, e, 0)
2085#define T_assert_lt_sz(a, e) T_flags_lt_ulong(a, e, T_CHECK_STOP)
2086#define T_quiet_lt_sz(a, e) T_flags_lt_ulong(a, e, T_CHECK_QUIET)
2087#define T_step_lt_sz(s, a, e) T_flags_lt_ulong(a, e, T_CHECK_STEP(s))
2088#define T_step_assert_lt_sz(s, a, e) \
2089 T_flags_lt_ulong(a, e, T_CHECK_STEP(s) | T_CHECK_STOP)
2090
2103const char *T_strerror(int);
2104
2105#define T_eno(a, e) T_flags_eno(a, e, 0)
2106#define T_assert_eno(a, e) T_flags_eno(a, e, T_CHECK_STOP)
2107#define T_quiet_eno(a, e) T_flags_eno(a, e, T_CHECK_QUIET)
2108#define T_step_eno(s, a, e) T_flags_eno(a, e, T_CHECK_STEP(s))
2109#define T_step_assert_eno(s, a, e) \
2110 T_flags_eno(a, e, T_CHECK_STEP(s) | T_CHECK_STOP)
2111
2112#define T_eno_success(a) T_flags_eno_success(a, 0)
2113#define T_assert_eno_success(a) T_flags_eno_success(a, T_CHECK_STOP)
2114#define T_quiet_eno_success(a) T_flags_eno_success(a, T_CHECK_QUIET)
2115#define T_step_eno_success(s, a) T_flags_eno_success(a, T_CHECK_STEP(s))
2116#define T_step_assert_eno_success(s, a) \
2117 T_flags_eno_success(a, T_CHECK_STEP(s) | T_CHECK_STOP)
2118
2119#define T_psx_error(a, eno) T_flags_psx_error(a, eno, 0)
2120#define T_assert_psx_error(a, eno) T_flags_psx_error(a, eno, T_CHECK_STOP)
2121#define T_quiet_psx_error(a, eno) T_flags_psx_error(a, eno, T_CHECK_QUIET)
2122#define T_step_psx_error(s, a, eno) T_flags_psx_error(a, eno, T_CHECK_STEP(s))
2123#define T_step_assert_psx_error(s, a, eno) \
2124 T_flags_psx_error(a, eno, T_CHECK_STEP(s) | T_CHECK_STOP)
2125
2126#define T_psx_success(a) T_flags_psx_success(a, 0)
2127#define T_assert_psx_success(a) T_flags_psx_success(a, T_CHECK_STOP)
2128#define T_quiet_psx_success(a) T_flags_psx_success(a, T_CHECK_QUIET)
2129#define T_step_psx_success(s, a) T_flags_psx_success(a, T_CHECK_STEP(s))
2130#define T_step_assert_psx_success(s, a) \
2131 T_flags_psx_success(a, T_CHECK_STEP(s) | T_CHECK_STOP)
2132
2135#ifdef __rtems__
2136void T_check_rsc(const T_check_context *, uint32_t, uint32_t);
2137
2138#define T_flags_rsc(a, e, flags) \
2139{ \
2140 static const T_check_context T_check_instance = { \
2141 T_FILE_NAME, __LINE__, (flags) | T_CHECK_FMT }; \
2142 T_check_rsc(&T_check_instance, a, e); \
2143}
2144
2145void T_check_rsc_success(const T_check_context *, uint32_t);
2146
2147#define T_flags_rsc_success(a, flags) \
2148{ \
2149 static const T_check_context T_check_instance = { \
2150 T_FILE_NAME, __LINE__, (flags) | T_CHECK_FMT }; \
2151 T_check_rsc_success(&T_check_instance, a); \
2152}
2153
2164#define T_rsc(a, e) T_flags_rsc(a, e, 0)
2165#define T_assert_rsc(a, e) T_flags_rsc(a, e, T_CHECK_STOP)
2166#define T_quiet_rsc(a, e) T_flags_rsc(a, e, T_CHECK_QUIET)
2167#define T_step_rsc(s, a, e) T_flags_rsc(a, e, T_CHECK_STEP(s))
2168#define T_step_assert_rsc(s, a, e) \
2169 T_flags_rsc(a, e, T_CHECK_STEP(s) | T_CHECK_STOP)
2170
2171#define T_rsc_success(a) T_flags_rsc_success(a, 0)
2172#define T_assert_rsc_success(a) T_flags_rsc_success(a, T_CHECK_STOP)
2173#define T_quiet_rsc_success(a) T_flags_rsc_success(a, T_CHECK_QUIET)
2174#define T_step_rsc_success(s, a) T_flags_rsc_success(a, T_CHECK_STEP(s))
2175#define T_step_assert_rsc_success(s, a) \
2176 T_flags_rsc_success(a, T_CHECK_STEP(s) | T_CHECK_STOP)
2177
2179#endif /* __rtems__ */
2180
2181void T_plan(unsigned int);
2182
2183extern const T_fixture T_empty_fixture;
2184
2185void T_push_plan(T_fixture_node *, unsigned int);
2186
2187void T_pop_plan(void);
2188
2189void T_check_step(const T_check_context *, unsigned int);
2190
2191#define T_flags_step(a, flags) \
2192{ \
2193 static const T_check_context T_check_instance = { \
2194 T_FILE_NAME, __LINE__, (flags) | T_CHECK_FMT }; \
2195 T_check_step(&T_check_instance, a); \
2196}
2197
2198#define T_step(e) T_flags_step(e, 0)
2199#define T_step_assert(e) T_flags_step(e, T_CHECK_STOP)
2200
2211#ifdef __rtems__
2212typedef CPU_Counter_ticks T_ticks;
2213#else
2214typedef unsigned long T_ticks;
2215#endif
2216
2217typedef uint64_t T_time;
2218
2219/* More than enough for sizeof("18446744073.709552765") */
2220typedef char T_time_string[24];
2221
2222const char *T_time_to_string_ns(T_time, T_time_string);
2223
2224const char *T_time_to_string_us(T_time, T_time_string);
2225
2226const char *T_time_to_string_ms(T_time, T_time_string);
2227
2228const char *T_time_to_string_s(T_time, T_time_string);
2229
2230const char *T_ticks_to_string_ns(T_ticks, T_time_string);
2231
2232const char *T_ticks_to_string_us(T_ticks, T_time_string);
2233
2234const char *T_ticks_to_string_ms(T_ticks, T_time_string);
2235
2236const char *T_ticks_to_string_s(T_ticks, T_time_string);
2237
2238T_time T_ticks_to_time(T_ticks);
2239
2240T_ticks T_time_to_ticks(T_time);
2241
2242T_time T_seconds_and_nanoseconds_to_time(uint32_t, uint32_t);
2243
2244void T_time_to_seconds_and_nanoseconds(T_time, uint32_t *, uint32_t *);
2245
2246T_time T_now(void);
2247
2248#ifdef __rtems__
2249static inline T_ticks
2250T_tick(void)
2251{
2252 return _CPU_Counter_read();
2253}
2254#else
2255T_ticks T_tick(void);
2256#endif
2257
2258T_time T_now_clock(void);
2259
2260T_time T_now_dummy(void);
2261
2262T_time T_now_tick(void);
2263
2264T_time T_case_begin_time(void);
2265
2268void *T_malloc(size_t);
2269
2270void *T_calloc(size_t, size_t);
2271
2272void *T_zalloc(size_t, void (*)(void *));
2273
2274void T_free(void *);
2275
2276void T_register(void);
2277
2278typedef enum {
2279 T_EVENT_RUN_INITIALIZE_EARLY,
2280 T_EVENT_RUN_INITIALIZE_LATE,
2281 T_EVENT_CASE_EARLY,
2282 T_EVENT_CASE_BEGIN,
2283 T_EVENT_CASE_END,
2284 T_EVENT_CASE_LATE,
2285 T_EVENT_CASE_STOP,
2286 T_EVENT_RUN_FINALIZE_EARLY,
2287 T_EVENT_RUN_FINALIZE_LATE
2288} T_event;
2289
2290typedef void (*T_action)(T_event, const char *);
2291
2292typedef void (*T_putchar)(int, void *);
2293
2294typedef struct {
2295 const char *name;
2296 char *buf;
2297 size_t buf_size;
2298 T_putchar putchar;
2299 void *putchar_arg;
2300 T_verbosity verbosity;
2301 T_time (*now)(void);
2302 void *(*allocate)(size_t);
2303 void (*deallocate)(void *);
2304 size_t action_count;
2305 const T_action *actions;
2306} T_config;
2307
2308void T_putchar_default(int, void *);
2309
2310int T_main(const T_config *);
2311
2312void T_make_runner(void);
2313
2314bool T_is_runner(void);
2315
2316void T_run_initialize(const T_config *);
2317
2318void T_run_all(void);
2319
2320void T_run_by_name(const char *);
2321
2322void *T_case_begin(const char *, const T_fixture *);
2323
2324void T_case_end(void);
2325
2326bool T_run_finalize(void);
2327
2328void T_set_putchar(T_putchar, void *, T_putchar *, void **);
2329
2330void *T_fixture_context(void);
2331
2332void T_set_fixture_context(void *);
2333
2334void T_add_remark(T_remark *);
2335
2336void *T_push_fixture(T_fixture_node *, const T_fixture *);
2337
2338void T_pop_fixture(void);
2339
2340T_NO_RETURN void T_stop(void);
2341
2342#define T_unreachable() \
2343 do { T_true(false, "Unreachable"); T_stop(); } while (0)
2344
2364size_t T_get_scope(
2365 const char * const * const *desc,
2366 char *buf,
2367 size_t n,
2368 const size_t *second_indices
2369);
2370
2371size_t T_str_copy(char *, const char *, size_t);
2372
2373#ifdef __rtems__
2374#define T_TEST_CASE_FIXTURE(name, fixture) \
2375void T_case_body_##name(void); \
2376T_case_context T_case_instance_##name = { \
2377 #name, \
2378 T_case_body_##name, \
2379 fixture, \
2380 NULL \
2381}; \
2382static T_case_context * const T_case_item_##name \
2383__attribute__((__section__(".rtemsroset._T.content.0." #name))) \
2384__attribute__((__used__)) = &T_case_instance_##name; \
2385void T_case_body_##name(void)
2386#else /* __rtems__ */
2387#define T_TEST_CASE_FIXTURE(name, fixture) \
2388void T_case_body_##name(void); \
2389T_case_context T_case_instance_##name = { \
2390 #name, \
2391 T_case_body_##name, \
2392 fixture, \
2393 NULL \
2394}; \
2395__attribute__((__constructor__)) static void \
2396T_case_register_##name(void) \
2397{ \
2398 T_case_register(&T_case_instance_##name); \
2399} \
2400void T_case_body_##name(void)
2401#endif /* __rtems__ */
2402
2403#define T_TEST_CASE(name) T_TEST_CASE_FIXTURE(name, NULL)
2404
2405void T_busy(uint_fast32_t);
2406
2407uint_fast32_t T_get_one_clock_tick_busy(void);
2408
2409typedef enum {
2410 T_INTERRUPT_TEST_INITIAL,
2411 T_INTERRUPT_TEST_ACTION,
2412 T_INTERRUPT_TEST_BLOCKED,
2413 T_INTERRUPT_TEST_CONTINUE,
2414 T_INTERRUPT_TEST_DONE,
2415 T_INTERRUPT_TEST_EARLY,
2416 T_INTERRUPT_TEST_INTERRUPT,
2417 T_INTERRUPT_TEST_LATE,
2418 T_INTERRUPT_TEST_TIMEOUT
2419} T_interrupt_test_state;
2420
2421typedef struct {
2422 void (*prepare)(void *);
2423 void (*action)(void *);
2424 T_interrupt_test_state (*interrupt)(void *);
2425 void (*blocked)(void *);
2426 uint32_t max_iteration_count;
2428
2429T_interrupt_test_state T_interrupt_test_change_state(T_interrupt_test_state,
2430 T_interrupt_test_state);
2431
2432T_interrupt_test_state T_interrupt_test_get_state(void);
2433
2434void T_interrupt_test_busy_wait_for_interrupt(void);
2435
2436T_interrupt_test_state T_interrupt_test(const T_interrupt_test_config *config,
2437 void *arg);
2438
2439typedef struct {
2440 uint32_t executing;
2441 uint32_t heir;
2442 uint32_t cpu;
2443 T_time instant;
2445
2446typedef struct {
2447 size_t recorded;
2448 size_t capacity;
2449 uint64_t switches;
2451
2452typedef struct {
2454 T_thread_switch_event events[T_ZERO_LENGTH_ARRAY];
2456
2457typedef struct {
2459 T_thread_switch_event events[2];
2461
2462typedef struct {
2464 T_thread_switch_event events[4];
2466
2467typedef struct {
2469 T_thread_switch_event events[10];
2471
2472T_thread_switch_log *T_thread_switch_record(T_thread_switch_log *);
2473
2474T_thread_switch_log *T_thread_switch_record_2(T_thread_switch_log_2 *);
2475
2476T_thread_switch_log *T_thread_switch_record_4(T_thread_switch_log_4 *);
2477
2478T_thread_switch_log *T_thread_switch_record_10(T_thread_switch_log_10 *);
2479
2480void T_report_hash_sha256(T_event, const char *);
2481
2482void T_report_hash_sha256_update(char c);
2483
2484void T_check_heap(T_event, const char *);
2485
2486#ifdef __rtems__
2487void T_memory_action(T_event, const char *);
2488
2489void *T_memory_allocate(size_t);
2490
2491void T_memory_deallocate(void *);
2492
2493void T_check_task_context(T_event, const char *);
2494
2495void T_check_file_descriptors(T_event, const char *);
2496
2497void T_check_rtems_barriers(T_event, const char *);
2498
2499void T_check_rtems_extensions(T_event, const char *);
2500
2501void T_check_rtems_message_queues(T_event, const char *);
2502
2503void T_check_rtems_partitions(T_event, const char *);
2504
2505void T_check_rtems_periods(T_event, const char *);
2506
2507void T_check_rtems_regions(T_event, const char *);
2508
2509void T_check_rtems_semaphores(T_event, const char *);
2510
2511void T_check_rtems_tasks(T_event, const char *);
2512
2513void T_check_rtems_timers(T_event, const char *);
2514
2515void T_check_posix_keys(T_event, const char *);
2516
2517void T_check_posix_message_queues(T_event, const char *);
2518
2519void T_check_posix_semaphores(T_event, const char *);
2520
2521void T_check_posix_shms(T_event, const char *);
2522
2523void T_check_posix_threads(T_event, const char *);
2524
2525void T_check_posix_timers(T_event, const char *);
2526
2527typedef enum {
2528 T_THREAD_TIMER_NO_THREAD,
2529 T_THREAD_TIMER_SCHEDULED,
2530 T_THREAD_TIMER_PENDING,
2531 T_THREAD_TIMER_INACTIVE
2532} T_thread_timer_state;
2533
2534T_thread_timer_state T_get_thread_timer_state(uint32_t);
2535
2536void *T_seize_objects(rtems_status_code (*)(void *, uint32_t *), void *);
2537
2538void T_surrender_objects(void **, rtems_status_code (*)(uint32_t));
2539#endif /* __rtems__ */
2540
2551typedef struct T_destructor {
2552 struct {
2553 struct T_destructor *le_next;
2554 struct T_destructor **le_prev;
2555 } node;
2556 void (*destroy)(struct T_destructor *);
2557} T_destructor;
2558
2559void T_add_destructor(T_destructor *, void (*)(T_destructor *));
2560
2561void T_remove_destructor(T_destructor *);
2562
2576
2577typedef struct {
2578 size_t sample_count;
2580
2581typedef struct {
2582 const char *name;
2583 int flags;
2584 void (*setup)(void *);
2585 void (*body)(void *);
2586 bool (*teardown)(void *, T_ticks *, uint32_t, uint32_t, unsigned int);
2587 void *arg;
2589
2590#define T_MEASURE_RUNTIME_ALLOW_CLOCK_ISR 0x1
2591
2592#define T_MEASURE_RUNTIME_REPORT_SAMPLES 0x2
2593
2594#define T_MEASURE_RUNTIME_DISABLE_FULL_CACHE 0x10
2595
2596#define T_MEASURE_RUNTIME_DISABLE_HOT_CACHE 0x20
2597
2598#define T_MEASURE_RUNTIME_DISABLE_DIRTY_CACHE 0x40
2599
2600#define T_MEASURE_RUNTIME_DISABLE_MINOR_LOAD 0x80
2601
2602#define T_MEASURE_RUNTIME_DISABLE_MAX_LOAD 0x100
2603
2604T_measure_runtime_context *T_measure_runtime_create(
2605 const T_measure_runtime_config *);
2606
2607void T_measure_runtime(T_measure_runtime_context *,
2609
2612#ifdef __cplusplus
2613}
2614#endif /* __cplusplus */
2615
2616#endif /* THE_T_TEST_FRAMEWORK_H */
rtems_status_code
This enumeration provides status codes for directives of the Classic API.
Definition: status.h:85
CPU_Counter_ticks _CPU_Counter_read(void)
Gets the current CPU counter value.
Definition: system-clocks.c:130
This header file provides the status codes of Classic API directives and support functions.
Definition: test.h:128
Definition: test.h:158
Definition: test.h:152
Definition: test.h:2294
Definition: test.h:2551
Definition: test.h:79
Definition: test.h:71
Definition: test.h:2421
Definition: test.h:2577
Definition: t-test-rtems-measure.c:55
Definition: test.h:2581
Definition: test.h:89
Definition: test.h:2439
Definition: test.h:2446
Definition: test.h:2467
Definition: test.h:2457
Definition: test.h:2462
Definition: test.h:2452
Definition: b1553brm.c:94
size_t T_get_scope(const char *const *const *desc, char *buf, size_t n, const size_t *second_indices)
Gets the scope for nested fixtures.
Definition: t-test.c:1329