Back to home page

LXR

 
 

    


File indexing completed on 2025-05-11 08:24:14

0001 /* SPDX-License-Identifier: BSD-2-Clause */
0002 
0003 /**
0004  * @file
0005  *
0006  * @ingroup RTEMSTestFramework
0007  *
0008  * @brief This header file provides interfaces of the
0009  *   RTEMS Test Framework.
0010  */
0011 
0012 /*
0013  * Copyright (C) 2017, 2021 embedded brains GmbH & Co. KG
0014  *
0015  * Redistribution and use in source and binary forms, with or without
0016  * modification, are permitted provided that the following conditions
0017  * are met:
0018  * 1. Redistributions of source code must retain the above copyright
0019  *    notice, this list of conditions and the following disclaimer.
0020  * 2. Redistributions in binary form must reproduce the above copyright
0021  *    notice, this list of conditions and the following disclaimer in the
0022  *    documentation and/or other materials provided with the distribution.
0023  *
0024  * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
0025  * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
0026  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
0027  * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
0028  * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
0029  * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
0030  * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
0031  * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
0032  * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
0033  * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
0034  * POSSIBILITY OF SUCH DAMAGE.
0035  */
0036 
0037 #ifndef THE_T_TEST_FRAMEWORK_H
0038 #define THE_T_TEST_FRAMEWORK_H
0039 
0040 #include <stdarg.h>
0041 #include <stdbool.h>
0042 #include <stddef.h>
0043 #include <stdint.h>
0044 #include <string.h>
0045 
0046 #ifdef __rtems__
0047 #include <rtems/score/cpu.h>
0048 #include <rtems/rtems/status.h>
0049 #endif
0050 
0051 #ifdef __cplusplus
0052 extern "C" {
0053 #endif /* __cplusplus */
0054 
0055 /**
0056  * @defgroup RTEMSTestFramework RTEMS Test Framework
0057  *
0058  * @ingroup RTEMSAPI
0059  *
0060  * @brief The RTEMS Test Framework helps you to write tests.
0061  *
0062  * @{
0063  */
0064 
0065 typedef enum {
0066     T_QUIET,
0067     T_NORMAL,
0068     T_VERBOSE
0069 } T_verbosity;
0070 
0071 typedef struct T_fixture {
0072     void (*setup)(void *);
0073     void (*stop)(void *);
0074     void (*teardown)(void *);
0075     size_t (*scope)(void *, char *, size_t);
0076     void *initial_context;
0077 } T_fixture;
0078 
0079 typedef struct T_fixture_node {
0080     struct T_fixture_node *next;
0081     struct T_fixture_node *previous;
0082     const T_fixture *fixture;
0083     void *context;
0084     unsigned int next_planned_steps;
0085     unsigned int next_steps;
0086     unsigned int failures;
0087 } T_fixture_node;
0088 
0089 typedef struct T_remark {
0090     struct T_remark *next;
0091     const char *remark;
0092 } T_remark;
0093 
0094 #define T_ARRAY_SIZE(array) (sizeof(array) / sizeof((array)[0]))
0095 
0096 /*
0097  * The __FILE__ includes the full file path from the command line.  Enable the
0098  * build system to give a sorter file name via a command line define.
0099  */
0100 #ifndef T_FILE_NAME
0101 #define T_FILE_NAME __FILE__
0102 #endif
0103 
0104 #if defined(__GNUC__) || __STDC_VERSION__ >= 199409L
0105 #define T_ZERO_LENGTH_ARRAY
0106 #else
0107 #define T_ZERO_LENGTH_ARRAY 1
0108 #endif
0109 
0110 /** @} */
0111 
0112 /**
0113  * @defgroup RTEMSTestFrameworkImpl RTEMS Test Framework Implementation
0114  *
0115  * @ingroup RTEMSImpl
0116  *
0117  * @brief Implementation details.
0118  *
0119  * @{
0120  */
0121 
0122 #ifdef __cplusplus
0123 #define T_NO_RETURN [[ noreturn ]]
0124 #else
0125 #define T_NO_RETURN _Noreturn
0126 #endif
0127 
0128 typedef struct T_case_context {
0129     const char *name;
0130     void (*body)(void);
0131     const T_fixture *fixture;
0132     const struct T_case_context *next;
0133 } T_case_context;
0134 
0135 void T_case_register(T_case_context *);
0136 
0137 #define T_CHECK_STOP 1U
0138 
0139 #define T_CHECK_QUIET 2U
0140 
0141 /* If you change this value, you have to adjust T_VA_ARGS_KIND() as well */
0142 #define T_CHECK_FMT 4U
0143 
0144 #define T_CHECK_STEP_FLAG 8U
0145 
0146 #define T_CHECK_STEP_TO_FLAGS(step) ((unsigned int)(step) << 8)
0147 
0148 #define T_CHECK_STEP_FROM_FLAGS(flags) ((flags) >> 8)
0149 
0150 #define T_CHECK_STEP(step) (T_CHECK_STEP_TO_FLAGS(step) | T_CHECK_STEP_FLAG)
0151 
0152 typedef struct {
0153     const char *file;
0154     int line;
0155     unsigned int flags;
0156 } T_check_context;
0157 
0158 typedef struct {
0159     T_check_context base;
0160     const char *msg;
0161 } T_check_context_msg;
0162 
0163 #define T_VA_ARGS_FIRST(...) T_VA_ARGS_FIRST_SELECT(__VA_ARGS__, throw_away)
0164 #define T_VA_ARGS_FIRST_SELECT(first, ...) first
0165 
0166 /*
0167  * The T_VA_ARGS_MORE() supports up to nine arguments.  It expands to nothing
0168  * if only one argument is given.  It expands to a comma and the second and
0169  * following arguments if at least two arguments are present.  The 4U shall
0170  * correspond to T_CHECK_FMT.
0171  */
0172 #define T_VA_ARGS_MORE(...) \
0173     T_VA_ARGS_XEXPAND(T_VA_ARGS_KIND(__VA_ARGS__), __VA_ARGS__)
0174 #define T_VA_ARGS_XEXPAND(kind, ...) T_VA_ARGS_EXPAND(kind, __VA_ARGS__)
0175 #define T_VA_ARGS_EXPAND(kind, ...) T_VA_ARGS_EXPAND_##kind(__VA_ARGS__)
0176 #define T_VA_ARGS_EXPAND_0U(first)
0177 #define T_VA_ARGS_EXPAND_4U(first, ...) , __VA_ARGS__
0178 #define T_VA_ARGS_KIND(...) \
0179     T_VA_ARGS_SELECT(__VA_ARGS__, \
0180     4U, 4U, 4U, 4U, 4U, 4U, 4U, 4U, 0U, throw_away)
0181 #define T_VA_ARGS_SELECT(a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, ...) a10
0182 
0183 void T_check(const T_check_context *, bool, ...);
0184 
0185 extern const T_check_context T_special;
0186 
0187 #define T_flags_true(flags, ...)                    \
0188 {                                   \
0189     static const T_check_context T_check_instance = {       \
0190         T_FILE_NAME, __LINE__,                  \
0191         (flags) | T_VA_ARGS_KIND(__VA_ARGS__) };            \
0192     T_check(&T_check_instance,                  \
0193         T_VA_ARGS_FIRST(__VA_ARGS__) T_VA_ARGS_MORE(__VA_ARGS__));  \
0194 }
0195 
0196 #define T_flags_eq(flags, a, ...) \
0197     T_flags_true(flags, \
0198     (a) == (T_VA_ARGS_FIRST(__VA_ARGS__)) T_VA_ARGS_MORE(__VA_ARGS__))
0199 
0200 #define T_flags_ne(flags, a, ...) \
0201     T_flags_true(flags, \
0202     (a) != (T_VA_ARGS_FIRST(__VA_ARGS__)) T_VA_ARGS_MORE(__VA_ARGS__))
0203 
0204 void T_check_eq_ptr(const T_check_context_msg *, uintptr_t, uintptr_t);
0205 
0206 #define T_flags_eq_ptr(a, e, flags, sa, se)             \
0207 {                                   \
0208     static const T_check_context_msg T_check_instance = {       \
0209         { T_FILE_NAME, __LINE__, (flags) | T_CHECK_FMT },       \
0210         sa " == " se };                     \
0211     T_check_eq_ptr(&T_check_instance, (uintptr_t)a, (uintptr_t)e);  \
0212 }
0213 
0214 void T_check_ne_ptr(const T_check_context_msg *, uintptr_t, uintptr_t);
0215 
0216 #define T_flags_ne_ptr(a, e, flags, sa, se)             \
0217 {                                   \
0218     static const T_check_context_msg T_check_instance = {       \
0219         { T_FILE_NAME, __LINE__, (flags) | T_CHECK_FMT },       \
0220         sa " != " se };                     \
0221     T_check_ne_ptr(&T_check_instance, (uintptr_t)a, (uintptr_t)e);  \
0222 }
0223 
0224 void T_check_null(const T_check_context_msg *, uintptr_t);
0225 
0226 #define T_flags_null(a, flags, sa)                  \
0227 {                                   \
0228     static const T_check_context_msg T_check_instance = {       \
0229         { T_FILE_NAME, __LINE__, (flags) | T_CHECK_FMT }, sa }; \
0230     T_check_null(&T_check_instance, (uintptr_t)a);          \
0231 }
0232 
0233 void T_check_not_null(const T_check_context_msg *, uintptr_t);
0234 
0235 #define T_flags_not_null(a, flags, sa)                  \
0236 {                                   \
0237     static const T_check_context_msg T_check_instance = {       \
0238         { T_FILE_NAME, __LINE__, (flags) | T_CHECK_FMT }, sa }; \
0239     T_check_not_null(&T_check_instance, (uintptr_t)a);      \
0240 }
0241 
0242 void T_check_eq_mem(const T_check_context_msg *, const void *, const void *,
0243     size_t);
0244 
0245 #define T_flags_eq_mem(a, e, n, flags, sa, se, sn)          \
0246 {                                   \
0247     static const T_check_context_msg T_check_instance = {       \
0248         { T_FILE_NAME, __LINE__, (flags) | T_CHECK_FMT },       \
0249         "memcmp(" sa ", " se ", " sn ") == 0" };            \
0250     T_check_eq_mem(&T_check_instance, a, e, n);         \
0251 }
0252 
0253 void T_check_ne_mem(const T_check_context_msg *, const void *, const void *,
0254     size_t);
0255 
0256 #define T_flags_ne_mem(a, e, n, flags, sa, se, sn)          \
0257 {                                   \
0258     static const T_check_context_msg T_check_instance = {       \
0259         { T_FILE_NAME, __LINE__, (flags) | T_CHECK_FMT },       \
0260         "memcmp(" sa ", " se ", " sn ") != 0" };            \
0261     T_check_ne_mem(&T_check_instance, a, e, n);         \
0262 }
0263 
0264 void T_check_eq_str(const T_check_context *, const char *, const char *);
0265 
0266 #define T_flags_eq_str(a, e, flags)                 \
0267 {                                   \
0268     static const T_check_context T_check_instance = {       \
0269         T_FILE_NAME, __LINE__, (flags) | T_CHECK_FMT };     \
0270     T_check_eq_str(&T_check_instance, a, e);            \
0271 }
0272 
0273 void T_check_ne_str(const T_check_context *, const char *, const char *);
0274 
0275 #define T_flags_ne_str(a, e, flags)                 \
0276 {                                   \
0277     static const T_check_context T_check_instance = {       \
0278         T_FILE_NAME, __LINE__, (flags) | T_CHECK_FMT };     \
0279     T_check_ne_str(&T_check_instance, a, e);            \
0280 }
0281 
0282 void T_check_eq_nstr(const T_check_context *, const char *, const char *,
0283     size_t);
0284 
0285 #define T_flags_eq_nstr(a, e, n, flags)                 \
0286 {                                   \
0287     static const T_check_context T_check_instance = {       \
0288         T_FILE_NAME, __LINE__, (flags) | T_CHECK_FMT };     \
0289     T_check_eq_nstr(&T_check_instance, a, e, n);            \
0290 }
0291 
0292 void T_check_ne_nstr(const T_check_context *, const char *, const char *,
0293     size_t);
0294 
0295 #define T_flags_ne_nstr(a, e, n, flags)                 \
0296 {                                   \
0297     static const T_check_context T_check_instance = {       \
0298         T_FILE_NAME, __LINE__, (flags) | T_CHECK_FMT };     \
0299     T_check_ne_nstr(&T_check_instance, a, e, n);            \
0300 }
0301 
0302 void T_check_eq_char(const T_check_context *, char, char);
0303 
0304 #define T_flags_eq_char(a, e, flags)                    \
0305 {                                   \
0306     static const T_check_context T_check_instance = {       \
0307         T_FILE_NAME, __LINE__, (flags) | T_CHECK_FMT };     \
0308     T_check_eq_char(&T_check_instance, a, e);           \
0309 }
0310 
0311 void T_check_ne_char(const T_check_context *, char, char);
0312 
0313 #define T_flags_ne_char(a, e, flags)                    \
0314 {                                   \
0315     static const T_check_context T_check_instance = {       \
0316         T_FILE_NAME, __LINE__, (flags) | T_CHECK_FMT };     \
0317     T_check_ne_char(&T_check_instance, a, e);           \
0318 }
0319 
0320 void T_check_eq_int(const T_check_context *, int, int);
0321 
0322 #define T_flags_eq_int(a, e, flags)                 \
0323 {                                   \
0324     static const T_check_context T_check_instance = {       \
0325         T_FILE_NAME, __LINE__, (flags) | T_CHECK_FMT };     \
0326     T_check_eq_int(&T_check_instance, a, e);            \
0327 }
0328 
0329 void T_check_ne_int(const T_check_context *, int, int);
0330 
0331 #define T_flags_ne_int(a, e, flags)                 \
0332 {                                   \
0333     static const T_check_context T_check_instance = {       \
0334         T_FILE_NAME, __LINE__, (flags) | T_CHECK_FMT };     \
0335     T_check_ne_int(&T_check_instance, a, e);            \
0336 }
0337 
0338 void T_check_ge_int(const T_check_context *, int, int);
0339 
0340 #define T_flags_ge_int(a, e, flags)                 \
0341 {                                   \
0342     static const T_check_context T_check_instance = {       \
0343         T_FILE_NAME, __LINE__, (flags) | T_CHECK_FMT };     \
0344     T_check_ge_int(&T_check_instance, a, e);            \
0345 }
0346 
0347 void T_check_gt_int(const T_check_context *, int, int);
0348 
0349 #define T_flags_gt_int(a, e, flags)                 \
0350 {                                   \
0351     static const T_check_context T_check_instance = {       \
0352         T_FILE_NAME, __LINE__, (flags) | T_CHECK_FMT };     \
0353     T_check_gt_int(&T_check_instance, a, e);            \
0354 }
0355 
0356 void T_check_le_int(const T_check_context *, int, int);
0357 
0358 #define T_flags_le_int(a, e, flags)                 \
0359 {                                   \
0360     static const T_check_context T_check_instance = {       \
0361         T_FILE_NAME, __LINE__, (flags) | T_CHECK_FMT };     \
0362     T_check_le_int(&T_check_instance, a, e);            \
0363 }
0364 
0365 void T_check_lt_int(const T_check_context *, int, int);
0366 
0367 #define T_flags_lt_int(a, e, flags)                 \
0368 {                                   \
0369     static const T_check_context T_check_instance = {       \
0370         T_FILE_NAME, __LINE__, (flags) | T_CHECK_FMT };     \
0371     T_check_lt_int(&T_check_instance, a, e);            \
0372 }
0373 
0374 void T_check_eq_uint(const T_check_context *, unsigned int, unsigned int);
0375 
0376 #define T_flags_eq_uint(a, e, flags)                    \
0377 {                                   \
0378     static const T_check_context T_check_instance = {       \
0379         T_FILE_NAME, __LINE__, (flags) | T_CHECK_FMT };     \
0380     T_check_eq_uint(&T_check_instance, a, e);           \
0381 }
0382 
0383 void T_check_ne_uint(const T_check_context *, unsigned int, unsigned int);
0384 
0385 #define T_flags_ne_uint(a, e, flags)                    \
0386 {                                   \
0387     static const T_check_context T_check_instance = {       \
0388         T_FILE_NAME, __LINE__, (flags) | T_CHECK_FMT };     \
0389     T_check_ne_uint(&T_check_instance, a, e);           \
0390 }
0391 
0392 void T_check_ge_uint(const T_check_context *, unsigned int, unsigned int);
0393 
0394 #define T_flags_ge_uint(a, e, flags)                    \
0395 {                                   \
0396     static const T_check_context T_check_instance = {       \
0397         T_FILE_NAME, __LINE__, (flags) | T_CHECK_FMT };     \
0398     T_check_ge_uint(&T_check_instance, a, e);           \
0399 }
0400 
0401 void T_check_gt_uint(const T_check_context *, unsigned int, unsigned int);
0402 
0403 #define T_flags_gt_uint(a, e, flags)                    \
0404 {                                   \
0405     static const T_check_context T_check_instance = {       \
0406         T_FILE_NAME, __LINE__, (flags) | T_CHECK_FMT };     \
0407     T_check_gt_uint(&T_check_instance, a, e);           \
0408 }
0409 
0410 void T_check_le_uint(const T_check_context *, unsigned int, unsigned int);
0411 
0412 #define T_flags_le_uint(a, e, flags)                    \
0413 {                                   \
0414     static const T_check_context T_check_instance = {       \
0415         T_FILE_NAME, __LINE__, (flags) | T_CHECK_FMT };     \
0416     T_check_le_uint(&T_check_instance, a, e);           \
0417 }
0418 
0419 void T_check_lt_uint(const T_check_context *, unsigned int, unsigned int);
0420 
0421 #define T_flags_lt_uint(a, e, flags)                    \
0422 {                                   \
0423     static const T_check_context T_check_instance = {       \
0424         T_FILE_NAME, __LINE__, (flags) | T_CHECK_FMT };     \
0425     T_check_lt_uint(&T_check_instance, a, e);           \
0426 }
0427 
0428 void T_check_eq_long(const T_check_context *, long, long);
0429 
0430 #define T_flags_eq_long(a, e, flags)                    \
0431 {                                   \
0432     static const T_check_context T_check_instance = {       \
0433         T_FILE_NAME, __LINE__, (flags) | T_CHECK_FMT };     \
0434     T_check_eq_long(&T_check_instance, a, e);           \
0435 }
0436 
0437 void T_check_ne_long(const T_check_context *, long, long);
0438 
0439 #define T_flags_ne_long(a, e, flags)                    \
0440 {                                   \
0441     static const T_check_context T_check_instance = {       \
0442         T_FILE_NAME, __LINE__, (flags) | T_CHECK_FMT };     \
0443     T_check_ne_long(&T_check_instance, a, e);           \
0444 }
0445 
0446 void T_check_ge_long(const T_check_context *, long, long);
0447 
0448 #define T_flags_ge_long(a, e, flags)                    \
0449 {                                   \
0450     static const T_check_context T_check_instance = {       \
0451         T_FILE_NAME, __LINE__, (flags) | T_CHECK_FMT };     \
0452     T_check_ge_long(&T_check_instance, a, e);           \
0453 }
0454 
0455 void T_check_gt_long(const T_check_context *, long, long);
0456 
0457 #define T_flags_gt_long(a, e, flags)                    \
0458 {                                   \
0459     static const T_check_context T_check_instance = {       \
0460         T_FILE_NAME, __LINE__, (flags) | T_CHECK_FMT };     \
0461     T_check_gt_long(&T_check_instance, a, e);           \
0462 }
0463 
0464 void T_check_le_long(const T_check_context *, long, long);
0465 
0466 #define T_flags_le_long(a, e, flags)                    \
0467 {                                   \
0468     static const T_check_context T_check_instance = {       \
0469         T_FILE_NAME, __LINE__, (flags) | T_CHECK_FMT };     \
0470     T_check_le_long(&T_check_instance, a, e);           \
0471 }
0472 
0473 void T_check_lt_long(const T_check_context *, long, long);
0474 
0475 #define T_flags_lt_long(a, e, flags)                    \
0476 {                                   \
0477     static const T_check_context T_check_instance = {       \
0478         T_FILE_NAME, __LINE__, (flags) | T_CHECK_FMT };     \
0479     T_check_lt_long(&T_check_instance, a, e);           \
0480 }
0481 
0482 void T_check_eq_ulong(const T_check_context *, unsigned long, unsigned long);
0483 
0484 #define T_flags_eq_ulong(a, e, flags)                   \
0485 {                                   \
0486     static const T_check_context T_check_instance = {       \
0487         T_FILE_NAME, __LINE__, (flags) | T_CHECK_FMT };     \
0488     T_check_eq_ulong(&T_check_instance, a, e);          \
0489 }
0490 
0491 void T_check_ne_ulong(const T_check_context *, unsigned long, unsigned long);
0492 
0493 #define T_flags_ne_ulong(a, e, flags)                   \
0494 {                                   \
0495     static const T_check_context T_check_instance = {       \
0496         T_FILE_NAME, __LINE__, (flags) | T_CHECK_FMT };     \
0497     T_check_ne_ulong(&T_check_instance, a, e);          \
0498 }
0499 
0500 void T_check_ge_ulong(const T_check_context *, unsigned long, unsigned long);
0501 
0502 #define T_flags_ge_ulong(a, e, flags)                   \
0503 {                                   \
0504     static const T_check_context T_check_instance = {       \
0505         T_FILE_NAME, __LINE__, (flags) | T_CHECK_FMT };     \
0506     T_check_ge_ulong(&T_check_instance, a, e);          \
0507 }
0508 
0509 void T_check_gt_ulong(const T_check_context *, unsigned long, unsigned long);
0510 
0511 #define T_flags_gt_ulong(a, e, flags)                   \
0512 {                                   \
0513     static const T_check_context T_check_instance = {       \
0514         T_FILE_NAME, __LINE__, (flags) | T_CHECK_FMT };     \
0515     T_check_gt_ulong(&T_check_instance, a, e);          \
0516 }
0517 
0518 void T_check_le_ulong(const T_check_context *, unsigned long, unsigned long);
0519 
0520 #define T_flags_le_ulong(a, e, flags)                   \
0521 {                                   \
0522     static const T_check_context T_check_instance = {       \
0523         T_FILE_NAME, __LINE__, (flags) | T_CHECK_FMT };     \
0524     T_check_le_ulong(&T_check_instance, a, e);          \
0525 }
0526 
0527 void T_check_lt_ulong(const T_check_context *, unsigned long, unsigned long);
0528 
0529 #define T_flags_lt_ulong(a, e, flags)                   \
0530 {                                   \
0531     static const T_check_context T_check_instance = {       \
0532         T_FILE_NAME, __LINE__, (flags) | T_CHECK_FMT };     \
0533     T_check_lt_ulong(&T_check_instance, a, e);          \
0534 }
0535 
0536 void T_check_eq_ll(const T_check_context *, long long, long long);
0537 
0538 #define T_flags_eq_ll(a, e, flags)                  \
0539 {                                   \
0540     static const T_check_context T_check_instance = {       \
0541         T_FILE_NAME, __LINE__, (flags) | T_CHECK_FMT };     \
0542     T_check_eq_ll(&T_check_instance, a, e);             \
0543 }
0544 
0545 void T_check_ne_ll(const T_check_context *, long long, long long);
0546 
0547 #define T_flags_ne_ll(a, e, flags)                  \
0548 {                                   \
0549     static const T_check_context T_check_instance = {       \
0550         T_FILE_NAME, __LINE__, (flags) | T_CHECK_FMT };     \
0551     T_check_ne_ll(&T_check_instance, a, e);             \
0552 }
0553 
0554 void T_check_ge_ll(const T_check_context *, long long, long long);
0555 
0556 #define T_flags_ge_ll(a, e, flags)                  \
0557 {                                   \
0558     static const T_check_context T_check_instance = {       \
0559         T_FILE_NAME, __LINE__, (flags) | T_CHECK_FMT };     \
0560     T_check_ge_ll(&T_check_instance, a, e);             \
0561 }
0562 
0563 void T_check_gt_ll(const T_check_context *, long long, long long);
0564 
0565 #define T_flags_gt_ll(a, e, flags)                  \
0566 {                                   \
0567     static const T_check_context T_check_instance = {       \
0568         T_FILE_NAME, __LINE__, (flags) | T_CHECK_FMT };     \
0569     T_check_gt_ll(&T_check_instance, a, e);             \
0570 }
0571 
0572 void T_check_le_ll(const T_check_context *, long long, long long);
0573 
0574 #define T_flags_le_ll(a, e, flags)                  \
0575 {                                   \
0576     static const T_check_context T_check_instance = {       \
0577         T_FILE_NAME, __LINE__, (flags) | T_CHECK_FMT };     \
0578     T_check_le_ll(&T_check_instance, a, e);             \
0579 }
0580 
0581 void T_check_lt_ll(const T_check_context *, long long, long long);
0582 
0583 #define T_flags_lt_ll(a, e, flags)                  \
0584 {                                   \
0585     static const T_check_context T_check_instance = {       \
0586         T_FILE_NAME, __LINE__, (flags) | T_CHECK_FMT };     \
0587     T_check_lt_ll(&T_check_instance, a, e);             \
0588 }
0589 
0590 void T_check_eq_ull(const T_check_context *, unsigned long long,
0591     unsigned long long);
0592 
0593 #define T_flags_eq_ull(a, e, flags)                 \
0594 {                                   \
0595     static const T_check_context T_check_instance = {       \
0596         T_FILE_NAME, __LINE__, (flags) | T_CHECK_FMT };     \
0597     T_check_eq_ull(&T_check_instance, a, e);            \
0598 }
0599 
0600 void T_check_ne_ull(const T_check_context *, unsigned long long,
0601     unsigned long long);
0602 
0603 #define T_flags_ne_ull(a, e, flags)                 \
0604 {                                   \
0605     static const T_check_context T_check_instance = {       \
0606         T_FILE_NAME, __LINE__, (flags) | T_CHECK_FMT };     \
0607     T_check_ne_ull(&T_check_instance, a, e);            \
0608 }
0609 
0610 void T_check_ge_ull(const T_check_context *, unsigned long long,
0611     unsigned long long);
0612 
0613 #define T_flags_ge_ull(a, e, flags)                 \
0614 {                                   \
0615     static const T_check_context T_check_instance = {       \
0616         T_FILE_NAME, __LINE__, (flags) | T_CHECK_FMT };     \
0617     T_check_ge_ull(&T_check_instance, a, e);            \
0618 }
0619 
0620 void T_check_gt_ull(const T_check_context *, unsigned long long,
0621     unsigned long long);
0622 
0623 #define T_flags_gt_ull(a, e, flags)                 \
0624 {                                   \
0625     static const T_check_context T_check_instance = {       \
0626         T_FILE_NAME, __LINE__, (flags) | T_CHECK_FMT };     \
0627     T_check_gt_ull(&T_check_instance, a, e);            \
0628 }
0629 
0630 void T_check_le_ull(const T_check_context *, unsigned long long,
0631     unsigned long long);
0632 
0633 #define T_flags_le_ull(a, e, flags)                 \
0634 {                                   \
0635     static const T_check_context T_check_instance = {       \
0636         T_FILE_NAME, __LINE__, (flags) | T_CHECK_FMT };     \
0637     T_check_le_ull(&T_check_instance, a, e);            \
0638 }
0639 
0640 void T_check_lt_ull(const T_check_context *, unsigned long long,
0641     unsigned long long);
0642 
0643 #define T_flags_lt_ull(a, e, flags)                 \
0644 {                                   \
0645     static const T_check_context T_check_instance = {       \
0646         T_FILE_NAME, __LINE__, (flags) | T_CHECK_FMT };     \
0647     T_check_lt_ull(&T_check_instance, a, e);            \
0648 }
0649 
0650 void T_check_eno(const T_check_context *, int, int);
0651 
0652 #define T_flags_eno(a, e, flags)                    \
0653 {                                   \
0654     static const T_check_context T_check_instance = {       \
0655         T_FILE_NAME, __LINE__, (flags) | T_CHECK_FMT };     \
0656     T_check_eno(&T_check_instance, a, e);               \
0657 }
0658 
0659 void T_check_eno_success(const T_check_context *, int);
0660 
0661 #define T_flags_eno_success(a, flags)                   \
0662 {                                   \
0663     static const T_check_context T_check_instance = {       \
0664         T_FILE_NAME, __LINE__, (flags) | T_CHECK_FMT };     \
0665     T_check_eno_success(&T_check_instance, a);          \
0666 }
0667 
0668 void T_check_psx_error(const T_check_context *, int, int);
0669 
0670 #define T_flags_psx_error(a, eno, flags)                \
0671 {                                   \
0672     static const T_check_context T_check_instance = {       \
0673         T_FILE_NAME, __LINE__, (flags) | T_CHECK_FMT };     \
0674     T_check_psx_error(&T_check_instance, a, eno);           \
0675 }
0676 
0677 void T_check_psx_success(const T_check_context *, int);
0678 
0679 #define T_flags_psx_success(a, flags)                   \
0680 {                                   \
0681     static const T_check_context T_check_instance = {       \
0682         T_FILE_NAME, __LINE__, (flags) | T_CHECK_FMT };     \
0683     T_check_psx_success(&T_check_instance, a);          \
0684 }
0685 
0686 /** @} */
0687 
0688 int T_printf(char const *, ...);
0689 
0690 int T_vprintf(char const *, va_list);
0691 
0692 int T_puts(const char *, size_t);
0693 
0694 int T_snprintf(char *, size_t, const char *, ...);
0695 
0696 void T_log(T_verbosity, char const *, ...);
0697 
0698 const char *T_case_name(void);
0699 
0700 T_verbosity T_set_verbosity(T_verbosity);
0701 
0702 /**
0703  * @defgroup RTEMSTestFrameworkChecksBool Boolean Checks
0704  *
0705  * @ingroup RTEMSTestFramework
0706  *
0707  * @brief Checks for boolean expressions.
0708  *
0709  * @{
0710  */
0711 
0712 #define T_true(...) T_flags_true(0, __VA_ARGS__)
0713 #define T_assert_true(...) T_flags_true(T_CHECK_STOP, __VA_ARGS__)
0714 #define T_quiet_true(...) T_flags_true(T_CHECK_QUIET, __VA_ARGS__)
0715 #define T_step_true(s, ...) T_flags_true(T_CHECK_STEP(s), __VA_ARGS__)
0716 #define T_step_assert_true(s, ...) \
0717     T_flags_true(T_CHECK_STEP(s) | T_CHECK_STOP, __VA_ARGS__)
0718 
0719 #define T_false(...) \
0720     T_flags_true(0, \
0721     !(T_VA_ARGS_FIRST(__VA_ARGS__)) T_VA_ARGS_MORE(__VA_ARGS__))
0722 #define T_assert_false(...) \
0723     T_flags_true(T_CHECK_STOP, \
0724     !(T_VA_ARGS_FIRST(__VA_ARGS__)) T_VA_ARGS_MORE(__VA_ARGS__))
0725 #define T_quiet_false(...) \
0726     T_flags_true(T_CHECK_QUIET, \
0727     !(T_VA_ARGS_FIRST(__VA_ARGS__)) T_VA_ARGS_MORE(__VA_ARGS__))
0728 #define T_step_false(s, ...) \
0729     T_flags_true(T_CHECK_STEP(s), \
0730     !(T_VA_ARGS_FIRST(__VA_ARGS__)) T_VA_ARGS_MORE(__VA_ARGS__))
0731 #define T_step_assert_false(s, ...) \
0732     T_flags_true(T_CHECK_STEP(s) | T_CHECK_STOP, \
0733     !(T_VA_ARGS_FIRST(__VA_ARGS__)) T_VA_ARGS_MORE(__VA_ARGS__))
0734 
0735 /** @} */
0736 
0737 /**
0738  * @defgroup RTEMSTestFrameworkChecksGeneric Generic Checks
0739  *
0740  * @ingroup RTEMSTestFramework
0741  *
0742  * @brief Checks for data types with an equality or inequality operator.
0743  *
0744  * @{
0745  */
0746 
0747 #define T_eq(a, ...) T_flags_eq(0, a, __VA_ARGS__)
0748 #define T_assert_eq(a, ...) T_flags_eq(T_CHECK_STOP, a, __VA_ARGS__)
0749 #define T_quiet_eq(a, ...) T_flags_eq(T_CHECK_QUIET, a, __VA_ARGS__)
0750 #define T_step_eq(s, a, ...) T_flags_eq(T_CHECK_STEP(s), a, __VA_ARGS__)
0751 #define T_step_assert_eq(s, a, ...) \
0752     T_flags_eq(T_CHECK_STEP(s) | T_CHECK_STOP, a, __VA_ARGS__)
0753 
0754 #define T_ne(a, ...) T_flags_ne(0, a, __VA_ARGS__)
0755 #define T_assert_ne(a, ...) T_flags_ne(T_CHECK_STOP, a, __VA_ARGS__)
0756 #define T_quiet_ne(a, ...) T_flags_ne(T_CHECK_QUIET, a, __VA_ARGS__)
0757 #define T_step_ne(s, a, ...) T_flags_ne(T_CHECK_STEP(s), a, __VA_ARGS__)
0758 #define T_step_assert_ne(s, a, ...) \
0759     T_flags_ne(T_CHECK_STEP(s) | T_CHECK_STOP, a, __VA_ARGS__)
0760 
0761 /** @} */
0762 
0763 /**
0764  * @defgroup RTEMSTestFrameworkChecksPointer Pointer Checks
0765  *
0766  * @ingroup RTEMSTestFramework
0767  *
0768  * @brief Checks for pointers.
0769  *
0770  * @{
0771  */
0772 
0773 #define T_eq_ptr(a, e) T_flags_eq_ptr(a, e, 0, #a, #e)
0774 #define T_assert_eq_ptr(a, e) T_flags_eq_ptr(a, e, T_CHECK_STOP, #a, #e)
0775 #define T_quiet_eq_ptr(a, e) T_flags_eq_ptr(a, e, T_CHECK_QUIET, #a, #e)
0776 #define T_step_eq_ptr(s, a, e) T_flags_eq_ptr(a, e, T_CHECK_STEP(s), #a, #e)
0777 #define T_step_assert_eq_ptr(s, a, e) \
0778     T_flags_eq_ptr(a, e, T_CHECK_STEP(s) | T_CHECK_STOP, #a, #e)
0779 
0780 #define T_ne_ptr(a, e) T_flags_ne_ptr(a, e, 0, #a, #e)
0781 #define T_assert_ne_ptr(a, e) T_flags_ne_ptr(a, e, T_CHECK_STOP, #a, #e)
0782 #define T_quiet_ne_ptr(a, e) T_flags_ne_ptr(a, e, T_CHECK_QUIET, #a, #e)
0783 #define T_step_ne_ptr(s, a, e) T_flags_ne_ptr(a, e, T_CHECK_STEP(s), #a, #e)
0784 #define T_step_assert_ne_ptr(s, a, e) \
0785     T_flags_ne_ptr(a, e, T_CHECK_STEP(s) | T_CHECK_STOP, #a, #e)
0786 
0787 #define T_null(a) T_flags_null(a, 0, #a)
0788 #define T_assert_null(a) T_flags_null(a, T_CHECK_STOP, #a)
0789 #define T_quiet_null(a) T_flags_null(a, T_CHECK_QUIET, #a)
0790 #define T_quiet_assert_null(a) \
0791     T_flags_null(a, T_CHECK_QUIET | T_CHECK_STOP, #a)
0792 #define T_step_null(s, a) T_flags_null(a, T_CHECK_STEP(s), #a)
0793 #define T_step_assert_null(s, a) \
0794     T_flags_null(a, T_CHECK_STEP(s) | T_CHECK_STOP, #a)
0795 
0796 #define T_not_null(a) T_flags_not_null(a, 0, #a)
0797 #define T_assert_not_null(a) T_flags_not_null(a, T_CHECK_STOP, #a)
0798 #define T_quiet_not_null(a) T_flags_not_null(a, T_CHECK_QUIET, #a)
0799 #define T_quiet_assert_not_null(a) \
0800     T_flags_not_null(a, T_CHECK_QUIET | T_CHECK_STOP, #a)
0801 #define T_step_not_null(s, a) T_flags_not_null(a, T_CHECK_STEP(s), #a)
0802 #define T_step_assert_not_null(s, a) \
0803     T_flags_not_null(a, T_CHECK_STEP(s) | T_CHECK_STOP, #a)
0804 
0805 /** @} */
0806 
0807 /**
0808  * @defgroup RTEMSTestFrameworkChecksMemStr Memory Area Checks
0809  *
0810  * @ingroup RTEMSTestFramework
0811  *
0812  * @brief Checks for memory areas.
0813  *
0814  * @{
0815  */
0816 
0817 #define T_eq_mem(a, e, n) T_flags_eq_mem(a, e, n, 0, #a, #e, #n)
0818 #define T_assert_eq_mem(a, e, n) \
0819     T_flags_eq_mem(a, e, n, T_CHECK_STOP, #a, #e, #n)
0820 #define T_quiet_eq_mem(a, e, n) \
0821     T_flags_eq_mem(a, e, n, T_CHECK_QUIET, #a, #e, #n)
0822 #define T_step_eq_mem(s, a, e, n) \
0823     T_flags_eq_mem(a, e, n, T_CHECK_STEP(s), #a, #e, #n)
0824 #define T_step_assert_eq_mem(s, a, e, n) \
0825     T_flags_eq_mem(a, e, n, T_CHECK_STEP(s) | T_CHECK_STOP, #a, #e, #n)
0826 
0827 #define T_ne_mem(a, e, n) T_flags_ne_mem(a, e, n, 0, #a, #e, #n)
0828 #define T_assert_ne_mem(a, e, n) \
0829     T_flags_ne_mem(a, e, n, T_CHECK_STOP, #a, #e, #n)
0830 #define T_quiet_ne_mem(a, e, n) \
0831     T_flags_ne_mem(a, e, n, T_CHECK_QUIET, #a, #e, #n)
0832 #define T_step_ne_mem(s, a, e, n) \
0833     T_flags_ne_mem(a, e, n, T_CHECK_STEP(s), #a, #e, #n)
0834 #define T_step_assert_ne_mem(s, a, e, n) \
0835     T_flags_ne_mem(a, e, n, T_CHECK_STEP(s) | T_CHECK_STOP, #a, #e, #n)
0836 
0837 /** @} */
0838 
0839 /**
0840  * @defgroup RTEMSTestFrameworkChecksStr String Checks
0841  *
0842  * @ingroup RTEMSTestFramework
0843  *
0844  * @brief Checks for strings.
0845  *
0846  * @{
0847  */
0848 
0849 
0850 #define T_eq_str(a, e) T_flags_eq_str(a, e, 0)
0851 #define T_assert_eq_str(a, e) T_flags_eq_str(a, e, T_CHECK_STOP)
0852 #define T_quiet_eq_str(a, e) T_flags_eq_str(a, e, T_CHECK_QUIET)
0853 #define T_step_eq_str(s, a, e) T_flags_eq_str(a, e, T_CHECK_STEP(s))
0854 #define T_step_assert_eq_str(s, a, e) \
0855     T_flags_eq_str(a, e, T_CHECK_STEP(s) | T_CHECK_STOP)
0856 
0857 #define T_ne_str(a, e) T_flags_ne_str(a, e, 0)
0858 #define T_assert_ne_str(a, e) T_flags_ne_str(a, e, T_CHECK_STOP)
0859 #define T_quiet_ne_str(a, e) T_flags_ne_str(a, e, T_CHECK_QUIET)
0860 #define T_step_ne_str(s, a, e) T_flags_ne_str(a, e, T_CHECK_STEP(s))
0861 #define T_step_assert_ne_str(s, a, e) \
0862     T_flags_ne_str(a, e, T_CHECK_STEP(s) | T_CHECK_STOP)
0863 
0864 #define T_eq_nstr(a, e, n) T_flags_eq_nstr(a, e, n, 0)
0865 #define T_assert_eq_nstr(a, e, n) T_flags_eq_nstr(a, e, n, T_CHECK_STOP)
0866 #define T_quiet_eq_nstr(a, e, n) T_flags_eq_nstr(a, e, n, T_CHECK_QUIET)
0867 #define T_step_eq_nstr(s, a, e, n) T_flags_eq_nstr(a, e, n, T_CHECK_STEP(s))
0868 #define T_step_assert_eq_nstr(s, a, e, n) \
0869     T_flags_eq_nstr(a, e, n, T_CHECK_STEP(s) | T_CHECK_STOP)
0870 
0871 #define T_ne_nstr(a, e, n) T_flags_ne_nstr(a, e, n, 0)
0872 #define T_assert_ne_nstr(a, e, n) T_flags_ne_nstr(a, e, n, T_CHECK_STOP)
0873 #define T_quiet_ne_nstr(a, e, n) T_flags_ne_nstr(a, e, n, T_CHECK_QUIET)
0874 #define T_step_ne_nstr(s, a, e, n) T_flags_ne_nstr(a, e, n, T_CHECK_STEP(s))
0875 #define T_step_assert_ne_nstr(s, a, e, n) \
0876     T_flags_ne_nstr(a, e, n, T_CHECK_STEP(s) | T_CHECK_STOP)
0877 
0878 /** @} */
0879 
0880 /**
0881  * @defgroup RTEMSTestFrameworkChecksChar Character Checks
0882  *
0883  * @ingroup RTEMSTestFramework
0884  *
0885  * @brief Checks for characters (char).
0886  *
0887  * @{
0888  */
0889 
0890 #define T_eq_char(a, e) T_flags_eq_char(a, e, 0)
0891 #define T_assert_eq_char(a, e) T_flags_eq_char(a, e, T_CHECK_STOP)
0892 #define T_quiet_eq_char(a, e) T_flags_eq_char(a, e, T_CHECK_QUIET)
0893 #define T_step_eq_char(s, a, e) T_flags_eq_char(a, e, T_CHECK_STEP(s))
0894 #define T_step_assert_eq_char(s, a, e) \
0895     T_flags_eq_char(a, e, T_CHECK_STEP(s) | T_CHECK_STOP)
0896 
0897 #define T_ne_char(a, e) T_flags_ne_char(a, e, 0)
0898 #define T_assert_ne_char(a, e) T_flags_ne_char(a, e, T_CHECK_STOP)
0899 #define T_quiet_ne_char(a, e) T_flags_ne_char(a, e, T_CHECK_QUIET)
0900 #define T_step_ne_char(s, a, e) T_flags_ne_char(a, e, T_CHECK_STEP(s))
0901 #define T_step_assert_ne_char(s, a, e) \
0902     T_flags_ne_char(a, e, T_CHECK_STEP(s) | T_CHECK_STOP)
0903 
0904 /** @} */
0905 
0906 /**
0907  * @defgroup RTEMSTestFrameworkChecksSChar Signed Character Checks
0908  *
0909  * @ingroup RTEMSTestFramework
0910  *
0911  * @brief Checks for signed characters (signed char).
0912  *
0913  * @{
0914  */
0915 
0916 #define T_eq_schar(a, e) T_flags_eq_int(a, e, 0)
0917 #define T_assert_eq_schar(a, e) T_flags_eq_int(a, e, T_CHECK_STOP)
0918 #define T_quiet_eq_schar(a, e) T_flags_eq_int(a, e, T_CHECK_QUIET)
0919 #define T_step_eq_schar(s, a, e) T_flags_eq_int(a, e, T_CHECK_STEP(s))
0920 #define T_step_assert_eq_schar(s, a, e) \
0921     T_flags_eq_int(a, e, T_CHECK_STEP(s) | T_CHECK_STOP)
0922 
0923 #define T_ne_schar(a, e) T_flags_ne_int(a, e, 0)
0924 #define T_assert_ne_schar(a, e) T_flags_ne_int(a, e, T_CHECK_STOP)
0925 #define T_quiet_ne_schar(a, e) T_flags_ne_int(a, e, T_CHECK_QUIET)
0926 #define T_step_ne_schar(s, a, e) T_flags_ne_int(a, e, T_CHECK_STEP(s))
0927 #define T_step_assert_ne_schar(s, a, e) \
0928     T_flags_ne_int(a, e, T_CHECK_STEP(s) | T_CHECK_STOP)
0929 
0930 #define T_ge_schar(a, e) T_flags_ge_int(a, e, 0)
0931 #define T_assert_ge_schar(a, e) T_flags_ge_int(a, e, T_CHECK_STOP)
0932 #define T_quiet_ge_schar(a, e) T_flags_ge_int(a, e, T_CHECK_QUIET)
0933 #define T_step_ge_schar(s, a, e) T_flags_ge_int(a, e, T_CHECK_STEP(s))
0934 #define T_step_assert_ge_schar(s, a, e) \
0935     T_flags_ge_int(a, e, T_CHECK_STEP(s) | T_CHECK_STOP)
0936 
0937 #define T_gt_schar(a, e) T_flags_gt_int(a, e, 0)
0938 #define T_assert_gt_schar(a, e) T_flags_gt_int(a, e, T_CHECK_STOP)
0939 #define T_quiet_gt_schar(a, e) T_flags_gt_int(a, e, T_CHECK_QUIET)
0940 #define T_step_gt_schar(s, a, e) T_flags_gt_int(a, e, T_CHECK_STEP(s))
0941 #define T_step_assert_gt_schar(s, a, e) \
0942     T_flags_gt_int(a, e, T_CHECK_STEP(s) | T_CHECK_STOP)
0943 
0944 #define T_le_schar(a, e) T_flags_le_int(a, e, 0)
0945 #define T_assert_le_schar(a, e) T_flags_le_int(a, e, T_CHECK_STOP)
0946 #define T_quiet_le_schar(a, e) T_flags_le_int(a, e, T_CHECK_QUIET)
0947 #define T_step_le_schar(s, a, e) T_flags_le_int(a, e, T_CHECK_STEP(s))
0948 #define T_step_assert_le_schar(s, a, e) \
0949     T_flags_le_int(a, e, T_CHECK_STEP(s) | T_CHECK_STOP)
0950 
0951 #define T_lt_schar(a, e) T_flags_lt_int(a, e, 0)
0952 #define T_assert_lt_schar(a, e) T_flags_lt_int(a, e, T_CHECK_STOP)
0953 #define T_quiet_lt_schar(a, e) T_flags_lt_int(a, e, T_CHECK_QUIET)
0954 #define T_step_lt_schar(s, a, e) T_flags_lt_int(a, e, T_CHECK_STEP(s))
0955 #define T_step_assert_lt_schar(s, a, e) \
0956     T_flags_lt_int(a, e, T_CHECK_STEP(s) | T_CHECK_STOP)
0957 
0958 /** @} */
0959 
0960 /**
0961  * @defgroup RTEMSTestFrameworkChecksUChar Unsigned Character Checks
0962  *
0963  * @ingroup RTEMSTestFramework
0964  *
0965  * @brief Checks for unsigned characters (unsigned char).
0966  *
0967  * @{
0968  */
0969 
0970 #define T_eq_uchar(a, e) T_flags_eq_uint(a, e, 0)
0971 #define T_assert_eq_uchar(a, e) T_flags_eq_uint(a, e, T_CHECK_STOP)
0972 #define T_quiet_eq_uchar(a, e) T_flags_eq_uint(a, e, T_CHECK_QUIET)
0973 #define T_step_eq_uchar(s, a, e) T_flags_eq_uint(a, e, T_CHECK_STEP(s))
0974 #define T_step_assert_eq_uchar(s, a, e) \
0975     T_flags_eq_uint(a, e, T_CHECK_STEP(s) | T_CHECK_STOP)
0976 
0977 #define T_ne_uchar(a, e) T_flags_ne_uint(a, e, 0)
0978 #define T_assert_ne_uchar(a, e) T_flags_ne_uint(a, e, T_CHECK_STOP)
0979 #define T_quiet_ne_uchar(a, e) T_flags_ne_uint(a, e, T_CHECK_QUIET)
0980 #define T_step_ne_uchar(s, a, e) T_flags_ne_uint(a, e, T_CHECK_STEP(s))
0981 #define T_step_assert_ne_uchar(s, a, e) \
0982     T_flags_ne_uint(a, e, T_CHECK_STEP(s) | T_CHECK_STOP)
0983 
0984 #define T_ge_uchar(a, e) T_flags_ge_uint(a, e, 0)
0985 #define T_assert_ge_uchar(a, e) T_flags_ge_uint(a, e, T_CHECK_STOP)
0986 #define T_quiet_ge_uchar(a, e) T_flags_ge_uint(a, e, T_CHECK_QUIET)
0987 #define T_step_ge_uchar(s, a, e) T_flags_ge_uint(a, e, T_CHECK_STEP(s))
0988 #define T_step_assert_ge_uchar(s, a, e) \
0989     T_flags_ge_uint(a, e, T_CHECK_STEP(s) | T_CHECK_STOP)
0990 
0991 #define T_gt_uchar(a, e) T_flags_gt_uint(a, e, 0)
0992 #define T_assert_gt_uchar(a, e) T_flags_gt_uint(a, e, T_CHECK_STOP)
0993 #define T_quiet_gt_uchar(a, e) T_flags_gt_uint(a, e, T_CHECK_QUIET)
0994 #define T_step_gt_uchar(s, a, e) T_flags_gt_uint(a, e, T_CHECK_STEP(s))
0995 #define T_step_assert_gt_uchar(s, a, e) \
0996     T_flags_gt_uint(a, e, T_CHECK_STEP(s) | T_CHECK_STOP)
0997 
0998 #define T_le_uchar(a, e) T_flags_le_uint(a, e, 0)
0999 #define T_assert_le_uchar(a, e) T_flags_le_uint(a, e, T_CHECK_STOP)
1000 #define T_quiet_le_uchar(a, e) T_flags_le_uint(a, e, T_CHECK_QUIET)
1001 #define T_step_le_uchar(s, a, e) T_flags_le_uint(a, e, T_CHECK_STEP(s))
1002 #define T_step_assert_le_uchar(s, a, e) \
1003     T_flags_le_uint(a, e, T_CHECK_STEP(s) | T_CHECK_STOP)
1004 
1005 #define T_lt_uchar(a, e) T_flags_lt_uint(a, e, 0)
1006 #define T_assert_lt_uchar(a, e) T_flags_lt_uint(a, e, T_CHECK_STOP)
1007 #define T_quiet_lt_uchar(a, e) T_flags_lt_uint(a, e, T_CHECK_QUIET)
1008 #define T_step_lt_uchar(s, a, e) T_flags_lt_uint(a, e, T_CHECK_STEP(s))
1009 #define T_step_assert_lt_uchar(s, a, e) \
1010     T_flags_lt_uint(a, e, T_CHECK_STEP(s) | T_CHECK_STOP)
1011 
1012 /** @} */
1013 
1014 /**
1015  * @defgroup RTEMSTestFrameworkChecksShort Signed Short Integer Checks
1016  *
1017  * @ingroup RTEMSTestFramework
1018  *
1019  * @brief Checks for signed short integers (short).
1020  *
1021  * @{
1022  */
1023 
1024 #define T_eq_short(a, e) T_flags_eq_int(a, e, 0)
1025 #define T_assert_eq_short(a, e) T_flags_eq_int(a, e, T_CHECK_STOP)
1026 #define T_quiet_eq_short(a, e) T_flags_eq_int(a, e, T_CHECK_QUIET)
1027 #define T_step_eq_short(s, a, e) T_flags_eq_int(a, e, T_CHECK_STEP(s))
1028 #define T_step_assert_eq_short(s, a, e) \
1029     T_flags_eq_int(a, e, T_CHECK_STEP(s) | T_CHECK_STOP)
1030 
1031 #define T_ne_short(a, e) T_flags_ne_int(a, e, 0)
1032 #define T_assert_ne_short(a, e) T_flags_ne_int(a, e, T_CHECK_STOP)
1033 #define T_quiet_ne_short(a, e) T_flags_ne_int(a, e, T_CHECK_QUIET)
1034 #define T_step_ne_short(s, a, e) T_flags_ne_int(a, e, T_CHECK_STEP(s))
1035 #define T_step_assert_ne_short(s, a, e) \
1036     T_flags_ne_int(a, e, T_CHECK_STEP(s) | T_CHECK_STOP)
1037 
1038 #define T_ge_short(a, e) T_flags_ge_int(a, e, 0)
1039 #define T_assert_ge_short(a, e) T_flags_ge_int(a, e, T_CHECK_STOP)
1040 #define T_quiet_ge_short(a, e) T_flags_ge_int(a, e, T_CHECK_QUIET)
1041 #define T_step_ge_short(s, a, e) T_flags_ge_int(a, e, T_CHECK_STEP(s))
1042 #define T_step_assert_ge_short(s, a, e) \
1043     T_flags_ge_int(a, e, T_CHECK_STEP(s) | T_CHECK_STOP)
1044 
1045 #define T_gt_short(a, e) T_flags_gt_int(a, e, 0)
1046 #define T_assert_gt_short(a, e) T_flags_gt_int(a, e, T_CHECK_STOP)
1047 #define T_quiet_gt_short(a, e) T_flags_gt_int(a, e, T_CHECK_QUIET)
1048 #define T_step_gt_short(s, a, e) T_flags_gt_int(a, e, T_CHECK_STEP(s))
1049 #define T_step_assert_gt_short(s, a, e) \
1050     T_flags_gt_int(a, e, T_CHECK_STEP(s) | T_CHECK_STOP)
1051 
1052 #define T_le_short(a, e) T_flags_le_int(a, e, 0)
1053 #define T_assert_le_short(a, e) T_flags_le_int(a, e, T_CHECK_STOP)
1054 #define T_quiet_le_short(a, e) T_flags_le_int(a, e, T_CHECK_QUIET)
1055 #define T_step_le_short(s, a, e) T_flags_le_int(a, e, T_CHECK_STEP(s))
1056 #define T_step_assert_le_short(s, a, e) \
1057     T_flags_le_int(a, e, T_CHECK_STEP(s) | T_CHECK_STOP)
1058 
1059 #define T_lt_short(a, e) T_flags_lt_int(a, e, 0)
1060 #define T_assert_lt_short(a, e) T_flags_lt_int(a, e, T_CHECK_STOP)
1061 #define T_quiet_lt_short(a, e) T_flags_lt_int(a, e, T_CHECK_QUIET)
1062 #define T_step_lt_short(s, a, e) T_flags_lt_int(a, e, T_CHECK_STEP(s))
1063 #define T_step_assert_lt_short(s, a, e) \
1064     T_flags_lt_int(a, e, T_CHECK_STEP(s) | T_CHECK_STOP)
1065 
1066 /** @} */
1067 
1068 /**
1069  * @defgroup RTEMSTestFrameworkChecksUShort Unsigned Short Integer Checks
1070  *
1071  * @ingroup RTEMSTestFramework
1072  *
1073  * @brief Checks for unsigned short integers (unsigned short).
1074  *
1075  * @{
1076  */
1077 
1078 #define T_eq_ushort(a, e) T_flags_eq_uint(a, e, 0)
1079 #define T_assert_eq_ushort(a, e) T_flags_eq_uint(a, e, T_CHECK_STOP)
1080 #define T_quiet_eq_ushort(a, e) T_flags_eq_uint(a, e, T_CHECK_QUIET)
1081 #define T_step_eq_ushort(s, a, e) T_flags_eq_uint(a, e, T_CHECK_STEP(s))
1082 #define T_step_assert_eq_ushort(s, a, e) \
1083     T_flags_eq_uint(a, e, T_CHECK_STEP(s) | T_CHECK_STOP)
1084 
1085 #define T_ne_ushort(a, e) T_flags_ne_uint(a, e, 0)
1086 #define T_assert_ne_ushort(a, e) T_flags_ne_uint(a, e, T_CHECK_STOP)
1087 #define T_quiet_ne_ushort(a, e) T_flags_ne_uint(a, e, T_CHECK_QUIET)
1088 #define T_step_ne_ushort(s, a, e) T_flags_ne_uint(a, e, T_CHECK_STEP(s))
1089 #define T_step_assert_ne_ushort(s, a, e) \
1090     T_flags_ne_uint(a, e, T_CHECK_STEP(s) | T_CHECK_STOP)
1091 
1092 #define T_ge_ushort(a, e) T_flags_ge_uint(a, e, 0)
1093 #define T_assert_ge_ushort(a, e) T_flags_ge_uint(a, e, T_CHECK_STOP)
1094 #define T_quiet_ge_ushort(a, e) T_flags_ge_uint(a, e, T_CHECK_QUIET)
1095 #define T_step_ge_ushort(s, a, e) T_flags_ge_uint(a, e, T_CHECK_STEP(s))
1096 #define T_step_assert_ge_ushort(s, a, e) \
1097     T_flags_ge_uint(a, e, T_CHECK_STEP(s) | T_CHECK_STOP)
1098 
1099 #define T_gt_ushort(a, e) T_flags_gt_uint(a, e, 0)
1100 #define T_assert_gt_ushort(a, e) T_flags_gt_uint(a, e, T_CHECK_STOP)
1101 #define T_quiet_gt_ushort(a, e) T_flags_gt_uint(a, e, T_CHECK_QUIET)
1102 #define T_step_gt_ushort(s, a, e) T_flags_gt_uint(a, e, T_CHECK_STEP(s))
1103 #define T_step_assert_gt_ushort(s, a, e) \
1104     T_flags_gt_uint(a, e, T_CHECK_STEP(s) | T_CHECK_STOP)
1105 
1106 #define T_le_ushort(a, e) T_flags_le_uint(a, e, 0)
1107 #define T_assert_le_ushort(a, e) T_flags_le_uint(a, e, T_CHECK_STOP)
1108 #define T_quiet_le_ushort(a, e) T_flags_le_uint(a, e, T_CHECK_QUIET)
1109 #define T_step_le_ushort(s, a, e) T_flags_le_uint(a, e, T_CHECK_STEP(s))
1110 #define T_step_assert_le_ushort(s, a, e) \
1111     T_flags_le_uint(a, e, T_CHECK_STEP(s) | T_CHECK_STOP)
1112 
1113 #define T_lt_ushort(a, e) T_flags_lt_uint(a, e, 0)
1114 #define T_assert_lt_ushort(a, e) T_flags_lt_uint(a, e, T_CHECK_STOP)
1115 #define T_quiet_lt_ushort(a, e) T_flags_lt_uint(a, e, T_CHECK_QUIET)
1116 #define T_step_lt_ushort(s, a, e) T_flags_lt_uint(a, e, T_CHECK_STEP(s))
1117 #define T_step_assert_lt_ushort(s, a, e) \
1118     T_flags_lt_uint(a, e, T_CHECK_STEP(s) | T_CHECK_STOP)
1119 
1120 /** @} */
1121 
1122 /**
1123  * @defgroup RTEMSTestFrameworkChecksInt Signed Integer Checks
1124  *
1125  * @ingroup RTEMSTestFramework
1126  *
1127  * @brief Checks for signed integers (int).
1128  *
1129  * @{
1130  */
1131 
1132 #define T_eq_int(a, e) T_flags_eq_int(a, e, 0)
1133 #define T_assert_eq_int(a, e) T_flags_eq_int(a, e, T_CHECK_STOP)
1134 #define T_quiet_eq_int(a, e) T_flags_eq_int(a, e, T_CHECK_QUIET)
1135 #define T_step_eq_int(s, a, e) T_flags_eq_int(a, e, T_CHECK_STEP(s))
1136 #define T_step_assert_eq_int(s, a, e) \
1137     T_flags_eq_int(a, e, T_CHECK_STEP(s) | T_CHECK_STOP)
1138 
1139 #define T_ne_int(a, e) T_flags_ne_int(a, e, 0)
1140 #define T_assert_ne_int(a, e) T_flags_ne_int(a, e, T_CHECK_STOP)
1141 #define T_quiet_ne_int(a, e) T_flags_ne_int(a, e, T_CHECK_QUIET)
1142 #define T_step_ne_int(s, a, e) T_flags_ne_int(a, e, T_CHECK_STEP(s))
1143 #define T_step_assert_ne_int(s, a, e) \
1144     T_flags_ne_int(a, e, T_CHECK_STEP(s) | T_CHECK_STOP)
1145 
1146 #define T_ge_int(a, e) T_flags_ge_int(a, e, 0)
1147 #define T_assert_ge_int(a, e) T_flags_ge_int(a, e, T_CHECK_STOP)
1148 #define T_quiet_ge_int(a, e) T_flags_ge_int(a, e, T_CHECK_QUIET)
1149 #define T_step_ge_int(s, a, e) T_flags_ge_int(a, e, T_CHECK_STEP(s))
1150 #define T_step_assert_ge_int(s, a, e) \
1151     T_flags_ge_int(a, e, T_CHECK_STEP(s) | T_CHECK_STOP)
1152 
1153 #define T_gt_int(a, e) T_flags_gt_int(a, e, 0)
1154 #define T_assert_gt_int(a, e) T_flags_gt_int(a, e, T_CHECK_STOP)
1155 #define T_quiet_gt_int(a, e) T_flags_gt_int(a, e, T_CHECK_QUIET)
1156 #define T_step_gt_int(s, a, e) T_flags_gt_int(a, e, T_CHECK_STEP(s))
1157 #define T_step_assert_gt_int(s, a, e) \
1158     T_flags_gt_int(a, e, T_CHECK_STEP(s) | T_CHECK_STOP)
1159 
1160 #define T_le_int(a, e) T_flags_le_int(a, e, 0)
1161 #define T_assert_le_int(a, e) T_flags_le_int(a, e, T_CHECK_STOP)
1162 #define T_quiet_le_int(a, e) T_flags_le_int(a, e, T_CHECK_QUIET)
1163 #define T_step_le_int(s, a, e) T_flags_le_int(a, e, T_CHECK_STEP(s))
1164 #define T_step_assert_le_int(s, a, e) \
1165     T_flags_le_int(a, e, T_CHECK_STEP(s) | T_CHECK_STOP)
1166 
1167 #define T_lt_int(a, e) T_flags_lt_int(a, e, 0)
1168 #define T_assert_lt_int(a, e) T_flags_lt_int(a, e, T_CHECK_STOP)
1169 #define T_quiet_lt_int(a, e) T_flags_lt_int(a, e, T_CHECK_QUIET)
1170 #define T_step_lt_int(s, a, e) T_flags_lt_int(a, e, T_CHECK_STEP(s))
1171 #define T_step_assert_lt_int(s, a, e) \
1172     T_flags_lt_int(a, e, T_CHECK_STEP(s) | T_CHECK_STOP)
1173 
1174 /** @} */
1175 
1176 /**
1177  * @defgroup RTEMSTestFrameworkChecksUInt Unsigned Integer Checks
1178  *
1179  * @ingroup RTEMSTestFramework
1180  *
1181  * @brief Checks for unsigned integers (unsigned int).
1182  *
1183  * @{
1184  */
1185 
1186 #define T_eq_uint(a, e) T_flags_eq_uint(a, e, 0)
1187 #define T_assert_eq_uint(a, e) T_flags_eq_uint(a, e, T_CHECK_STOP)
1188 #define T_quiet_eq_uint(a, e) T_flags_eq_uint(a, e, T_CHECK_QUIET)
1189 #define T_step_eq_uint(s, a, e) T_flags_eq_uint(a, e, T_CHECK_STEP(s))
1190 #define T_step_assert_eq_uint(s, a, e) \
1191     T_flags_eq_uint(a, e, T_CHECK_STEP(s) | T_CHECK_STOP)
1192 
1193 #define T_ne_uint(a, e) T_flags_ne_uint(a, e, 0)
1194 #define T_assert_ne_uint(a, e) T_flags_ne_uint(a, e, T_CHECK_STOP)
1195 #define T_quiet_ne_uint(a, e) T_flags_ne_uint(a, e, T_CHECK_QUIET)
1196 #define T_step_ne_uint(s, a, e) T_flags_ne_uint(a, e, T_CHECK_STEP(s))
1197 #define T_step_assert_ne_uint(s, a, e) \
1198     T_flags_ne_uint(a, e, T_CHECK_STEP(s) | T_CHECK_STOP)
1199 
1200 #define T_ge_uint(a, e) T_flags_ge_uint(a, e, 0)
1201 #define T_assert_ge_uint(a, e) T_flags_ge_uint(a, e, T_CHECK_STOP)
1202 #define T_quiet_ge_uint(a, e) T_flags_ge_uint(a, e, T_CHECK_QUIET)
1203 #define T_step_ge_uint(s, a, e) T_flags_ge_uint(a, e, T_CHECK_STEP(s))
1204 #define T_step_assert_ge_uint(s, a, e) \
1205     T_flags_ge_uint(a, e, T_CHECK_STEP(s) | T_CHECK_STOP)
1206 
1207 #define T_gt_uint(a, e) T_flags_gt_uint(a, e, 0)
1208 #define T_assert_gt_uint(a, e) T_flags_gt_uint(a, e, T_CHECK_STOP)
1209 #define T_quiet_gt_uint(a, e) T_flags_gt_uint(a, e, T_CHECK_QUIET)
1210 #define T_step_gt_uint(s, a, e) T_flags_gt_uint(a, e, T_CHECK_STEP(s))
1211 #define T_step_assert_gt_uint(s, a, e) \
1212     T_flags_gt_uint(a, e, T_CHECK_STEP(s) | T_CHECK_STOP)
1213 
1214 #define T_le_uint(a, e) T_flags_le_uint(a, e, 0)
1215 #define T_assert_le_uint(a, e) T_flags_le_uint(a, e, T_CHECK_STOP)
1216 #define T_quiet_le_uint(a, e) T_flags_le_uint(a, e, T_CHECK_QUIET)
1217 #define T_step_le_uint(s, a, e) T_flags_le_uint(a, e, T_CHECK_STEP(s))
1218 #define T_step_assert_le_uint(s, a, e) \
1219     T_flags_le_uint(a, e, T_CHECK_STEP(s) | T_CHECK_STOP)
1220 
1221 #define T_lt_uint(a, e) T_flags_lt_uint(a, e, 0)
1222 #define T_assert_lt_uint(a, e) T_flags_lt_uint(a, e, T_CHECK_STOP)
1223 #define T_quiet_lt_uint(a, e) T_flags_lt_uint(a, e, T_CHECK_QUIET)
1224 #define T_step_lt_uint(s, a, e) T_flags_lt_uint(a, e, T_CHECK_STEP(s))
1225 #define T_step_assert_lt_uint(s, a, e) \
1226     T_flags_lt_uint(a, e, T_CHECK_STEP(s) | T_CHECK_STOP)
1227 
1228 /** @} */
1229 
1230 /**
1231  * @defgroup RTEMSTestFrameworkChecksLong Signed Long Integer Checks
1232  *
1233  * @ingroup RTEMSTestFramework
1234  *
1235  * @brief Checks for signed long integers (long).
1236  *
1237  * @{
1238  */
1239 
1240 #define T_eq_long(a, e) T_flags_eq_long(a, e, 0)
1241 #define T_assert_eq_long(a, e) T_flags_eq_long(a, e, T_CHECK_STOP)
1242 #define T_quiet_eq_long(a, e) T_flags_eq_long(a, e, T_CHECK_QUIET)
1243 #define T_step_eq_long(s, a, e) T_flags_eq_long(a, e, T_CHECK_STEP(s))
1244 #define T_step_assert_eq_long(s, a, e) \
1245     T_flags_eq_long(a, e, T_CHECK_STEP(s) | T_CHECK_STOP)
1246 
1247 #define T_ne_long(a, e) T_flags_ne_long(a, e, 0)
1248 #define T_assert_ne_long(a, e) T_flags_ne_long(a, e, T_CHECK_STOP)
1249 #define T_quiet_ne_long(a, e) T_flags_ne_long(a, e, T_CHECK_QUIET)
1250 #define T_step_ne_long(s, a, e) T_flags_ne_long(a, e, T_CHECK_STEP(s))
1251 #define T_step_assert_ne_long(s, a, e) \
1252     T_flags_ne_long(a, e, T_CHECK_STEP(s) | T_CHECK_STOP)
1253 
1254 #define T_ge_long(a, e) T_flags_ge_long(a, e, 0)
1255 #define T_assert_ge_long(a, e) T_flags_ge_long(a, e, T_CHECK_STOP)
1256 #define T_quiet_ge_long(a, e) T_flags_ge_long(a, e, T_CHECK_QUIET)
1257 #define T_step_ge_long(s, a, e) T_flags_ge_long(a, e, T_CHECK_STEP(s))
1258 #define T_step_assert_ge_long(s, a, e) \
1259     T_flags_ge_long(a, e, T_CHECK_STEP(s) | T_CHECK_STOP)
1260 
1261 #define T_gt_long(a, e) T_flags_gt_long(a, e, 0)
1262 #define T_assert_gt_long(a, e) T_flags_gt_long(a, e, T_CHECK_STOP)
1263 #define T_quiet_gt_long(a, e) T_flags_gt_long(a, e, T_CHECK_QUIET)
1264 #define T_step_gt_long(s, a, e) T_flags_gt_long(a, e, T_CHECK_STEP(s))
1265 #define T_step_assert_gt_long(s, a, e) \
1266     T_flags_gt_long(a, e, T_CHECK_STEP(s) | T_CHECK_STOP)
1267 
1268 #define T_le_long(a, e) T_flags_le_long(a, e, 0)
1269 #define T_assert_le_long(a, e) T_flags_le_long(a, e, T_CHECK_STOP)
1270 #define T_quiet_le_long(a, e) T_flags_le_long(a, e, T_CHECK_QUIET)
1271 #define T_step_le_long(s, a, e) T_flags_le_long(a, e, T_CHECK_STEP(s))
1272 #define T_step_assert_le_long(s, a, e) \
1273     T_flags_le_long(a, e, T_CHECK_STEP(s) | T_CHECK_STOP)
1274 
1275 #define T_lt_long(a, e) T_flags_lt_long(a, e, 0)
1276 #define T_assert_lt_long(a, e) T_flags_lt_long(a, e, T_CHECK_STOP)
1277 #define T_quiet_lt_long(a, e) T_flags_lt_long(a, e, T_CHECK_QUIET)
1278 #define T_step_lt_long(s, a, e) T_flags_lt_long(a, e, T_CHECK_STEP(s))
1279 #define T_step_assert_lt_long(s, a, e) \
1280     T_flags_lt_long(a, e, T_CHECK_STEP(s) | T_CHECK_STOP)
1281 
1282 /** @} */
1283 
1284 /**
1285  * @defgroup RTEMSTestFrameworkChecksULong Unsigned Long Integer Checks
1286  *
1287  * @ingroup RTEMSTestFramework
1288  *
1289  * @brief Checks for unsigned long integers (unsigned long).
1290  *
1291  * @{
1292  */
1293 
1294 #define T_eq_ulong(a, e) T_flags_eq_ulong(a, e, 0)
1295 #define T_assert_eq_ulong(a, e) T_flags_eq_ulong(a, e, T_CHECK_STOP)
1296 #define T_quiet_eq_ulong(a, e) T_flags_eq_ulong(a, e, T_CHECK_QUIET)
1297 #define T_step_eq_ulong(s, a, e) T_flags_eq_ulong(a, e, T_CHECK_STEP(s))
1298 #define T_step_assert_eq_ulong(s, a, e) \
1299     T_flags_eq_ulong(a, e, T_CHECK_STEP(s) | T_CHECK_STOP)
1300 
1301 #define T_ne_ulong(a, e) T_flags_ne_ulong(a, e, 0)
1302 #define T_assert_ne_ulong(a, e) T_flags_ne_ulong(a, e, T_CHECK_STOP)
1303 #define T_quiet_ne_ulong(a, e) T_flags_ne_ulong(a, e, T_CHECK_QUIET)
1304 #define T_step_ne_ulong(s, a, e) T_flags_ne_ulong(a, e, T_CHECK_STEP(s))
1305 #define T_step_assert_ne_ulong(s, a, e) \
1306     T_flags_ne_ulong(a, e, T_CHECK_STEP(s) | T_CHECK_STOP)
1307 
1308 #define T_ge_ulong(a, e) T_flags_ge_ulong(a, e, 0)
1309 #define T_assert_ge_ulong(a, e) T_flags_ge_ulong(a, e, T_CHECK_STOP)
1310 #define T_quiet_ge_ulong(a, e) T_flags_ge_ulong(a, e, T_CHECK_QUIET)
1311 #define T_step_ge_ulong(s, a, e) T_flags_ge_ulong(a, e, T_CHECK_STEP(s))
1312 #define T_step_assert_ge_ulong(s, a, e) \
1313     T_flags_ge_ulong(a, e, T_CHECK_STEP(s) | T_CHECK_STOP)
1314 
1315 #define T_gt_ulong(a, e) T_flags_gt_ulong(a, e, 0)
1316 #define T_assert_gt_ulong(a, e) T_flags_gt_ulong(a, e, T_CHECK_STOP)
1317 #define T_quiet_gt_ulong(a, e) T_flags_gt_ulong(a, e, T_CHECK_QUIET)
1318 #define T_step_gt_ulong(s, a, e) T_flags_gt_ulong(a, e, T_CHECK_STEP(s))
1319 #define T_step_assert_gt_ulong(s, a, e) \
1320     T_flags_gt_ulong(a, e, T_CHECK_STEP(s) | T_CHECK_STOP)
1321 
1322 #define T_le_ulong(a, e) T_flags_le_ulong(a, e, 0)
1323 #define T_assert_le_ulong(a, e) T_flags_le_ulong(a, e, T_CHECK_STOP)
1324 #define T_quiet_le_ulong(a, e) T_flags_le_ulong(a, e, T_CHECK_QUIET)
1325 #define T_step_le_ulong(s, a, e) T_flags_le_ulong(a, e, T_CHECK_STEP(s))
1326 #define T_step_assert_le_ulong(s, a, e) \
1327     T_flags_le_ulong(a, e, T_CHECK_STEP(s) | T_CHECK_STOP)
1328 
1329 #define T_lt_ulong(a, e) T_flags_lt_ulong(a, e, 0)
1330 #define T_assert_lt_ulong(a, e) T_flags_lt_ulong(a, e, T_CHECK_STOP)
1331 #define T_quiet_lt_ulong(a, e) T_flags_lt_ulong(a, e, T_CHECK_QUIET)
1332 #define T_step_lt_ulong(s, a, e) T_flags_lt_ulong(a, e, T_CHECK_STEP(s))
1333 #define T_step_assert_lt_ulong(s, a, e) \
1334     T_flags_lt_ulong(a, e, T_CHECK_STEP(s) | T_CHECK_STOP)
1335 
1336 /** @} */
1337 
1338 /**
1339  * @defgroup RTEMSTestFrameworkChecksLongLong Signed Long Long Integer Checks
1340  *
1341  * @ingroup RTEMSTestFramework
1342  *
1343  * @brief Checks for signed long long integers (long long).
1344  *
1345  * @{
1346  */
1347 
1348 #define T_eq_ll(a, e) T_flags_eq_ll(a, e, 0)
1349 #define T_assert_eq_ll(a, e) T_flags_eq_ll(a, e, T_CHECK_STOP)
1350 #define T_quiet_eq_ll(a, e) T_flags_eq_ll(a, e, T_CHECK_QUIET)
1351 #define T_step_eq_ll(s, a, e) T_flags_eq_ll(a, e, T_CHECK_STEP(s))
1352 #define T_step_assert_eq_ll(s, a, e) \
1353     T_flags_eq_ll(a, e, T_CHECK_STEP(s) | T_CHECK_STOP)
1354 
1355 #define T_ne_ll(a, e) T_flags_ne_ll(a, e, 0)
1356 #define T_assert_ne_ll(a, e) T_flags_ne_ll(a, e, T_CHECK_STOP)
1357 #define T_quiet_ne_ll(a, e) T_flags_ne_ll(a, e, T_CHECK_QUIET)
1358 #define T_step_ne_ll(s, a, e) T_flags_ne_ll(a, e, T_CHECK_STEP(s))
1359 #define T_step_assert_ne_ll(s, a, e) \
1360     T_flags_ne_ll(a, e, T_CHECK_STEP(s) | T_CHECK_STOP)
1361 
1362 #define T_ge_ll(a, e) T_flags_ge_ll(a, e, 0)
1363 #define T_assert_ge_ll(a, e) T_flags_ge_ll(a, e, T_CHECK_STOP)
1364 #define T_quiet_ge_ll(a, e) T_flags_ge_ll(a, e, T_CHECK_QUIET)
1365 #define T_step_ge_ll(s, a, e) T_flags_ge_ll(a, e, T_CHECK_STEP(s))
1366 #define T_step_assert_ge_ll(s, a, e) \
1367     T_flags_ge_ll(a, e, T_CHECK_STEP(s) | T_CHECK_STOP)
1368 
1369 #define T_gt_ll(a, e) T_flags_gt_ll(a, e, 0)
1370 #define T_assert_gt_ll(a, e) T_flags_gt_ll(a, e, T_CHECK_STOP)
1371 #define T_quiet_gt_ll(a, e) T_flags_gt_ll(a, e, T_CHECK_QUIET)
1372 #define T_step_gt_ll(s, a, e) T_flags_gt_ll(a, e, T_CHECK_STEP(s))
1373 #define T_step_assert_gt_ll(s, a, e) \
1374     T_flags_gt_ll(a, e, T_CHECK_STEP(s) | T_CHECK_STOP)
1375 
1376 #define T_le_ll(a, e) T_flags_le_ll(a, e, 0)
1377 #define T_assert_le_ll(a, e) T_flags_le_ll(a, e, T_CHECK_STOP)
1378 #define T_quiet_le_ll(a, e) T_flags_le_ll(a, e, T_CHECK_QUIET)
1379 #define T_step_le_ll(s, a, e) T_flags_le_ll(a, e, T_CHECK_STEP(s))
1380 #define T_step_assert_le_ll(s, a, e) \
1381     T_flags_le_ll(a, e, T_CHECK_STEP(s) | T_CHECK_STOP)
1382 
1383 #define T_lt_ll(a, e) T_flags_lt_ll(a, e, 0)
1384 #define T_assert_lt_ll(a, e) T_flags_lt_ll(a, e, T_CHECK_STOP)
1385 #define T_quiet_lt_ll(a, e) T_flags_lt_ll(a, e, T_CHECK_QUIET)
1386 #define T_step_lt_ll(s, a, e) T_flags_lt_ll(a, e, T_CHECK_STEP(s))
1387 #define T_step_assert_lt_ll(s, a, e) \
1388     T_flags_lt_ll(a, e, T_CHECK_STEP(s) | T_CHECK_STOP)
1389 
1390 /** @} */
1391 
1392 /**
1393  * @defgroup RTEMSTestFrameworkChecksULongLong Unsigned Long Long Integer Checks
1394  *
1395  * @ingroup RTEMSTestFramework
1396  *
1397  * @brief Checks for unsigned long long integers (unsigned long long).
1398  *
1399  * @{
1400  */
1401 
1402 #define T_eq_ull(a, e) T_flags_eq_ull(a, e, 0)
1403 #define T_assert_eq_ull(a, e) T_flags_eq_ull(a, e, T_CHECK_STOP)
1404 #define T_quiet_eq_ull(a, e) T_flags_eq_ull(a, e, T_CHECK_QUIET)
1405 #define T_step_eq_ull(s, a, e) T_flags_eq_ull(a, e, T_CHECK_STEP(s))
1406 #define T_step_assert_eq_ull(s, a, e) \
1407     T_flags_eq_ull(a, e, T_CHECK_STEP(s) | T_CHECK_STOP)
1408 
1409 #define T_ne_ull(a, e) T_flags_ne_ull(a, e, 0)
1410 #define T_assert_ne_ull(a, e) T_flags_ne_ull(a, e, T_CHECK_STOP)
1411 #define T_quiet_ne_ull(a, e) T_flags_ne_ull(a, e, T_CHECK_QUIET)
1412 #define T_step_ne_ull(s, a, e) T_flags_ne_ull(a, e, T_CHECK_STEP(s))
1413 #define T_step_assert_ne_ull(s, a, e) \
1414     T_flags_ne_ull(a, e, T_CHECK_STEP(s) | T_CHECK_STOP)
1415 
1416 #define T_ge_ull(a, e) T_flags_ge_ull(a, e, 0)
1417 #define T_assert_ge_ull(a, e) T_flags_ge_ull(a, e, T_CHECK_STOP)
1418 #define T_quiet_ge_ull(a, e) T_flags_ge_ull(a, e, T_CHECK_QUIET)
1419 #define T_step_ge_ull(s, a, e) T_flags_ge_ull(a, e, T_CHECK_STEP(s))
1420 #define T_step_assert_ge_ull(s, a, e) \
1421     T_flags_ge_ull(a, e, T_CHECK_STEP(s) | T_CHECK_STOP)
1422 
1423 #define T_gt_ull(a, e) T_flags_gt_ull(a, e, 0)
1424 #define T_assert_gt_ull(a, e) T_flags_gt_ull(a, e, T_CHECK_STOP)
1425 #define T_quiet_gt_ull(a, e) T_flags_gt_ull(a, e, T_CHECK_QUIET)
1426 #define T_step_gt_ull(s, a, e) T_flags_gt_ull(a, e, T_CHECK_STEP(s))
1427 #define T_step_assert_gt_ull(s, a, e) \
1428     T_flags_gt_ull(a, e, T_CHECK_STEP(s) | T_CHECK_STOP)
1429 
1430 #define T_le_ull(a, e) T_flags_le_ull(a, e, 0)
1431 #define T_assert_le_ull(a, e) T_flags_le_ull(a, e, T_CHECK_STOP)
1432 #define T_quiet_le_ull(a, e) T_flags_le_ull(a, e, T_CHECK_QUIET)
1433 #define T_step_le_ull(s, a, e) T_flags_le_ull(a, e, T_CHECK_STEP(s))
1434 #define T_step_assert_le_ull(s, a, e) \
1435     T_flags_le_ull(a, e, T_CHECK_STEP(s) | T_CHECK_STOP)
1436 
1437 #define T_lt_ull(a, e) T_flags_lt_ull(a, e, 0)
1438 #define T_assert_lt_ull(a, e) T_flags_lt_ull(a, e, T_CHECK_STOP)
1439 #define T_quiet_lt_ull(a, e) T_flags_lt_ull(a, e, T_CHECK_QUIET)
1440 #define T_step_lt_ull(s, a, e) T_flags_lt_ull(a, e, T_CHECK_STEP(s))
1441 #define T_step_assert_lt_ull(s, a, e) \
1442     T_flags_lt_ull(a, e, T_CHECK_STEP(s) | T_CHECK_STOP)
1443 
1444 /** @} */
1445 
1446 /**
1447  * @defgroup RTEMSTestFrameworkChecksInt8 Signed 8-Bit Integer Checks
1448  *
1449  * @ingroup RTEMSTestFramework
1450  *
1451  * @brief Checks for signed 8-bit integers (int8_t).
1452  *
1453  * @{
1454  */
1455 
1456 #define T_eq_i8(a, e) T_flags_eq_int(a, e, 0)
1457 #define T_assert_eq_i8(a, e) T_flags_eq_int(a, e, T_CHECK_STOP)
1458 #define T_quiet_eq_i8(a, e) T_flags_eq_int(a, e, T_CHECK_QUIET)
1459 #define T_step_eq_i8(s, a, e) T_flags_eq_int(a, e, T_CHECK_STEP(s))
1460 #define T_step_assert_eq_i8(s, a, e) \
1461     T_flags_eq_int(a, e, T_CHECK_STEP(s) | T_CHECK_STOP)
1462 
1463 #define T_ne_i8(a, e) T_flags_ne_int(a, e, 0)
1464 #define T_assert_ne_i8(a, e) T_flags_ne_int(a, e, T_CHECK_STOP)
1465 #define T_quiet_ne_i8(a, e) T_flags_ne_int(a, e, T_CHECK_QUIET)
1466 #define T_step_ne_i8(s, a, e) T_flags_ne_int(a, e, T_CHECK_STEP(s))
1467 #define T_step_assert_ne_i8(s, a, e) \
1468     T_flags_ne_int(a, e, T_CHECK_STEP(s) | T_CHECK_STOP)
1469 
1470 #define T_ge_i8(a, e) T_flags_ge_int(a, e, 0)
1471 #define T_assert_ge_i8(a, e) T_flags_ge_int(a, e, T_CHECK_STOP)
1472 #define T_quiet_ge_i8(a, e) T_flags_ge_int(a, e, T_CHECK_QUIET)
1473 #define T_step_ge_i8(s, a, e) T_flags_ge_int(a, e, T_CHECK_STEP(s))
1474 #define T_step_assert_ge_i8(s, a, e) \
1475     T_flags_ge_int(a, e, T_CHECK_STEP(s) | T_CHECK_STOP)
1476 
1477 #define T_gt_i8(a, e) T_flags_gt_int(a, e, 0)
1478 #define T_assert_gt_i8(a, e) T_flags_gt_int(a, e, T_CHECK_STOP)
1479 #define T_quiet_gt_i8(a, e) T_flags_gt_int(a, e, T_CHECK_QUIET)
1480 #define T_step_gt_i8(s, a, e) T_flags_gt_int(a, e, T_CHECK_STEP(s))
1481 #define T_step_assert_gt_i8(s, a, e) \
1482     T_flags_gt_int(a, e, T_CHECK_STEP(s) | T_CHECK_STOP)
1483 
1484 #define T_le_i8(a, e) T_flags_le_int(a, e, 0)
1485 #define T_assert_le_i8(a, e) T_flags_le_int(a, e, T_CHECK_STOP)
1486 #define T_quiet_le_i8(a, e) T_flags_le_int(a, e, T_CHECK_QUIET)
1487 #define T_step_le_i8(s, a, e) T_flags_le_int(a, e, T_CHECK_STEP(s))
1488 #define T_step_assert_le_i8(s, a, e) \
1489     T_flags_le_int(a, e, T_CHECK_STEP(s) | T_CHECK_STOP)
1490 
1491 #define T_lt_i8(a, e) T_flags_lt_int(a, e, 0)
1492 #define T_assert_lt_i8(a, e) T_flags_lt_int(a, e, T_CHECK_STOP)
1493 #define T_quiet_lt_i8(a, e) T_flags_lt_int(a, e, T_CHECK_QUIET)
1494 #define T_step_lt_i8(s, a, e) T_flags_lt_int(a, e, T_CHECK_STEP(s))
1495 #define T_step_assert_lt_i8(s, a, e) \
1496     T_flags_lt_int(a, e, T_CHECK_STEP(s) | T_CHECK_STOP)
1497 
1498 /** @} */
1499 
1500 /**
1501  * @defgroup RTEMSTestFrameworkChecksUInt8 Unsigned 8-Bit Integer Checks
1502  *
1503  * @ingroup RTEMSTestFramework
1504  *
1505  * @brief Checks for unsigned 8-bit integers (uint8_t).
1506  *
1507  * @{
1508  */
1509 
1510 #define T_eq_u8(a, e) T_flags_eq_uint(a, e, 0)
1511 #define T_assert_eq_u8(a, e) T_flags_eq_uint(a, e, T_CHECK_STOP)
1512 #define T_quiet_eq_u8(a, e) T_flags_eq_uint(a, e, T_CHECK_QUIET)
1513 #define T_step_eq_u8(s, a, e) T_flags_eq_uint(a, e, T_CHECK_STEP(s))
1514 #define T_step_assert_eq_u8(s, a, e) \
1515     T_flags_eq_uint(a, e, T_CHECK_STEP(s) | T_CHECK_STOP)
1516 
1517 #define T_ne_u8(a, e) T_flags_ne_uint(a, e, 0)
1518 #define T_assert_ne_u8(a, e) T_flags_ne_uint(a, e, T_CHECK_STOP)
1519 #define T_quiet_ne_u8(a, e) T_flags_ne_uint(a, e, T_CHECK_QUIET)
1520 #define T_step_ne_u8(s, a, e) T_flags_ne_uint(a, e, T_CHECK_STEP(s))
1521 #define T_step_assert_ne_u8(s, a, e) \
1522     T_flags_ne_uint(a, e, T_CHECK_STEP(s) | T_CHECK_STOP)
1523 
1524 #define T_ge_u8(a, e) T_flags_ge_uint(a, e, 0)
1525 #define T_assert_ge_u8(a, e) T_flags_ge_uint(a, e, T_CHECK_STOP)
1526 #define T_quiet_ge_u8(a, e) T_flags_ge_uint(a, e, T_CHECK_QUIET)
1527 #define T_step_ge_u8(s, a, e) T_flags_ge_uint(a, e, T_CHECK_STEP(s))
1528 #define T_step_assert_ge_u8(s, a, e) \
1529     T_flags_ge_uint(a, e, T_CHECK_STEP(s) | T_CHECK_STOP)
1530 
1531 #define T_gt_u8(a, e) T_flags_gt_uint(a, e, 0)
1532 #define T_assert_gt_u8(a, e) T_flags_gt_uint(a, e, T_CHECK_STOP)
1533 #define T_quiet_gt_u8(a, e) T_flags_gt_uint(a, e, T_CHECK_QUIET)
1534 #define T_step_gt_u8(s, a, e) T_flags_gt_uint(a, e, T_CHECK_STEP(s))
1535 #define T_step_assert_gt_u8(s, a, e) \
1536     T_flags_gt_uint(a, e, T_CHECK_STEP(s) | T_CHECK_STOP)
1537 
1538 #define T_le_u8(a, e) T_flags_le_uint(a, e, 0)
1539 #define T_assert_le_u8(a, e) T_flags_le_uint(a, e, T_CHECK_STOP)
1540 #define T_quiet_le_u8(a, e) T_flags_le_uint(a, e, T_CHECK_QUIET)
1541 #define T_step_le_u8(s, a, e) T_flags_le_uint(a, e, T_CHECK_STEP(s))
1542 #define T_step_assert_le_u8(s, a, e) \
1543     T_flags_le_uint(a, e, T_CHECK_STEP(s) | T_CHECK_STOP)
1544 
1545 #define T_lt_u8(a, e) T_flags_lt_uint(a, e, 0)
1546 #define T_assert_lt_u8(a, e) T_flags_lt_uint(a, e, T_CHECK_STOP)
1547 #define T_quiet_lt_u8(a, e) T_flags_lt_uint(a, e, T_CHECK_QUIET)
1548 #define T_step_lt_u8(s, a, e) T_flags_lt_uint(a, e, T_CHECK_STEP(s))
1549 #define T_step_assert_lt_u8(s, a, e) \
1550     T_flags_lt_uint(a, e, T_CHECK_STEP(s) | T_CHECK_STOP)
1551 
1552 /** @} */
1553 
1554 /**
1555  * @defgroup RTEMSTestFrameworkChecksInt16 Signed 16-Bit Integer Checks
1556  *
1557  * @ingroup RTEMSTestFramework
1558  *
1559  * @brief Checks for signed 16-bit integers (int16_t).
1560  *
1561  * @{
1562  */
1563 
1564 #define T_eq_i16(a, e) T_flags_eq_int(a, e, 0)
1565 #define T_assert_eq_i16(a, e) T_flags_eq_int(a, e, T_CHECK_STOP)
1566 #define T_quiet_eq_i16(a, e) T_flags_eq_int(a, e, T_CHECK_QUIET)
1567 #define T_step_eq_i16(s, a, e) T_flags_eq_int(a, e, T_CHECK_STEP(s))
1568 #define T_step_assert_eq_i16(s, a, e) \
1569     T_flags_eq_int(a, e, T_CHECK_STEP(s) | T_CHECK_STOP)
1570 
1571 #define T_ne_i16(a, e) T_flags_ne_int(a, e, 0)
1572 #define T_assert_ne_i16(a, e) T_flags_ne_int(a, e, T_CHECK_STOP)
1573 #define T_quiet_ne_i16(a, e) T_flags_ne_int(a, e, T_CHECK_QUIET)
1574 #define T_step_ne_i16(s, a, e) T_flags_ne_int(a, e, T_CHECK_STEP(s))
1575 #define T_step_assert_ne_i16(s, a, e) \
1576     T_flags_ne_int(a, e, T_CHECK_STEP(s) | T_CHECK_STOP)
1577 
1578 #define T_ge_i16(a, e) T_flags_ge_int(a, e, 0)
1579 #define T_assert_ge_i16(a, e) T_flags_ge_int(a, e, T_CHECK_STOP)
1580 #define T_quiet_ge_i16(a, e) T_flags_ge_int(a, e, T_CHECK_QUIET)
1581 #define T_step_ge_i16(s, a, e) T_flags_ge_int(a, e, T_CHECK_STEP(s))
1582 #define T_step_assert_ge_i16(s, a, e) \
1583     T_flags_ge_int(a, e, T_CHECK_STEP(s) | T_CHECK_STOP)
1584 
1585 #define T_gt_i16(a, e) T_flags_gt_int(a, e, 0)
1586 #define T_assert_gt_i16(a, e) T_flags_gt_int(a, e, T_CHECK_STOP)
1587 #define T_quiet_gt_i16(a, e) T_flags_gt_int(a, e, T_CHECK_QUIET)
1588 #define T_step_gt_i16(s, a, e) T_flags_gt_int(a, e, T_CHECK_STEP(s))
1589 #define T_step_assert_gt_i16(s, a, e) \
1590     T_flags_gt_int(a, e, T_CHECK_STEP(s) | T_CHECK_STOP)
1591 
1592 #define T_le_i16(a, e) T_flags_le_int(a, e, 0)
1593 #define T_assert_le_i16(a, e) T_flags_le_int(a, e, T_CHECK_STOP)
1594 #define T_quiet_le_i16(a, e) T_flags_le_int(a, e, T_CHECK_QUIET)
1595 #define T_step_le_i16(s, a, e) T_flags_le_int(a, e, T_CHECK_STEP(s))
1596 #define T_step_assert_le_i16(s, a, e) \
1597     T_flags_le_int(a, e, T_CHECK_STEP(s) | T_CHECK_STOP)
1598 
1599 #define T_lt_i16(a, e) T_flags_lt_int(a, e, 0)
1600 #define T_assert_lt_i16(a, e) T_flags_lt_int(a, e, T_CHECK_STOP)
1601 #define T_quiet_lt_i16(a, e) T_flags_lt_int(a, e, T_CHECK_QUIET)
1602 #define T_step_lt_i16(s, a, e) T_flags_lt_int(a, e, T_CHECK_STEP(s))
1603 #define T_step_assert_lt_i16(s, a, e) \
1604     T_flags_lt_int(a, e, T_CHECK_STEP(s) | T_CHECK_STOP)
1605 
1606 /** @} */
1607 
1608 /**
1609  * @defgroup RTEMSTestFrameworkChecksUInt16 Unsigned 16-Bit Integer Checks
1610  *
1611  * @ingroup RTEMSTestFramework
1612  *
1613  * @brief Checks for unsigned 16-bit integers (uint16_t).
1614  *
1615  * @{
1616  */
1617 
1618 #define T_eq_u16(a, e) T_flags_eq_uint(a, e, 0)
1619 #define T_assert_eq_u16(a, e) T_flags_eq_uint(a, e, T_CHECK_STOP)
1620 #define T_quiet_eq_u16(a, e) T_flags_eq_uint(a, e, T_CHECK_QUIET)
1621 #define T_step_eq_u16(s, a, e) T_flags_eq_uint(a, e, T_CHECK_STEP(s))
1622 #define T_step_assert_eq_u16(s, a, e) \
1623     T_flags_eq_uint(a, e, T_CHECK_STEP(s) | T_CHECK_STOP)
1624 
1625 #define T_ne_u16(a, e) T_flags_ne_uint(a, e, 0)
1626 #define T_assert_ne_u16(a, e) T_flags_ne_uint(a, e, T_CHECK_STOP)
1627 #define T_quiet_ne_u16(a, e) T_flags_ne_uint(a, e, T_CHECK_QUIET)
1628 #define T_step_ne_u16(s, a, e) T_flags_ne_uint(a, e, T_CHECK_STEP(s))
1629 #define T_step_assert_ne_u16(s, a, e) \
1630     T_flags_ne_uint(a, e, T_CHECK_STEP(s) | T_CHECK_STOP)
1631 
1632 #define T_ge_u16(a, e) T_flags_ge_uint(a, e, 0)
1633 #define T_assert_ge_u16(a, e) T_flags_ge_uint(a, e, T_CHECK_STOP)
1634 #define T_quiet_ge_u16(a, e) T_flags_ge_uint(a, e, T_CHECK_QUIET)
1635 #define T_step_ge_u16(s, a, e) T_flags_ge_uint(a, e, T_CHECK_STEP(s))
1636 #define T_step_assert_ge_u16(s, a, e) \
1637     T_flags_ge_uint(a, e, T_CHECK_STEP(s) | T_CHECK_STOP)
1638 
1639 #define T_gt_u16(a, e) T_flags_gt_uint(a, e, 0)
1640 #define T_assert_gt_u16(a, e) T_flags_gt_uint(a, e, T_CHECK_STOP)
1641 #define T_quiet_gt_u16(a, e) T_flags_gt_uint(a, e, T_CHECK_QUIET)
1642 #define T_step_gt_u16(s, a, e) T_flags_gt_uint(a, e, T_CHECK_STEP(s))
1643 #define T_step_assert_gt_u16(s, a, e) \
1644     T_flags_gt_uint(a, e, T_CHECK_STEP(s) | T_CHECK_STOP)
1645 
1646 #define T_le_u16(a, e) T_flags_le_uint(a, e, 0)
1647 #define T_assert_le_u16(a, e) T_flags_le_uint(a, e, T_CHECK_STOP)
1648 #define T_quiet_le_u16(a, e) T_flags_le_uint(a, e, T_CHECK_QUIET)
1649 #define T_step_le_u16(s, a, e) T_flags_le_uint(a, e, T_CHECK_STEP(s))
1650 #define T_step_assert_le_u16(s, a, e) \
1651     T_flags_le_uint(a, e, T_CHECK_STEP(s) | T_CHECK_STOP)
1652 
1653 #define T_lt_u16(a, e) T_flags_lt_uint(a, e, 0)
1654 #define T_assert_lt_u16(a, e) T_flags_lt_uint(a, e, T_CHECK_STOP)
1655 #define T_quiet_lt_u16(a, e) T_flags_lt_uint(a, e, T_CHECK_QUIET)
1656 #define T_step_lt_u16(s, a, e) T_flags_lt_uint(a, e, T_CHECK_STEP(s))
1657 #define T_step_assert_lt_u16(s, a, e) \
1658     T_flags_lt_uint(a, e, T_CHECK_STEP(s) | T_CHECK_STOP)
1659 
1660 /** @} */
1661 
1662 /**
1663  * @defgroup RTEMSTestFrameworkChecksInt32 Signed 32-Bit Integer Checks
1664  *
1665  * @ingroup RTEMSTestFramework
1666  *
1667  * @brief Checks for signed 32-bit integers (int32_t).
1668  *
1669  * @{
1670  */
1671 
1672 #define T_eq_i32(a, e) T_flags_eq_long(a, e, 0)
1673 #define T_assert_eq_i32(a, e) T_flags_eq_long(a, e, T_CHECK_STOP)
1674 #define T_quiet_eq_i32(a, e) T_flags_eq_long(a, e, T_CHECK_QUIET)
1675 #define T_step_eq_i32(s, a, e) T_flags_eq_long(a, e, T_CHECK_STEP(s))
1676 #define T_step_assert_eq_i32(s, a, e) \
1677     T_flags_eq_long(a, e, T_CHECK_STEP(s) | T_CHECK_STOP)
1678 
1679 #define T_ne_i32(a, e) T_flags_ne_long(a, e, 0)
1680 #define T_assert_ne_i32(a, e) T_flags_ne_long(a, e, T_CHECK_STOP)
1681 #define T_quiet_ne_i32(a, e) T_flags_ne_long(a, e, T_CHECK_QUIET)
1682 #define T_step_ne_i32(s, a, e) T_flags_ne_long(a, e, T_CHECK_STEP(s))
1683 #define T_step_assert_ne_i32(s, a, e) \
1684     T_flags_ne_long(a, e, T_CHECK_STEP(s) | T_CHECK_STOP)
1685 
1686 #define T_ge_i32(a, e) T_flags_ge_long(a, e, 0)
1687 #define T_assert_ge_i32(a, e) T_flags_ge_long(a, e, T_CHECK_STOP)
1688 #define T_quiet_ge_i32(a, e) T_flags_ge_long(a, e, T_CHECK_QUIET)
1689 #define T_step_ge_i32(s, a, e) T_flags_ge_long(a, e, T_CHECK_STEP(s))
1690 #define T_step_assert_ge_i32(s, a, e) \
1691     T_flags_ge_long(a, e, T_CHECK_STEP(s) | T_CHECK_STOP)
1692 
1693 #define T_gt_i32(a, e) T_flags_gt_long(a, e, 0)
1694 #define T_assert_gt_i32(a, e) T_flags_gt_long(a, e, T_CHECK_STOP)
1695 #define T_quiet_gt_i32(a, e) T_flags_gt_long(a, e, T_CHECK_QUIET)
1696 #define T_step_gt_i32(s, a, e) T_flags_gt_long(a, e, T_CHECK_STEP(s))
1697 #define T_step_assert_gt_i32(s, a, e) \
1698     T_flags_gt_long(a, e, T_CHECK_STEP(s) | T_CHECK_STOP)
1699 
1700 #define T_le_i32(a, e) T_flags_le_long(a, e, 0)
1701 #define T_assert_le_i32(a, e) T_flags_le_long(a, e, T_CHECK_STOP)
1702 #define T_quiet_le_i32(a, e) T_flags_le_long(a, e, T_CHECK_QUIET)
1703 #define T_step_le_i32(s, a, e) T_flags_le_long(a, e, T_CHECK_STEP(s))
1704 #define T_step_assert_le_i32(s, a, e) \
1705     T_flags_le_long(a, e, T_CHECK_STEP(s) | T_CHECK_STOP)
1706 
1707 #define T_lt_i32(a, e) T_flags_lt_long(a, e, 0)
1708 #define T_assert_lt_i32(a, e) T_flags_lt_long(a, e, T_CHECK_STOP)
1709 #define T_quiet_lt_i32(a, e) T_flags_lt_long(a, e, T_CHECK_QUIET)
1710 #define T_step_lt_i32(s, a, e) T_flags_lt_long(a, e, T_CHECK_STEP(s))
1711 #define T_step_assert_lt_i32(s, a, e) \
1712     T_flags_lt_long(a, e, T_CHECK_STEP(s) | T_CHECK_STOP)
1713 
1714 /** @} */
1715 
1716 /**
1717  * @defgroup RTEMSTestFrameworkChecksUInt32 Unsigned 32-Bit Integer Checks
1718  *
1719  * @ingroup RTEMSTestFramework
1720  *
1721  * @brief Checks for unsigned 32-bit integers (uint32_t).
1722  *
1723  * @{
1724  */
1725 
1726 #define T_eq_u32(a, e) T_flags_eq_ulong(a, e, 0)
1727 #define T_assert_eq_u32(a, e) T_flags_eq_ulong(a, e, T_CHECK_STOP)
1728 #define T_quiet_eq_u32(a, e) T_flags_eq_ulong(a, e, T_CHECK_QUIET)
1729 #define T_step_eq_u32(s, a, e) T_flags_eq_ulong(a, e, T_CHECK_STEP(s))
1730 #define T_step_assert_eq_u32(s, a, e) \
1731     T_flags_eq_ulong(a, e, T_CHECK_STEP(s) | T_CHECK_STOP)
1732 
1733 #define T_ne_u32(a, e) T_flags_ne_ulong(a, e, 0)
1734 #define T_assert_ne_u32(a, e) T_flags_ne_ulong(a, e, T_CHECK_STOP)
1735 #define T_quiet_ne_u32(a, e) T_flags_ne_ulong(a, e, T_CHECK_QUIET)
1736 #define T_step_ne_u32(s, a, e) T_flags_ne_ulong(a, e, T_CHECK_STEP(s))
1737 #define T_step_assert_ne_u32(s, a, e) \
1738     T_flags_ne_ulong(a, e, T_CHECK_STEP(s) | T_CHECK_STOP)
1739 
1740 #define T_ge_u32(a, e) T_flags_ge_ulong(a, e, 0)
1741 #define T_assert_ge_u32(a, e) T_flags_ge_ulong(a, e, T_CHECK_STOP)
1742 #define T_quiet_ge_u32(a, e) T_flags_ge_ulong(a, e, T_CHECK_QUIET)
1743 #define T_step_ge_u32(s, a, e) T_flags_ge_ulong(a, e, T_CHECK_STEP(s))
1744 #define T_step_assert_ge_u32(s, a, e) \
1745     T_flags_ge_ulong(a, e, T_CHECK_STEP(s) | T_CHECK_STOP)
1746 
1747 #define T_gt_u32(a, e) T_flags_gt_ulong(a, e, 0)
1748 #define T_assert_gt_u32(a, e) T_flags_gt_ulong(a, e, T_CHECK_STOP)
1749 #define T_quiet_gt_u32(a, e) T_flags_gt_ulong(a, e, T_CHECK_QUIET)
1750 #define T_step_gt_u32(s, a, e) T_flags_gt_ulong(a, e, T_CHECK_STEP(s))
1751 #define T_step_assert_gt_u32(s, a, e) \
1752     T_flags_gt_ulong(a, e, T_CHECK_STEP(s) | T_CHECK_STOP)
1753 
1754 #define T_le_u32(a, e) T_flags_le_ulong(a, e, 0)
1755 #define T_assert_le_u32(a, e) T_flags_le_ulong(a, e, T_CHECK_STOP)
1756 #define T_quiet_le_u32(a, e) T_flags_le_ulong(a, e, T_CHECK_QUIET)
1757 #define T_step_le_u32(s, a, e) T_flags_le_ulong(a, e, T_CHECK_STEP(s))
1758 #define T_step_assert_le_u32(s, a, e) \
1759     T_flags_le_ulong(a, e, T_CHECK_STEP(s) | T_CHECK_STOP)
1760 
1761 #define T_lt_u32(a, e) T_flags_lt_ulong(a, e, 0)
1762 #define T_assert_lt_u32(a, e) T_flags_lt_ulong(a, e, T_CHECK_STOP)
1763 #define T_quiet_lt_u32(a, e) T_flags_lt_ulong(a, e, T_CHECK_QUIET)
1764 #define T_step_lt_u32(s, a, e) T_flags_lt_ulong(a, e, T_CHECK_STEP(s))
1765 #define T_step_assert_lt_u32(s, a, e) \
1766     T_flags_lt_ulong(a, e, T_CHECK_STEP(s) | T_CHECK_STOP)
1767 
1768 /** @} */
1769 
1770 /**
1771  * @defgroup RTEMSTestFrameworkChecksInt64 Signed 64-Bit Integer Checks
1772  *
1773  * @ingroup RTEMSTestFramework
1774  *
1775  * @brief Checks for signed 64-bit integers (int64_t).
1776  *
1777  * @{
1778  */
1779 
1780 #define T_eq_i64(a, e) T_flags_eq_ll(a, e, 0)
1781 #define T_assert_eq_i64(a, e) T_flags_eq_ll(a, e, T_CHECK_STOP)
1782 #define T_quiet_eq_i64(a, e) T_flags_eq_ll(a, e, T_CHECK_QUIET)
1783 #define T_step_eq_i64(s, a, e) T_flags_eq_ll(a, e, T_CHECK_STEP(s))
1784 #define T_step_assert_eq_i64(s, a, e) \
1785     T_flags_eq_ll(a, e, T_CHECK_STEP(s) | T_CHECK_STOP)
1786 
1787 #define T_ne_i64(a, e) T_flags_ne_ll(a, e, 0)
1788 #define T_assert_ne_i64(a, e) T_flags_ne_ll(a, e, T_CHECK_STOP)
1789 #define T_quiet_ne_i64(a, e) T_flags_ne_ll(a, e, T_CHECK_QUIET)
1790 #define T_step_ne_i64(s, a, e) T_flags_ne_ll(a, e, T_CHECK_STEP(s))
1791 #define T_step_assert_ne_i64(s, a, e) \
1792     T_flags_ne_ll(a, e, T_CHECK_STEP(s) | T_CHECK_STOP)
1793 
1794 #define T_ge_i64(a, e) T_flags_ge_ll(a, e, 0)
1795 #define T_assert_ge_i64(a, e) T_flags_ge_ll(a, e, T_CHECK_STOP)
1796 #define T_quiet_ge_i64(a, e) T_flags_ge_ll(a, e, T_CHECK_QUIET)
1797 #define T_step_ge_i64(s, a, e) T_flags_ge_ll(a, e, T_CHECK_STEP(s))
1798 #define T_step_assert_ge_i64(s, a, e) \
1799     T_flags_ge_ll(a, e, T_CHECK_STEP(s) | T_CHECK_STOP)
1800 
1801 #define T_gt_i64(a, e) T_flags_gt_ll(a, e, 0)
1802 #define T_assert_gt_i64(a, e) T_flags_gt_ll(a, e, T_CHECK_STOP)
1803 #define T_quiet_gt_i64(a, e) T_flags_gt_ll(a, e, T_CHECK_QUIET)
1804 #define T_step_gt_i64(s, a, e) T_flags_gt_ll(a, e, T_CHECK_STEP(s))
1805 #define T_step_assert_gt_i64(s, a, e) \
1806     T_flags_gt_ll(a, e, T_CHECK_STEP(s) | T_CHECK_STOP)
1807 
1808 #define T_le_i64(a, e) T_flags_le_ll(a, e, 0)
1809 #define T_assert_le_i64(a, e) T_flags_le_ll(a, e, T_CHECK_STOP)
1810 #define T_quiet_le_i64(a, e) T_flags_le_ll(a, e, T_CHECK_QUIET)
1811 #define T_step_le_i64(s, a, e) T_flags_le_ll(a, e, T_CHECK_STEP(s))
1812 #define T_step_assert_le_i64(s, a, e) \
1813     T_flags_le_ll(a, e, T_CHECK_STEP(s) | T_CHECK_STOP)
1814 
1815 #define T_lt_i64(a, e) T_flags_lt_ll(a, e, 0)
1816 #define T_assert_lt_i64(a, e) T_flags_lt_ll(a, e, T_CHECK_STOP)
1817 #define T_quiet_lt_i64(a, e) T_flags_lt_ll(a, e, T_CHECK_QUIET)
1818 #define T_step_lt_i64(s, a, e) T_flags_lt_ll(a, e, T_CHECK_STEP(s))
1819 #define T_step_assert_lt_i64(s, a, e) \
1820     T_flags_lt_ll(a, e, T_CHECK_STEP(s) | T_CHECK_STOP)
1821 
1822 /** @} */
1823 
1824 /**
1825  * @defgroup RTEMSTestFrameworkChecksUInt64 Unsigned 64-Bit Integer Checks
1826  *
1827  * @ingroup RTEMSTestFramework
1828  *
1829  * @brief Checks for unsigned 64-bit integers (uint64_t).
1830  *
1831  * @{
1832  */
1833 
1834 #define T_eq_u64(a, e) T_flags_eq_ull(a, e, 0)
1835 #define T_assert_eq_u64(a, e) T_flags_eq_ull(a, e, T_CHECK_STOP)
1836 #define T_quiet_eq_u64(a, e) T_flags_eq_ull(a, e, T_CHECK_QUIET)
1837 #define T_step_eq_u64(s, a, e) T_flags_eq_ull(a, e, T_CHECK_STEP(s))
1838 #define T_step_assert_eq_u64(s, a, e) \
1839     T_flags_eq_ull(a, e, T_CHECK_STEP(s) | T_CHECK_STOP)
1840 
1841 #define T_ne_u64(a, e) T_flags_ne_ull(a, e, 0)
1842 #define T_assert_ne_u64(a, e) T_flags_ne_ull(a, e, T_CHECK_STOP)
1843 #define T_quiet_ne_u64(a, e) T_flags_ne_ull(a, e, T_CHECK_QUIET)
1844 #define T_step_ne_u64(s, a, e) T_flags_ne_ull(a, e, T_CHECK_STEP(s))
1845 #define T_step_assert_ne_u64(s, a, e) \
1846     T_flags_ne_ull(a, e, T_CHECK_STEP(s) | T_CHECK_STOP)
1847 
1848 #define T_ge_u64(a, e) T_flags_ge_ull(a, e, 0)
1849 #define T_assert_ge_u64(a, e) T_flags_ge_ull(a, e, T_CHECK_STOP)
1850 #define T_quiet_ge_u64(a, e) T_flags_ge_ull(a, e, T_CHECK_QUIET)
1851 #define T_step_ge_u64(s, a, e) T_flags_ge_ull(a, e, T_CHECK_STEP(s))
1852 #define T_step_assert_ge_u64(s, a, e) \
1853     T_flags_ge_ull(a, e, T_CHECK_STEP(s) | T_CHECK_STOP)
1854 
1855 #define T_gt_u64(a, e) T_flags_gt_ull(a, e, 0)
1856 #define T_assert_gt_u64(a, e) T_flags_gt_ull(a, e, T_CHECK_STOP)
1857 #define T_quiet_gt_u64(a, e) T_flags_gt_ull(a, e, T_CHECK_QUIET)
1858 #define T_step_gt_u64(s, a, e) T_flags_gt_ull(a, e, T_CHECK_STEP(s))
1859 #define T_step_assert_gt_u64(s, a, e) \
1860     T_flags_gt_ull(a, e, T_CHECK_STEP(s) | T_CHECK_STOP)
1861 
1862 #define T_le_u64(a, e) T_flags_le_ull(a, e, 0)
1863 #define T_assert_le_u64(a, e) T_flags_le_ull(a, e, T_CHECK_STOP)
1864 #define T_quiet_le_u64(a, e) T_flags_le_ull(a, e, T_CHECK_QUIET)
1865 #define T_step_le_u64(s, a, e) T_flags_le_ull(a, e, T_CHECK_STEP(s))
1866 #define T_step_assert_le_u64(s, a, e) \
1867     T_flags_le_ull(a, e, T_CHECK_STEP(s) | T_CHECK_STOP)
1868 
1869 #define T_lt_u64(a, e) T_flags_lt_ull(a, e, 0)
1870 #define T_assert_lt_u64(a, e) T_flags_lt_ull(a, e, T_CHECK_STOP)
1871 #define T_quiet_lt_u64(a, e) T_flags_lt_ull(a, e, T_CHECK_QUIET)
1872 #define T_step_lt_u64(s, a, e) T_flags_lt_ull(a, e, T_CHECK_STEP(s))
1873 #define T_step_assert_lt_u64(s, a, e) \
1874     T_flags_lt_ull(a, e, T_CHECK_STEP(s) | T_CHECK_STOP)
1875 
1876 /** @} */
1877 
1878 /**
1879  * @defgroup RTEMSTestFrameworkChecksIntptr Signed Pointer Value Checks
1880  *
1881  * @ingroup RTEMSTestFramework
1882  *
1883  * @brief Checks for signed pointer values (intptr_t).
1884  *
1885  * @{
1886  */
1887 
1888 #define T_eq_iptr(a, e) T_flags_eq_long(a, e, 0)
1889 #define T_assert_eq_iptr(a, e) T_flags_eq_long(a, e, T_CHECK_STOP)
1890 #define T_quiet_eq_iptr(a, e) T_flags_eq_long(a, e, T_CHECK_QUIET)
1891 #define T_step_eq_iptr(s, a, e) T_flags_eq_long(a, e, T_CHECK_STEP(s))
1892 #define T_step_assert_eq_iptr(s, a, e) \
1893     T_flags_eq_long(a, e, T_CHECK_STEP(s) | T_CHECK_STOP)
1894 
1895 #define T_ne_iptr(a, e) T_flags_ne_long(a, e, 0)
1896 #define T_assert_ne_iptr(a, e) T_flags_ne_long(a, e, T_CHECK_STOP)
1897 #define T_quiet_ne_iptr(a, e) T_flags_ne_long(a, e, T_CHECK_QUIET)
1898 #define T_step_ne_iptr(s, a, e) T_flags_ne_long(a, e, T_CHECK_STEP(s))
1899 #define T_step_assert_ne_iptr(s, a, e) \
1900     T_flags_ne_long(a, e, T_CHECK_STEP(s) | T_CHECK_STOP)
1901 
1902 #define T_ge_iptr(a, e) T_flags_ge_long(a, e, 0)
1903 #define T_assert_ge_iptr(a, e) T_flags_ge_long(a, e, T_CHECK_STOP)
1904 #define T_quiet_ge_iptr(a, e) T_flags_ge_long(a, e, T_CHECK_QUIET)
1905 #define T_step_ge_iptr(s, a, e) T_flags_ge_long(a, e, T_CHECK_STEP(s))
1906 #define T_step_assert_ge_iptr(s, a, e) \
1907     T_flags_ge_long(a, e, T_CHECK_STEP(s) | T_CHECK_STOP)
1908 
1909 #define T_gt_iptr(a, e) T_flags_gt_long(a, e, 0)
1910 #define T_assert_gt_iptr(a, e) T_flags_gt_long(a, e, T_CHECK_STOP)
1911 #define T_quiet_gt_iptr(a, e) T_flags_gt_long(a, e, T_CHECK_QUIET)
1912 #define T_step_gt_iptr(s, a, e) T_flags_gt_long(a, e, T_CHECK_STEP(s))
1913 #define T_step_assert_gt_iptr(s, a, e) \
1914     T_flags_gt_long(a, e, T_CHECK_STEP(s) | T_CHECK_STOP)
1915 
1916 #define T_le_iptr(a, e) T_flags_le_long(a, e, 0)
1917 #define T_assert_le_iptr(a, e) T_flags_le_long(a, e, T_CHECK_STOP)
1918 #define T_quiet_le_iptr(a, e) T_flags_le_long(a, e, T_CHECK_QUIET)
1919 #define T_step_le_iptr(s, a, e) T_flags_le_long(a, e, T_CHECK_STEP(s))
1920 #define T_step_assert_le_iptr(s, a, e) \
1921     T_flags_le_long(a, e, T_CHECK_STEP(s) | T_CHECK_STOP)
1922 
1923 #define T_lt_iptr(a, e) T_flags_lt_long(a, e, 0)
1924 #define T_assert_lt_iptr(a, e) T_flags_lt_long(a, e, T_CHECK_STOP)
1925 #define T_quiet_lt_iptr(a, e) T_flags_lt_long(a, e, T_CHECK_QUIET)
1926 #define T_step_lt_iptr(s, a, e) T_flags_lt_long(a, e, T_CHECK_STEP(s))
1927 #define T_step_assert_lt_iptr(s, a, e) \
1928     T_flags_lt_long(a, e, T_CHECK_STEP(s) | T_CHECK_STOP)
1929 
1930 /** @} */
1931 
1932 /**
1933  * @defgroup RTEMSTestFrameworkChecksUIntptr Unsigned Pointer Value Checks
1934  *
1935  * @ingroup RTEMSTestFramework
1936  *
1937  * @brief Checks for unsigned pointer values (uintptr_t).
1938  *
1939  * @{
1940  */
1941 
1942 #define T_eq_uptr(a, e) T_flags_eq_ulong(a, e, 0)
1943 #define T_assert_eq_uptr(a, e) T_flags_eq_ulong(a, e, T_CHECK_STOP)
1944 #define T_quiet_eq_uptr(a, e) T_flags_eq_ulong(a, e, T_CHECK_QUIET)
1945 #define T_step_eq_uptr(s, a, e) T_flags_eq_ulong(a, e, T_CHECK_STEP(s))
1946 #define T_step_assert_eq_uptr(s, a, e) \
1947     T_flags_eq_ulong(a, e, T_CHECK_STEP(s) | T_CHECK_STOP)
1948 
1949 #define T_ne_uptr(a, e) T_flags_ne_ulong(a, e, 0)
1950 #define T_assert_ne_uptr(a, e) T_flags_ne_ulong(a, e, T_CHECK_STOP)
1951 #define T_quiet_ne_uptr(a, e) T_flags_ne_ulong(a, e, T_CHECK_QUIET)
1952 #define T_step_ne_uptr(s, a, e) T_flags_ne_ulong(a, e, T_CHECK_STEP(s))
1953 #define T_step_assert_ne_uptr(s, a, e) \
1954     T_flags_ne_ulong(a, e, T_CHECK_STEP(s) | T_CHECK_STOP)
1955 
1956 #define T_ge_uptr(a, e) T_flags_ge_ulong(a, e, 0)
1957 #define T_assert_ge_uptr(a, e) T_flags_ge_ulong(a, e, T_CHECK_STOP)
1958 #define T_quiet_ge_uptr(a, e) T_flags_ge_ulong(a, e, T_CHECK_QUIET)
1959 #define T_step_ge_uptr(s, a, e) T_flags_ge_ulong(a, e, T_CHECK_STEP(s))
1960 #define T_step_assert_ge_uptr(s, a, e) \
1961     T_flags_ge_ulong(a, e, T_CHECK_STEP(s) | T_CHECK_STOP)
1962 
1963 #define T_gt_uptr(a, e) T_flags_gt_ulong(a, e, 0)
1964 #define T_assert_gt_uptr(a, e) T_flags_gt_ulong(a, e, T_CHECK_STOP)
1965 #define T_quiet_gt_uptr(a, e) T_flags_gt_ulong(a, e, T_CHECK_QUIET)
1966 #define T_step_gt_uptr(s, a, e) T_flags_gt_ulong(a, e, T_CHECK_STEP(s))
1967 #define T_step_assert_gt_uptr(s, a, e) \
1968     T_flags_gt_ulong(a, e, T_CHECK_STEP(s) | T_CHECK_STOP)
1969 
1970 #define T_le_uptr(a, e) T_flags_le_ulong(a, e, 0)
1971 #define T_assert_le_uptr(a, e) T_flags_le_ulong(a, e, T_CHECK_STOP)
1972 #define T_quiet_le_uptr(a, e) T_flags_le_ulong(a, e, T_CHECK_QUIET)
1973 #define T_step_le_uptr(s, a, e) T_flags_le_ulong(a, e, T_CHECK_STEP(s))
1974 #define T_step_assert_le_uptr(s, a, e) \
1975     T_flags_le_ulong(a, e, T_CHECK_STEP(s) | T_CHECK_STOP)
1976 
1977 #define T_lt_uptr(a, e) T_flags_lt_ulong(a, e, 0)
1978 #define T_assert_lt_uptr(a, e) T_flags_lt_ulong(a, e, T_CHECK_STOP)
1979 #define T_quiet_lt_uptr(a, e) T_flags_lt_ulong(a, e, T_CHECK_QUIET)
1980 #define T_step_lt_uptr(s, a, e) T_flags_lt_ulong(a, e, T_CHECK_STEP(s))
1981 #define T_step_assert_lt_uptr(s, a, e) \
1982     T_flags_lt_ulong(a, e, T_CHECK_STEP(s) | T_CHECK_STOP)
1983 
1984 /** @} */
1985 
1986 /**
1987  * @defgroup RTEMSTestFrameworkChecksSSZ Signed Size Checks
1988  *
1989  * @ingroup RTEMSTestFramework
1990  *
1991  * @brief Checks for signed sizes (ssize_t).
1992  *
1993  * @{
1994  */
1995 
1996 #define T_eq_ssz(a, e) T_flags_eq_long(a, e, 0)
1997 #define T_assert_eq_ssz(a, e) T_flags_eq_long(a, e, T_CHECK_STOP)
1998 #define T_quiet_eq_ssz(a, e) T_flags_eq_long(a, e, T_CHECK_QUIET)
1999 #define T_step_eq_ssz(s, a, e) T_flags_eq_long(a, e, T_CHECK_STEP(s))
2000 #define T_step_assert_eq_ssz(s, a, e) \
2001     T_flags_eq_long(a, e, T_CHECK_STEP(s) | T_CHECK_STOP)
2002 
2003 #define T_ne_ssz(a, e) T_flags_ne_long(a, e, 0)
2004 #define T_assert_ne_ssz(a, e) T_flags_ne_long(a, e, T_CHECK_STOP)
2005 #define T_quiet_ne_ssz(a, e) T_flags_ne_long(a, e, T_CHECK_QUIET)
2006 #define T_step_ne_ssz(s, a, e) T_flags_ne_long(a, e, T_CHECK_STEP(s))
2007 #define T_step_assert_ne_ssz(s, a, e) \
2008     T_flags_ne_long(a, e, T_CHECK_STEP(s) | T_CHECK_STOP)
2009 
2010 #define T_ge_ssz(a, e) T_flags_ge_long(a, e, 0)
2011 #define T_assert_ge_ssz(a, e) T_flags_ge_long(a, e, T_CHECK_STOP)
2012 #define T_quiet_ge_ssz(a, e) T_flags_ge_long(a, e, T_CHECK_QUIET)
2013 #define T_step_ge_ssz(s, a, e) T_flags_ge_long(a, e, T_CHECK_STEP(s))
2014 #define T_step_assert_ge_ssz(s, a, e) \
2015     T_flags_ge_long(a, e, T_CHECK_STEP(s) | T_CHECK_STOP)
2016 
2017 #define T_gt_ssz(a, e) T_flags_gt_long(a, e, 0)
2018 #define T_assert_gt_ssz(a, e) T_flags_gt_long(a, e, T_CHECK_STOP)
2019 #define T_quiet_gt_ssz(a, e) T_flags_gt_long(a, e, T_CHECK_QUIET)
2020 #define T_step_gt_ssz(s, a, e) T_flags_gt_long(a, e, T_CHECK_STEP(s))
2021 #define T_step_assert_gt_ssz(s, a, e) \
2022     T_flags_gt_long(a, e, T_CHECK_STEP(s) | T_CHECK_STOP)
2023 
2024 #define T_le_ssz(a, e) T_flags_le_long(a, e, 0)
2025 #define T_assert_le_ssz(a, e) T_flags_le_long(a, e, T_CHECK_STOP)
2026 #define T_quiet_le_ssz(a, e) T_flags_le_long(a, e, T_CHECK_QUIET)
2027 #define T_step_le_ssz(s, a, e) T_flags_le_long(a, e, T_CHECK_STEP(s))
2028 #define T_step_assert_le_ssz(s, a, e) \
2029     T_flags_le_long(a, e, T_CHECK_STEP(s) | T_CHECK_STOP)
2030 
2031 #define T_lt_ssz(a, e) T_flags_lt_long(a, e, 0)
2032 #define T_assert_lt_ssz(a, e) T_flags_lt_long(a, e, T_CHECK_STOP)
2033 #define T_quiet_lt_ssz(a, e) T_flags_lt_long(a, e, T_CHECK_QUIET)
2034 #define T_step_lt_ssz(s, a, e) T_flags_lt_long(a, e, T_CHECK_STEP(s))
2035 #define T_step_assert_lt_ssz(s, a, e) \
2036     T_flags_lt_long(a, e, T_CHECK_STEP(s) | T_CHECK_STOP)
2037 
2038 /** @} */
2039 
2040 /**
2041  * @defgroup RTEMSTestFrameworkChecksSZ Size Checks
2042  *
2043  * @ingroup RTEMSTestFramework
2044  *
2045  * @brief Checks for sizes (size_t).
2046  *
2047  * @{
2048  */
2049 
2050 #define T_eq_sz(a, e) T_flags_eq_ulong(a, e, 0)
2051 #define T_assert_eq_sz(a, e) T_flags_eq_ulong(a, e, T_CHECK_STOP)
2052 #define T_quiet_eq_sz(a, e) T_flags_eq_ulong(a, e, T_CHECK_QUIET)
2053 #define T_step_eq_sz(s, a, e) T_flags_eq_ulong(a, e, T_CHECK_STEP(s))
2054 #define T_step_assert_eq_sz(s, a, e) \
2055     T_flags_eq_ulong(a, e, T_CHECK_STEP(s) | T_CHECK_STOP)
2056 
2057 #define T_ne_sz(a, e) T_flags_ne_ulong(a, e, 0)
2058 #define T_assert_ne_sz(a, e) T_flags_ne_ulong(a, e, T_CHECK_STOP)
2059 #define T_quiet_ne_sz(a, e) T_flags_ne_ulong(a, e, T_CHECK_QUIET)
2060 #define T_step_ne_sz(s, a, e) T_flags_ne_ulong(a, e, T_CHECK_STEP(s))
2061 #define T_step_assert_ne_sz(s, a, e) \
2062     T_flags_ne_ulong(a, e, T_CHECK_STEP(s) | T_CHECK_STOP)
2063 
2064 #define T_ge_sz(a, e) T_flags_ge_ulong(a, e, 0)
2065 #define T_assert_ge_sz(a, e) T_flags_ge_ulong(a, e, T_CHECK_STOP)
2066 #define T_quiet_ge_sz(a, e) T_flags_ge_ulong(a, e, T_CHECK_QUIET)
2067 #define T_step_ge_sz(s, a, e) T_flags_ge_ulong(a, e, T_CHECK_STEP(s))
2068 #define T_step_assert_ge_sz(s, a, e) \
2069     T_flags_ge_ulong(a, e, T_CHECK_STEP(s) | T_CHECK_STOP)
2070 
2071 #define T_gt_sz(a, e) T_flags_gt_ulong(a, e, 0)
2072 #define T_assert_gt_sz(a, e) T_flags_gt_ulong(a, e, T_CHECK_STOP)
2073 #define T_quiet_gt_sz(a, e) T_flags_gt_ulong(a, e, T_CHECK_QUIET)
2074 #define T_step_gt_sz(s, a, e) T_flags_gt_ulong(a, e, T_CHECK_STEP(s))
2075 #define T_step_assert_gt_sz(s, a, e) \
2076     T_flags_gt_ulong(a, e, T_CHECK_STEP(s) | T_CHECK_STOP)
2077 
2078 #define T_le_sz(a, e) T_flags_le_ulong(a, e, 0)
2079 #define T_assert_le_sz(a, e) T_flags_le_ulong(a, e, T_CHECK_STOP)
2080 #define T_quiet_le_sz(a, e) T_flags_le_ulong(a, e, T_CHECK_QUIET)
2081 #define T_step_le_sz(s, a, e) T_flags_le_ulong(a, e, T_CHECK_STEP(s))
2082 #define T_step_assert_le_sz(s, a, e) \
2083     T_flags_le_ulong(a, e, T_CHECK_STEP(s) | T_CHECK_STOP)
2084 
2085 #define T_lt_sz(a, e) T_flags_lt_ulong(a, e, 0)
2086 #define T_assert_lt_sz(a, e) T_flags_lt_ulong(a, e, T_CHECK_STOP)
2087 #define T_quiet_lt_sz(a, e) T_flags_lt_ulong(a, e, T_CHECK_QUIET)
2088 #define T_step_lt_sz(s, a, e) T_flags_lt_ulong(a, e, T_CHECK_STEP(s))
2089 #define T_step_assert_lt_sz(s, a, e) \
2090     T_flags_lt_ulong(a, e, T_CHECK_STEP(s) | T_CHECK_STOP)
2091 
2092 /** @} */
2093 
2094 /**
2095  * @defgroup RTEMSTestFrameworkChecksPSX POSIX Status and Error Number Checks
2096  *
2097  * @ingroup RTEMSTestFramework
2098  *
2099  * @brief Checks for POSIX status and error numbers.
2100  *
2101  * @{
2102  */
2103 
2104 const char *T_strerror(int);
2105 
2106 #define T_eno(a, e) T_flags_eno(a, e, 0)
2107 #define T_assert_eno(a, e) T_flags_eno(a, e, T_CHECK_STOP)
2108 #define T_quiet_eno(a, e) T_flags_eno(a, e, T_CHECK_QUIET)
2109 #define T_step_eno(s, a, e) T_flags_eno(a, e, T_CHECK_STEP(s))
2110 #define T_step_assert_eno(s, a, e) \
2111     T_flags_eno(a, e, T_CHECK_STEP(s) | T_CHECK_STOP)
2112 
2113 #define T_eno_success(a) T_flags_eno_success(a, 0)
2114 #define T_assert_eno_success(a) T_flags_eno_success(a, T_CHECK_STOP)
2115 #define T_quiet_eno_success(a) T_flags_eno_success(a, T_CHECK_QUIET)
2116 #define T_step_eno_success(s, a) T_flags_eno_success(a, T_CHECK_STEP(s))
2117 #define T_step_assert_eno_success(s, a) \
2118     T_flags_eno_success(a, T_CHECK_STEP(s) | T_CHECK_STOP)
2119 
2120 #define T_psx_error(a, eno) T_flags_psx_error(a, eno, 0)
2121 #define T_assert_psx_error(a, eno) T_flags_psx_error(a, eno, T_CHECK_STOP)
2122 #define T_quiet_psx_error(a, eno) T_flags_psx_error(a, eno, T_CHECK_QUIET)
2123 #define T_step_psx_error(s, a, eno) T_flags_psx_error(a, eno, T_CHECK_STEP(s))
2124 #define T_step_assert_psx_error(s, a, eno) \
2125     T_flags_psx_error(a, eno, T_CHECK_STEP(s) | T_CHECK_STOP)
2126 
2127 #define T_psx_success(a) T_flags_psx_success(a, 0)
2128 #define T_assert_psx_success(a) T_flags_psx_success(a, T_CHECK_STOP)
2129 #define T_quiet_psx_success(a) T_flags_psx_success(a, T_CHECK_QUIET)
2130 #define T_step_psx_success(s, a) T_flags_psx_success(a, T_CHECK_STEP(s))
2131 #define T_step_assert_psx_success(s, a) \
2132     T_flags_psx_success(a, T_CHECK_STEP(s) | T_CHECK_STOP)
2133 
2134 /** @} */
2135 
2136 #ifdef __rtems__
2137 void T_check_rsc(const T_check_context *, uint32_t, uint32_t);
2138 
2139 #define T_flags_rsc(a, e, flags)                    \
2140 {                                   \
2141     static const T_check_context T_check_instance = {       \
2142         T_FILE_NAME, __LINE__, (flags) | T_CHECK_FMT };     \
2143     T_check_rsc(&T_check_instance, a, e);               \
2144 }
2145 
2146 void T_check_rsc_success(const T_check_context *, uint32_t);
2147 
2148 #define T_flags_rsc_success(a, flags)                   \
2149 {                                   \
2150     static const T_check_context T_check_instance = {       \
2151         T_FILE_NAME, __LINE__, (flags) | T_CHECK_FMT };     \
2152     T_check_rsc_success(&T_check_instance, a);          \
2153 }
2154 
2155 /**
2156  * @defgroup RTEMSTestFrameworkChecksRSC RTEMS Status Code Checks
2157  *
2158  * @ingroup RTEMSTestFramework
2159  *
2160  * @brief Checks for RTEMS status codes (rtems_status_code).
2161  *
2162  * @{
2163  */
2164 
2165 #define T_rsc(a, e) T_flags_rsc(a, e, 0)
2166 #define T_assert_rsc(a, e) T_flags_rsc(a, e, T_CHECK_STOP)
2167 #define T_quiet_rsc(a, e) T_flags_rsc(a, e, T_CHECK_QUIET)
2168 #define T_step_rsc(s, a, e) T_flags_rsc(a, e, T_CHECK_STEP(s))
2169 #define T_step_assert_rsc(s, a, e) \
2170     T_flags_rsc(a, e, T_CHECK_STEP(s) | T_CHECK_STOP)
2171 
2172 #define T_rsc_success(a) T_flags_rsc_success(a, 0)
2173 #define T_assert_rsc_success(a) T_flags_rsc_success(a, T_CHECK_STOP)
2174 #define T_quiet_rsc_success(a) T_flags_rsc_success(a, T_CHECK_QUIET)
2175 #define T_step_rsc_success(s, a) T_flags_rsc_success(a, T_CHECK_STEP(s))
2176 #define T_step_assert_rsc_success(s, a) \
2177     T_flags_rsc_success(a, T_CHECK_STEP(s) | T_CHECK_STOP)
2178 
2179 /** @} */
2180 #endif /* __rtems__ */
2181 
2182 void T_plan(unsigned int);
2183 
2184 extern const T_fixture T_empty_fixture;
2185 
2186 void T_push_plan(T_fixture_node *, unsigned int);
2187 
2188 void T_pop_plan(void);
2189 
2190 void T_check_step(const T_check_context *, unsigned int);
2191 
2192 #define T_flags_step(a, flags)                      \
2193 {                                   \
2194     static const T_check_context T_check_instance = {       \
2195         T_FILE_NAME, __LINE__, (flags) | T_CHECK_FMT };     \
2196     T_check_step(&T_check_instance, a);             \
2197 }
2198 
2199 #define T_step(e) T_flags_step(e, 0)
2200 #define T_step_assert(e) T_flags_step(e, T_CHECK_STOP)
2201 
2202 /**
2203  * @defgroup RTEMSTestFrameworkTime Time Services
2204  *
2205  * @ingroup RTEMSTestFramework
2206  *
2207  * @brief Time service functions.
2208  *
2209  * @{
2210  */
2211 
2212 #ifdef __rtems__
2213 typedef CPU_Counter_ticks T_ticks;
2214 #else
2215 typedef unsigned long T_ticks;
2216 #endif
2217 
2218 typedef uint64_t T_time;
2219 
2220 /* More than enough for sizeof("18446744073.709552765") */
2221 typedef char T_time_string[24];
2222 
2223 const char *T_time_to_string_ns(T_time, T_time_string);
2224 
2225 const char *T_time_to_string_us(T_time, T_time_string);
2226 
2227 const char *T_time_to_string_ms(T_time, T_time_string);
2228 
2229 const char *T_time_to_string_s(T_time, T_time_string);
2230 
2231 const char *T_ticks_to_string_ns(T_ticks, T_time_string);
2232 
2233 const char *T_ticks_to_string_us(T_ticks, T_time_string);
2234 
2235 const char *T_ticks_to_string_ms(T_ticks, T_time_string);
2236 
2237 const char *T_ticks_to_string_s(T_ticks, T_time_string);
2238 
2239 T_time T_ticks_to_time(T_ticks);
2240 
2241 T_ticks T_time_to_ticks(T_time);
2242 
2243 T_time T_seconds_and_nanoseconds_to_time(uint32_t, uint32_t);
2244 
2245 void T_time_to_seconds_and_nanoseconds(T_time, uint32_t *, uint32_t *);
2246 
2247 T_time T_now(void);
2248 
2249 #ifdef __rtems__
2250 static inline T_ticks
2251 T_tick(void)
2252 {
2253     return _CPU_Counter_read();
2254 }
2255 #else
2256 T_ticks T_tick(void);
2257 #endif
2258 
2259 T_time T_now_clock(void);
2260 
2261 T_time T_now_dummy(void);
2262 
2263 T_time T_now_tick(void);
2264 
2265 T_time T_case_begin_time(void);
2266 
2267 /** @} */
2268 
2269 void *T_malloc(size_t);
2270 
2271 void *T_calloc(size_t, size_t);
2272 
2273 void *T_zalloc(size_t, void (*)(void *));
2274 
2275 void T_free(void *);
2276 
2277 void T_register(void);
2278 
2279 typedef enum {
2280     T_EVENT_RUN_INITIALIZE_EARLY,
2281     T_EVENT_RUN_INITIALIZE_LATE,
2282     T_EVENT_CASE_EARLY,
2283     T_EVENT_CASE_BEGIN,
2284     T_EVENT_CASE_END,
2285     T_EVENT_CASE_LATE,
2286     T_EVENT_CASE_STOP,
2287     T_EVENT_RUN_FINALIZE_EARLY,
2288     T_EVENT_RUN_FINALIZE_LATE
2289 } T_event;
2290 
2291 typedef void (*T_action)(T_event, const char *);
2292 
2293 typedef void (*T_putchar)(int, void *);
2294 
2295 typedef struct {
2296     const char *name;
2297     char *buf;
2298     size_t buf_size;
2299     T_putchar putchar;
2300     void *putchar_arg;
2301     T_verbosity verbosity;
2302     T_time (*now)(void);
2303     void *(*allocate)(size_t);
2304     void (*deallocate)(void *);
2305     size_t action_count;
2306     const T_action *actions;
2307 } T_config;
2308 
2309 void T_putchar_default(int, void *);
2310 
2311 int T_main(const T_config *);
2312 
2313 void T_make_runner(void);
2314 
2315 bool T_is_runner(void);
2316 
2317 void T_run_initialize(const T_config *);
2318 
2319 void T_run_all(void);
2320 
2321 void T_run_by_name(const char *);
2322 
2323 void *T_case_begin(const char *, const T_fixture *);
2324 
2325 void T_case_end(void);
2326 
2327 bool T_run_finalize(void);
2328 
2329 void T_set_putchar(T_putchar, void *, T_putchar *, void **);
2330 
2331 void *T_fixture_context(void);
2332 
2333 void T_set_fixture_context(void *);
2334 
2335 void T_add_remark(T_remark *);
2336 
2337 void *T_push_fixture(T_fixture_node *, const T_fixture *);
2338 
2339 void T_pop_fixture(void);
2340 
2341 T_NO_RETURN void T_stop(void);
2342 
2343 #define T_unreachable() \
2344     do { T_true(false, "Unreachable"); T_stop(); } while (0)
2345 
2346 /**
2347  * @brief Gets the scope for nested fixtures.
2348  *
2349  * This function should help implementing scope fixture methods.  The parameter
2350  * layout allows efficient code generation for this method.
2351  *
2352  * @param desc is the description table.  It shall be a NULL-terminated array
2353  *   which references arrays of descriptive strings.
2354  *
2355  * @param buf is the buffer for the scope string.
2356  *
2357  * @param n is the size of the scope buffer in characters.
2358  *
2359  * @param second_indices is an array of indices defining which descriptive
2360  *   string is used for each entry in the description table.
2361  *
2362  * @return Returns the characters consumed from the buffer for the produced
2363  *   scope.
2364  */
2365 size_t T_get_scope(
2366   const char * const * const *desc,
2367   char *buf,
2368   size_t n,
2369   const size_t *second_indices
2370 );
2371 
2372 size_t T_str_copy(char *, const char *, size_t);
2373 
2374 #ifdef __rtems__
2375 #define T_TEST_CASE_FIXTURE(name, fixture)          \
2376 void T_case_body_##name(void);                  \
2377 T_case_context T_case_instance_##name = {           \
2378     #name,                          \
2379     T_case_body_##name,                     \
2380     fixture,                            \
2381     NULL                            \
2382 };                              \
2383 static T_case_context * const T_case_item_##name        \
2384 __attribute__((__section__(".rtemsroset._T.content.0." #name))) \
2385 __attribute__((__used__)) = &T_case_instance_##name;        \
2386 void T_case_body_##name(void)
2387 #else /* __rtems__ */
2388 #define T_TEST_CASE_FIXTURE(name, fixture)          \
2389 void T_case_body_##name(void);                  \
2390 T_case_context T_case_instance_##name = {           \
2391     #name,                          \
2392     T_case_body_##name,                     \
2393     fixture,                            \
2394     NULL                            \
2395 };                              \
2396 __attribute__((__constructor__)) static void            \
2397 T_case_register_##name(void)                    \
2398 {                               \
2399     T_case_register(&T_case_instance_##name);       \
2400 }                               \
2401 void T_case_body_##name(void)
2402 #endif /* __rtems__ */
2403 
2404 #define T_TEST_CASE(name) T_TEST_CASE_FIXTURE(name, NULL)
2405 
2406 void T_busy(uint_fast32_t);
2407 
2408 uint_fast32_t T_get_one_clock_tick_busy(void);
2409 
2410 typedef enum {
2411     T_INTERRUPT_TEST_INITIAL,
2412     T_INTERRUPT_TEST_ACTION,
2413     T_INTERRUPT_TEST_BLOCKED,
2414     T_INTERRUPT_TEST_CONTINUE,
2415     T_INTERRUPT_TEST_DONE,
2416     T_INTERRUPT_TEST_EARLY,
2417     T_INTERRUPT_TEST_INTERRUPT,
2418     T_INTERRUPT_TEST_LATE,
2419     T_INTERRUPT_TEST_TIMEOUT
2420 } T_interrupt_test_state;
2421 
2422 typedef struct {
2423     void (*prepare)(void *);
2424     void (*action)(void *);
2425     T_interrupt_test_state (*interrupt)(void *);
2426     void (*blocked)(void *);
2427     uint32_t max_iteration_count;
2428 } T_interrupt_test_config;
2429 
2430 T_interrupt_test_state T_interrupt_test_change_state(T_interrupt_test_state,
2431     T_interrupt_test_state);
2432 
2433 T_interrupt_test_state T_interrupt_test_get_state(void);
2434 
2435 void T_interrupt_test_busy_wait_for_interrupt(void);
2436 
2437 T_interrupt_test_state T_interrupt_test(const T_interrupt_test_config *config,
2438     void *arg);
2439 
2440 typedef struct {
2441     uint32_t executing;
2442     uint32_t heir;
2443     uint32_t cpu;
2444     T_time instant;
2445 } T_thread_switch_event;
2446 
2447 typedef struct {
2448     size_t recorded;
2449     size_t capacity;
2450     uint64_t switches;
2451 } T_thread_switch_header;
2452 
2453 typedef struct {
2454     T_thread_switch_header header;
2455     T_thread_switch_event events[T_ZERO_LENGTH_ARRAY];
2456 } T_thread_switch_log;
2457 
2458 typedef struct {
2459     T_thread_switch_header header;
2460     T_thread_switch_event events[2];
2461 } T_thread_switch_log_2;
2462 
2463 typedef struct {
2464     T_thread_switch_header header;
2465     T_thread_switch_event events[4];
2466 } T_thread_switch_log_4;
2467 
2468 typedef struct {
2469     T_thread_switch_header header;
2470     T_thread_switch_event events[10];
2471 } T_thread_switch_log_10;
2472 
2473 T_thread_switch_log *T_thread_switch_record(T_thread_switch_log *);
2474 
2475 T_thread_switch_log *T_thread_switch_record_2(T_thread_switch_log_2 *);
2476 
2477 T_thread_switch_log *T_thread_switch_record_4(T_thread_switch_log_4 *);
2478 
2479 T_thread_switch_log *T_thread_switch_record_10(T_thread_switch_log_10 *);
2480 
2481 void T_report_hash_sha256(T_event, const char *);
2482 
2483 void T_report_hash_sha256_update(char c);
2484 
2485 void T_check_heap(T_event, const char *);
2486 
2487 #ifdef __rtems__
2488 void T_memory_action(T_event, const char *);
2489 
2490 void *T_memory_allocate(size_t);
2491 
2492 void T_memory_deallocate(void *);
2493 
2494 void T_check_task_context(T_event, const char *);
2495 
2496 void T_check_file_descriptors(T_event, const char *);
2497 
2498 void T_check_rtems_barriers(T_event, const char *);
2499 
2500 void T_check_rtems_extensions(T_event, const char *);
2501 
2502 void T_check_rtems_message_queues(T_event, const char *);
2503 
2504 void T_check_rtems_partitions(T_event, const char *);
2505 
2506 void T_check_rtems_periods(T_event, const char *);
2507 
2508 void T_check_rtems_regions(T_event, const char *);
2509 
2510 void T_check_rtems_semaphores(T_event, const char *);
2511 
2512 void T_check_rtems_tasks(T_event, const char *);
2513 
2514 void T_check_rtems_timers(T_event, const char *);
2515 
2516 void T_check_posix_keys(T_event, const char *);
2517 
2518 void T_check_posix_message_queues(T_event, const char *);
2519 
2520 void T_check_posix_semaphores(T_event, const char *);
2521 
2522 void T_check_posix_shms(T_event, const char *);
2523 
2524 void T_check_posix_threads(T_event, const char *);
2525 
2526 void T_check_posix_timers(T_event, const char *);
2527 
2528 typedef enum {
2529     T_THREAD_TIMER_NO_THREAD,
2530     T_THREAD_TIMER_SCHEDULED,
2531     T_THREAD_TIMER_PENDING,
2532     T_THREAD_TIMER_INACTIVE
2533 } T_thread_timer_state;
2534 
2535 T_thread_timer_state T_get_thread_timer_state(uint32_t);
2536 
2537 void *T_seize_objects(rtems_status_code (*)(void *, uint32_t *), void *);
2538 
2539 void T_surrender_objects(void **, rtems_status_code (*)(uint32_t));
2540 #endif /* __rtems__ */
2541 
2542 /**
2543  * @defgroup RTEMSTestFrameworkDestructors Destructors
2544  *
2545  * @ingroup RTEMSTestFramework
2546  *
2547  * @brief Support to run destructors at the end of a test case.
2548  *
2549  * @{
2550  */
2551 
2552 typedef struct T_destructor {
2553     struct {
2554         struct T_destructor *le_next;
2555         struct T_destructor **le_prev;
2556     } node;
2557     void (*destroy)(struct T_destructor *);
2558 } T_destructor;
2559 
2560 void T_add_destructor(T_destructor *, void (*)(T_destructor *));
2561 
2562 void T_remove_destructor(T_destructor *);
2563 
2564 /** @} */
2565 
2566 /**
2567  * @defgroup RTEMSTestFrameworkMeasureRuntime Runtime Measurements
2568  *
2569  * @ingroup RTEMSTestFramework
2570  *
2571  * @brief Support to measure the runtime of code fragments.
2572  *
2573  * @{
2574  */
2575 
2576 typedef struct T_measure_runtime_context T_measure_runtime_context;
2577 
2578 typedef struct {
2579     size_t sample_count;
2580 } T_measure_runtime_config;
2581 
2582 typedef struct {
2583     const char *name;
2584     int flags;
2585     void (*setup)(void *);
2586     void (*body)(void *);
2587     bool (*teardown)(void *, T_ticks *, uint32_t, uint32_t, unsigned int);
2588     void *arg;
2589 } T_measure_runtime_request;
2590 
2591 #define T_MEASURE_RUNTIME_ALLOW_CLOCK_ISR 0x1
2592 
2593 #define T_MEASURE_RUNTIME_REPORT_SAMPLES 0x2
2594 
2595 #define T_MEASURE_RUNTIME_DISABLE_FULL_CACHE 0x10
2596 
2597 #define T_MEASURE_RUNTIME_DISABLE_HOT_CACHE 0x20
2598 
2599 #define T_MEASURE_RUNTIME_DISABLE_DIRTY_CACHE 0x40
2600 
2601 #define T_MEASURE_RUNTIME_DISABLE_MINOR_LOAD 0x80
2602 
2603 #define T_MEASURE_RUNTIME_DISABLE_MAX_LOAD 0x100
2604 
2605 T_measure_runtime_context *T_measure_runtime_create(
2606     const T_measure_runtime_config *);
2607 
2608 void T_measure_runtime(T_measure_runtime_context *,
2609     const T_measure_runtime_request *);
2610 
2611 /** @} */
2612 
2613 #ifdef __cplusplus
2614 }
2615 #endif /* __cplusplus */
2616 
2617 #endif /* THE_T_TEST_FRAMEWORK_H */