1 /* 2 * SPDX-License-Identifier: BSD-2-Clause 3 * 4 * Copyright (C) 2004 Nik Clayton 5 * Copyright (C) 2017 Jérémie Galarneau 6 */ 7 8 /* '## __VA_ARGS__' is a gcc'ism. C99 doesn't allow the token pasting 9 and requires the caller to add the final comma if they've ommitted 10 the optional arguments */ 11 #ifdef __GNUC__ 12 # define ok(e, test, ...) ((e) ? \ 13 _gen_result(1, __func__, __FILE__, __LINE__, \ 14 test, ## __VA_ARGS__) : \ 15 _gen_result(0, __func__, __FILE__, __LINE__, \ 16 test, ## __VA_ARGS__)) 17 18 # define ok1(e) ((e) ? \ 19 _gen_result(1, __func__, __FILE__, __LINE__, "%s", #e) : \ 20 _gen_result(0, __func__, __FILE__, __LINE__, "%s", #e)) 21 22 # define pass(test, ...) ok(1, test, ## __VA_ARGS__); 23 # define fail(test, ...) ok(0, test, ## __VA_ARGS__); 24 25 # define skip_start(test, n, fmt, ...) \ 26 do { \ 27 if((test)) { \ 28 skip(n, fmt, ## __VA_ARGS__); \ 29 continue; \ 30 } 31 #elif __STDC_VERSION__ >= 199901L /* __GNUC__ */ 32 # define ok(e, ...) ((e) ? \ 33 _gen_result(1, __func__, __FILE__, __LINE__, \ 34 __VA_ARGS__) : \ 35 _gen_result(0, __func__, __FILE__, __LINE__, \ 36 __VA_ARGS__)) 37 38 # define ok1(e) ((e) ? \ 39 _gen_result(1, __func__, __FILE__, __LINE__, "%s", #e) : \ 40 _gen_result(0, __func__, __FILE__, __LINE__, "%s", #e)) 41 42 # define pass(...) ok(1, __VA_ARGS__); 43 # define fail(...) ok(0, __VA_ARGS__); 44 45 # define skip_start(test, n, ...) \ 46 do { \ 47 if((test)) { \ 48 skip(n, __VA_ARGS__); \ 49 continue; \ 50 } 51 #else /* __STDC_VERSION__ */ 52 # error "Needs gcc or C99 compiler for variadic macros." 53 #endif /* __STDC_VERSION__ */ 54 55 #define skip_end() } while(0); 56 57 #ifdef __MINGW_PRINTF_FORMAT 58 # define TAP_PRINTF_FORMAT __MINGW_PRINTF_FORMAT 59 #else 60 # define TAP_PRINTF_FORMAT printf 61 #endif 62 63 __attribute__((format(TAP_PRINTF_FORMAT, 5, 6))) 64 unsigned int _gen_result(int, const char *, const char *, unsigned int, const char *, ...); 65 66 int plan_no_plan(void); 67 __attribute__((noreturn)) 68 int plan_skip_all(const char *); 69 int plan_tests(unsigned int); 70 71 __attribute__((format(TAP_PRINTF_FORMAT, 1, 2))) 72 unsigned int diag(const char *, ...); 73 void diag_multiline(const char *); 74 75 __attribute__((format(TAP_PRINTF_FORMAT, 2, 3))) 76 int skip(unsigned int, const char *, ...); 77 78 __attribute__((format(TAP_PRINTF_FORMAT, 1, 2))) 79 void todo_start(const char *, ...); 80 void todo_end(void); 81 82 int exit_status(void); 83 84 void tap_disable(void); 85 86 unsigned int rdiag_start(void); 87 __attribute__((format(TAP_PRINTF_FORMAT, 1, 2))) 88 unsigned int rdiag(const char *fmt, ...); 89 unsigned int rdiag_end(void); 90