PicoTest
A minimalist unit testing framework for C programs
Loading...
Searching...
No Matches
picotest.h
Go to the documentation of this file.
1
47
48#ifndef _PICOTEST
49#define _PICOTEST
50
51#include <setjmp.h>
52#include <stdarg.h>
53#include <string.h>
54
55#if !defined(_MSVC_TRADITIONAL) || _MSVC_TRADITIONAL
63#define _PICOTEST_PARENS
64#endif /* defined(_MSC_VER) */
65
70
78
79#define PICOTEST_VERSION "1.5.0"
80#define PICOTEST_VERSION_MAJOR 1
81#define PICOTEST_VERSION_MINOR 5
82#define PICOTEST_VERSION_PATCH 0
83
85
90
99#ifdef DOXYGEN
100#define PICOTEST_NAMESPACE
101#endif
102
106#ifndef PICOTEST_NAMESPACE_DELIMITER
107#define PICOTEST_NAMESPACE_DELIMITER "."
108#endif
109
111#ifdef PICOTEST_NAMESPACE
112#define _PICOTEST_NAMESPACED(name) \
113 _PICOTEST_CONCATENATE(PICOTEST_NAMESPACE, _PICOTEST_CONCATENATE(_, name))
114#define _PICOTEST_DISPLAY_NAME(name) \
115 _PICOTEST_STRINGIZE(PICOTEST_NAMESPACE) \
116 PICOTEST_NAMESPACE_DELIMITER _PICOTEST_STRINGIZE(name)
117#else
118#define _PICOTEST_NAMESPACED(name) name
119#define _PICOTEST_DISPLAY_NAME(name) _PICOTEST_STRINGIZE(name)
120#endif
122
131#ifdef PICOTEST_NAMESPACE
132#define PICOTEST_EXPORT(_testName) \
133 int _testName(const char *cond) { \
134 return _PICOTEST_NAMESPACED(_testName)(cond); \
135 } \
136 extern PicoTestMetadata _PICOTEST_METADATA( \
137 _PICOTEST_NAMESPACED(_testName)); \
138 static PicoTestMetadata *_testName##_exported_subtests[] = { \
139 &_PICOTEST_METADATA(_PICOTEST_NAMESPACED(_testName)), NULL}; \
140 PicoTestMetadata _PICOTEST_METADATA(_testName) = { \
141 _PICOTEST_STRINGIZE(_testName), \
142 __FILE__, \
143 __LINE__, \
144 _testName, \
145 1, \
146 (const struct PicoTestMetadata **)_testName##_exported_subtests};
147#else
148#define PICOTEST_EXPORT(_testName)
149#endif
150
152
157
172typedef int(PicoTestProc)(const char *cond);
173
177typedef struct PicoTestMetadata {
178 const char *name;
179 const char *file;
180 int line;
183 const struct PicoTestMetadata *
187
195#define PICOTEST_EXTERN(_testName) \
196 extern PicoTestProc _PICOTEST_NAMESPACED(_testName); \
197 extern PicoTestMetadata _PICOTEST_METADATA(_PICOTEST_NAMESPACED(_testName));
198
209#define PICOTEST_METADATA(_testName) \
210 &_PICOTEST_METADATA(_PICOTEST_NAMESPACED(_testName))
211
213#define _PICOTEST_METADATA(_testName) \
214 _PICOTEST_CONCATENATE(_testName, _metadata)
215#define _PICOTEST_TEST_DECLARE(_testName, _nbSubtests, _subtests) \
216 PicoTestProc _PICOTEST_NAMESPACED(_testName); \
217 PicoTestMetadata _PICOTEST_METADATA(_PICOTEST_NAMESPACED(_testName)) = { \
218 _PICOTEST_DISPLAY_NAME(_testName), \
219 __FILE__, \
220 __LINE__, \
221 _PICOTEST_NAMESPACED(_testName), \
222 _nbSubtests, \
223 (const struct PicoTestMetadata **)_subtests};
225
227
235
260
286 const char *testName,
287 const char *cond);
288
299static PicoTestFilterResult _picoTest_filterByName(PicoTestProc *test,
300 const char *testName,
301 const char *cond) {
302 return (strcmp(testName, cond) == 0 ? PICOTEST_FILTER_PASS
304}
305
315#define PICOTEST_FILTER_DEFAULT _picoTest_filterByName
316
341#define PICOTEST_FILTER PICOTEST_FILTER_DEFAULT
342
344
353
369typedef void(PicoTestTraverseProc)(const char *name, int nb);
370
387#define PICOTEST_TRAVERSE(_testName, _proc) \
388 _picoTest_traverse(PICOTEST_METADATA(_testName), _proc)
389
400static void _picoTest_traverse(const PicoTestMetadata *metadata,
401 PicoTestTraverseProc *proc) {
402 const PicoTestMetadata **subtest = metadata->subtests;
403 proc(metadata->name, metadata->nbSubtests);
404 if (metadata->nbSubtests) {
405 for (; *subtest; subtest++) {
406 _picoTest_traverse(*subtest, proc);
407 }
408 }
409}
410
424
436typedef void(PicoTestVisitProc)(const PicoTestMetadata *metadata,
437 PicoTestVisitStep step);
438
453#define PICOTEST_VISIT(_testName, _proc) \
454 _picoTest_visit(PICOTEST_METADATA(_testName), _proc)
455
466static void _picoTest_visit(const PicoTestMetadata *metadata,
467 PicoTestVisitProc *proc) {
468 const PicoTestMetadata **subtest = metadata->subtests;
469 proc(metadata, PICOTEST_VISIT_ENTER);
470 if (metadata->nbSubtests) {
471 for (; *subtest; subtest++) {
472 _picoTest_visit(*subtest, proc);
473 }
474 }
475 proc(metadata, PICOTEST_VISIT_LEAVE);
476}
477
479
487
508typedef void(PicoTestFailureLoggerProc)(const char *file, int line,
509 const char *type, const char *test,
510 const char *msg, va_list args);
511
519static void _picoTest_logFailure(const char *file, int line, const char *type,
520 const char *test, const char *msg,
521 va_list args) {}
522
529#define PICOTEST_FAILURE_LOGGER_DEFAULT _picoTest_logFailure
530
550#define PICOTEST_FAILURE_LOGGER PICOTEST_FAILURE_LOGGER_DEFAULT
551
553
561
566
589#if defined(_PICOTEST_PARENS)
590#define PICOTEST_CASE(...) \
591 _PICOTEST_CONCATENATE(_PICOTEST_CASE_, _PICOTEST_ARGCOUNT(__VA_ARGS__)) \
592 _PICOTEST_PARENS(__VA_ARGS__)
593#else
594#define PICOTEST_CASE(...) \
595 _PICOTEST_CONCATENATE(_PICOTEST_CASE_, _PICOTEST_ARGCOUNT(__VA_ARGS__)) \
596 (__VA_ARGS__)
597#endif /* defined(_PICOTEST_PARENS) */
598
600#define _PICOTEST_CASE_DECLARE(_testName) \
601 _PICOTEST_TEST_DECLARE(_testName, 0, NULL); \
602 static int _PICOTEST_CONCATENATE(_PICOTEST_NAMESPACED(_testName), \
603 _testCaseRunner)(void); \
604 int _PICOTEST_NAMESPACED(_testName)(const char *cond) { \
605 int fail = 0; \
606 PicoTestFilterResult filterResult = \
607 (cond == NULL) \
608 ? PICOTEST_FILTER_PASS \
609 : PICOTEST_FILTER(_PICOTEST_NAMESPACED(_testName), \
610 _PICOTEST_DISPLAY_NAME(_testName), cond); \
611 switch (filterResult) { \
612 case PICOTEST_FILTER_PASS: \
613 case PICOTEST_FILTER_PASS_PROPAGATE: \
614 fail += _PICOTEST_CONCATENATE(_PICOTEST_NAMESPACED(_testName), \
615 _testCaseRunner)(); \
616 break; \
617 default:; \
618 } \
619 return fail; \
620 }
621
622#define _PICOTEST_CASE_RUNNER_BEGIN(_testName) \
623 static int _PICOTEST_CONCATENATE(_PICOTEST_NAMESPACED(_testName), \
624 _testCaseRunner)() { \
625 int abort; \
626 jmp_buf failureEnv; \
627 jmp_buf *oldEnv = _picoTest_failureEnv; \
628 int fail, oldFail = _picoTest_fail; \
629 _picoTest_failureEnv = &failureEnv; \
630 _picoTest_fail = 0; \
631 PICOTEST_CASE_ENTER(_PICOTEST_DISPLAY_NAME(_testName)); \
632 abort = setjmp(failureEnv);
633
634#define _PICOTEST_CASE_RUNNER_END(_testName) \
635 fail = _picoTest_fail; \
636 PICOTEST_CASE_LEAVE(_PICOTEST_DISPLAY_NAME(_testName), fail); \
637 _picoTest_failureEnv = oldEnv; \
638 _picoTest_fail = oldFail; \
639 return fail; \
640 }
641
642#define _PICOTEST_CASE_1(_testName) \
643 _PICOTEST_CASE_DECLARE(_testName) \
644 static void _PICOTEST_CONCATENATE(_PICOTEST_NAMESPACED(_testName), \
645 _testCase)(void); \
646 _PICOTEST_CASE_RUNNER_BEGIN(_testName) \
647 if (!abort) { \
648 _PICOTEST_CONCATENATE(_PICOTEST_NAMESPACED(_testName), _testCase)(); \
649 } \
650 _PICOTEST_CASE_RUNNER_END(_testName) \
651 static void _PICOTEST_CONCATENATE(_PICOTEST_NAMESPACED(_testName), \
652 _testCase)(void)
653
654#define _PICOTEST_CASE_2(_testName, _fixtureName) \
655 _PICOTEST_CASE_DECLARE(_testName) \
656 static void _PICOTEST_CONCATENATE(_PICOTEST_NAMESPACED(_testName), \
657 _testCase)(void); \
658 _PICOTEST_CASE_RUNNER_BEGIN(_testName) \
659 if (!abort) { \
660 _PICOTEST_FIXTURE_CALL_SETUP(_fixtureName, \
661 _PICOTEST_NAMESPACED(_testName), NULL); \
662 _PICOTEST_CONCATENATE(_PICOTEST_NAMESPACED(_testName), _testCase)(); \
663 } \
664 _PICOTEST_FIXTURE_CALL_TEARDOWN( \
665 _fixtureName, _PICOTEST_NAMESPACED(_testName), NULL, _picoTest_fail); \
666 _PICOTEST_CASE_RUNNER_END(_testName) \
667 static void _PICOTEST_CONCATENATE(_PICOTEST_NAMESPACED(_testName), \
668 _testCase)()
669
670#define _PICOTEST_CASE_3(_testName, _fixtureName, _context) \
671 _PICOTEST_CASE_DECLARE(_testName) \
672 static void _PICOTEST_CONCATENATE(_PICOTEST_NAMESPACED(_testName), \
673 _testCase)( \
674 struct _fixtureName##_Context *); \
675 _PICOTEST_CASE_RUNNER_BEGIN(_testName) { \
676 struct _fixtureName##_Context context; \
677 if (!abort) { \
678 _PICOTEST_FIXTURE_CALL_SETUP( \
679 _fixtureName, _PICOTEST_NAMESPACED(_testName), &context); \
680 _PICOTEST_CONCATENATE(_PICOTEST_NAMESPACED(_testName), \
681 _testCase)(&context); \
682 } \
683 _PICOTEST_FIXTURE_CALL_TEARDOWN(_fixtureName, \
684 _PICOTEST_NAMESPACED(_testName), \
685 &context, _picoTest_fail); \
686 } \
687 _PICOTEST_CASE_RUNNER_END(_testName) \
688 static void _PICOTEST_CONCATENATE(_PICOTEST_NAMESPACED(_testName), \
689 _testCase)( \
690 struct _fixtureName##_Context * _context)
692
694
702
718typedef void(PicoTestCaseEnterProc)(const char *testName);
719
726#define PICOTEST_CASE_ENTER_DEFAULT(testName)
727
748#define PICOTEST_CASE_ENTER PICOTEST_CASE_ENTER_DEFAULT
749
766typedef void(PicoTestCaseLeaveProc)(const char *testName, int fail);
767
774#define PICOTEST_CASE_LEAVE_DEFAULT(testName, fail)
775
796#define PICOTEST_CASE_LEAVE PICOTEST_CASE_LEAVE_DEFAULT
797
799
801
808
813
836#define PICOTEST_ASSERT(x, /* msg, */...) \
837 { \
838 _PICOTEST_ASSERT(x, #x, ##__VA_ARGS__); \
839 }
840
842#define _PICOTEST_ASSERT(x, ...) \
843 PICOTEST_ASSERT_BEFORE("ASSERT", #x); \
844 { \
845 int _PICOTEST_FAIL = !(x); \
846 PICOTEST_ASSERT_AFTER("ASSERT", #x, _PICOTEST_FAIL); \
847 if (_PICOTEST_FAIL) { \
848 PICOTEST_FAILURE("ASSERT", ##__VA_ARGS__); \
849 PICOTEST_ABORT(); \
850 } \
851 }
853
875#define PICOTEST_VERIFY(x, /* msg, */...) \
876 { \
877 _PICOTEST_VERIFY(x, #x, ##__VA_ARGS__); \
878 }
879
881#define _PICOTEST_VERIFY(x, ...) \
882 PICOTEST_ASSERT_BEFORE("VERIFY", #x); \
883 { \
884 int _PICOTEST_FAIL = !(x); \
885 PICOTEST_ASSERT_AFTER("VERIFY", #x, _PICOTEST_FAIL); \
886 if (_PICOTEST_FAIL) { \
887 PICOTEST_FAILURE("VERIFY", ##__VA_ARGS__); \
888 } \
889 }
891
905#define PICOTEST_FAILURE(type, test, /* msg, */...) \
906 _PICOTEST_FAILURE(type, test, ##__VA_ARGS__)
907
909#define _PICOTEST_FAILURE(type, ...) \
910 _picoTest_fail++; \
911 _picoTest_assertFailed(PICOTEST_FAILURE_LOGGER, __FILE__, __LINE__, type, \
912 _PICOTEST_ARGCOUNT(__VA_ARGS__), __VA_ARGS__); \
913
914
920static int _picoTest_fail = 0;
921
928static jmp_buf *_picoTest_failureEnv = NULL;
929
937#define PICOTEST_ABORT() longjmp(*_picoTest_failureEnv, 1)
938
953static void _picoTest_assertFailed(PicoTestFailureLoggerProc *proc,
954 const char *file, int line, const char *type,
955 int count, const char *test, ...) {
956 if (count > 1) {
957 /* Extra args after **test** */
958 va_list args;
959 const char *msg;
960 va_start(args, test);
961 msg = va_arg(args, const char *);
962 proc(file, line, type, test, msg, args);
963 } else {
964 proc(file, line, type, test, NULL, NULL);
965 }
966}
967
969
977
994typedef void(PicoTestAssertBeforeProc)(const char *type, const char *test);
995
1002#define PICOTEST_ASSERT_BEFORE_DEFAULT(type, test)
1003
1024#define PICOTEST_ASSERT_BEFORE PICOTEST_ASSERT_BEFORE_DEFAULT
1025
1043typedef void(PicoTestAssertAfterProc)(const char *type, const char *test,
1044 int fail);
1045
1052#define PICOTEST_ASSERT_AFTER_DEFAULT(type, test, fail)
1053
1074#define PICOTEST_ASSERT_AFTER PICOTEST_ASSERT_AFTER_DEFAULT
1075
1077
1079
1088
1093
1113#define PICOTEST_FIXTURE_CONTEXT(_fixtureName) struct _fixtureName##_Context
1114
1143#if defined(_PICOTEST_PARENS)
1144#define PICOTEST_FIXTURE_SETUP(...) \
1145 _PICOTEST_CONCATENATE(_PICOTEST_FIXTURE_SETUP_, \
1146 _PICOTEST_ARGCOUNT(__VA_ARGS__)) \
1147 _PICOTEST_PARENS(__VA_ARGS__)
1148#else
1149#define PICOTEST_FIXTURE_SETUP(...) \
1150 _PICOTEST_CONCATENATE(_PICOTEST_FIXTURE_SETUP_, \
1151 _PICOTEST_ARGCOUNT(__VA_ARGS__)) \
1152 (__VA_ARGS__)
1153#endif /* defined(_PICOTEST_PARENS) */
1154
1156#define _PICOTEST_FIXTURE_SETUP_1(_fixtureName) \
1157 static void _fixtureName##_setup(void *_fixtureName##_DUMMY)
1158
1159#define _PICOTEST_FIXTURE_SETUP_2(_fixtureName, _context) \
1160 static void _fixtureName##_setup(struct _fixtureName##_Context *_context)
1161
1162#define _PICOTEST_FIXTURE_CALL_SETUP(_fixtureName, _testName, context) \
1163 PICOTEST_FIXTURE_BEFORE_SETUP(_PICOTEST_STRINGIZE(_fixtureName), \
1164 _PICOTEST_STRINGIZE(_testName)); \
1165 _fixtureName##_setup(context); \
1166 PICOTEST_FIXTURE_AFTER_SETUP(_PICOTEST_STRINGIZE(_fixtureName), \
1167 _PICOTEST_STRINGIZE(_testName));
1169
1198#if defined(_PICOTEST_PARENS)
1199#define PICOTEST_FIXTURE_TEARDOWN(...) \
1200 _PICOTEST_CONCATENATE(_PICOTEST_FIXTURE_TEARDOWN_, \
1201 _PICOTEST_ARGCOUNT(__VA_ARGS__)) \
1202 _PICOTEST_PARENS(__VA_ARGS__)
1203#else
1204#define PICOTEST_FIXTURE_TEARDOWN(...) \
1205 _PICOTEST_CONCATENATE(_PICOTEST_FIXTURE_TEARDOWN_, \
1206 _PICOTEST_ARGCOUNT(__VA_ARGS__)) \
1207 (__VA_ARGS__)
1208#endif /* defined(_PICOTEST_PARENS) */
1209
1211#define _PICOTEST_FIXTURE_TEARDOWN_1(_fixtureName) \
1212 static void _fixtureName##_teardown(int PICOTEST_FAIL, \
1213 void *_fixtureName##_DUMMY)
1214
1215#define _PICOTEST_FIXTURE_TEARDOWN_2(_fixtureName, _context) \
1216 static void _fixtureName##_teardown( \
1217 int PICOTEST_FAIL, struct _fixtureName##_Context *_context)
1218
1219#define _PICOTEST_FIXTURE_CALL_TEARDOWN(_fixtureName, _testName, context, \
1220 fail) \
1221 PICOTEST_FIXTURE_BEFORE_TEARDOWN(_PICOTEST_STRINGIZE(_fixtureName), \
1222 _PICOTEST_STRINGIZE(_testName), fail); \
1223 _fixtureName##_teardown(fail, context); \
1224 PICOTEST_FIXTURE_AFTER_TEARDOWN(_PICOTEST_STRINGIZE(_fixtureName), \
1225 _PICOTEST_STRINGIZE(_testName), fail); \
1226
1227
1229
1237
1254typedef void(PicoTestFixtureBeforeSetupProc)(const char *fixtureName,
1255 const char *testName);
1256
1263#define PICOTEST_FIXTURE_BEFORE_SETUP_DEFAULT(fixtureName, testName)
1264
1285#define PICOTEST_FIXTURE_BEFORE_SETUP PICOTEST_FIXTURE_BEFORE_SETUP_DEFAULT
1286
1303typedef void(PicoTestFixtureAfterSetupProc)(const char *fixtureName,
1304 const char *testName);
1305
1312#define PICOTEST_FIXTURE_AFTER_SETUP_DEFAULT(fixtureName, testName)
1313
1334#define PICOTEST_FIXTURE_AFTER_SETUP PICOTEST_FIXTURE_AFTER_SETUP_DEFAULT
1335
1353typedef void(PicoTestFixtureBeforeTeardownProc)(const char *fixtureName,
1354 const char *testName, int fail);
1355
1362#define PICOTEST_FIXTURE_BEFORE_TEARDOWN_DEFAULT(fixtureName, testName, fail)
1363
1384#define PICOTEST_FIXTURE_BEFORE_TEARDOWN \
1385 PICOTEST_FIXTURE_BEFORE_TEARDOWN_DEFAULT
1386
1404typedef void(PicoTestFixtureAfterTeardownProc)(const char *fixtureName,
1405 const char *testName, int fail);
1406
1413#define PICOTEST_FIXTURE_AFTER_TEARDOWN_DEFAULT(fixtureName, testName, fail)
1414
1435#define PICOTEST_FIXTURE_AFTER_TEARDOWN PICOTEST_FIXTURE_AFTER_TEARDOWN_DEFAULT
1436
1438
1440
1448
1453
1476#define PICOTEST_SUITE(_suiteName, ...) \
1477 _PICOTEST_FOR_EACH(PICOTEST_EXTERN, __VA_ARGS__) \
1478 static PicoTestMetadata *_PICOTEST_CONCATENATE( \
1479 _PICOTEST_NAMESPACED(_suiteName), _subtests)[] = { \
1480 _PICOTEST_FOR_EACH(_PICOTEST_SUITE_ENUMERATE_SUBTEST, __VA_ARGS__) \
1481 NULL}; \
1482 _PICOTEST_TEST_DECLARE( \
1483 _suiteName, _PICOTEST_ARGCOUNT(__VA_ARGS__), \
1484 _PICOTEST_CONCATENATE(_PICOTEST_NAMESPACED(_suiteName), _subtests)); \
1485 static int _PICOTEST_CONCATENATE(_PICOTEST_NAMESPACED(_suiteName), \
1486 _testSuiteRunner)(const char *cond) { \
1487 const int nb = _PICOTEST_ARGCOUNT(__VA_ARGS__); \
1488 PicoTestMetadata **subtest = _PICOTEST_CONCATENATE( \
1489 _PICOTEST_NAMESPACED(_suiteName), _subtests); \
1490 int fail = 0; \
1491 PICOTEST_SUITE_ENTER(_PICOTEST_DISPLAY_NAME(_suiteName), nb); \
1492 for (; *subtest; subtest++) { \
1493 const int index = \
1494 (int)(subtest - \
1495 _PICOTEST_CONCATENATE(_PICOTEST_NAMESPACED(_suiteName), \
1496 _subtests)); \
1497 int sfail = 0; \
1498 PICOTEST_SUITE_BEFORE_SUBTEST(_PICOTEST_DISPLAY_NAME(_suiteName), \
1499 nb, fail, index, (*subtest)->name); \
1500 sfail = (*subtest)->test(cond); \
1501 fail += sfail; \
1502 PICOTEST_SUITE_AFTER_SUBTEST(_PICOTEST_DISPLAY_NAME(_suiteName), \
1503 nb, fail, index, (*subtest)->name, \
1504 sfail); \
1505 } \
1506 PICOTEST_SUITE_LEAVE(_PICOTEST_DISPLAY_NAME(_suiteName), nb, fail); \
1507 return fail; \
1508 } \
1509 int _PICOTEST_NAMESPACED(_suiteName)(const char *cond) { \
1510 int fail = 0; \
1511 PicoTestFilterResult filterResult = \
1512 (cond == NULL) \
1513 ? PICOTEST_FILTER_PASS \
1514 : PICOTEST_FILTER(_PICOTEST_NAMESPACED(_suiteName), \
1515 _PICOTEST_DISPLAY_NAME(_suiteName), cond); \
1516 switch (filterResult) { \
1517 case PICOTEST_FILTER_PASS: \
1518 cond = NULL; \
1519 case PICOTEST_FILTER_PASS_PROPAGATE: \
1520 fail += _PICOTEST_CONCATENATE(_PICOTEST_NAMESPACED(_suiteName), \
1521 _testSuiteRunner)(cond); \
1522 break; \
1523 case PICOTEST_FILTER_SKIP: \
1524 break; \
1525 case PICOTEST_FILTER_SKIP_PROPAGATE: { \
1526 PicoTestMetadata **subtest = _PICOTEST_CONCATENATE( \
1527 _PICOTEST_NAMESPACED(_suiteName), _subtests); \
1528 for (; *subtest; subtest++) { \
1529 fail += (*subtest)->test(cond); \
1530 } \
1531 } break; \
1532 } \
1533 return fail; \
1534 }
1535
1537#define _PICOTEST_SUITE_ENUMERATE_SUBTEST(_testName) \
1538 PICOTEST_METADATA(_testName),
1540
1542
1551
1568typedef void(PicoTestSuiteEnterProc)(const char *suiteName, int nb);
1569
1576#define PICOTEST_SUITE_ENTER_DEFAULT(suiteName, nb)
1577
1598#define PICOTEST_SUITE_ENTER PICOTEST_SUITE_ENTER_DEFAULT
1599
1616typedef void(PicoTestSuiteLeaveProc)(const char *suiteName, int nb, int fail);
1617
1624#define PICOTEST_SUITE_LEAVE_DEFAULT(suiteName, nb, fail)
1625
1648#define PICOTEST_SUITE_LEAVE PICOTEST_SUITE_LEAVE_DEFAULT
1649
1670typedef void(PicoTestSuiteBeforeSubtestProc)(const char *suiteName, int nb,
1671 int fail, int index,
1672 const char *testName);
1673
1680#define PICOTEST_SUITE_BEFORE_SUBTEST_DEFAULT(suiteName, nb, fail, index, \
1681 testName)
1682
1703#define PICOTEST_SUITE_BEFORE_SUBTEST PICOTEST_SUITE_BEFORE_SUBTEST_DEFAULT
1704
1727typedef void(PicoTestSuiteAfterSubtestProc)(const char *suiteName, int nb,
1728 int fail, int index,
1729 const char *testName, int sfail);
1730
1737#define PICOTEST_SUITE_AFTER_SUBTEST_DEFAULT(suiteName, nb, fail, index, \
1738 testName, sfail)
1739
1760#define PICOTEST_SUITE_AFTER_SUBTEST PICOTEST_SUITE_AFTER_SUBTEST_DEFAULT
1761
1763
1765
1767
1775
1780
1784#define _PICOTEST_STRINGIZE(arg) _PICOTEST_STRINGIZE2(arg)
1785
1787#define _PICOTEST_STRINGIZE2(arg) #arg
1789
1793#define _PICOTEST_CONCATENATE(arg1, arg2) _PICOTEST_CONCATENATE1(arg1, arg2)
1794
1796#define _PICOTEST_CONCATENATE1(arg1, arg2) _PICOTEST_CONCATENATE2(arg1, arg2)
1797#define _PICOTEST_CONCATENATE2(arg1, arg2) arg1##arg2
1799
1801
1811
1821#if defined(_PICOTEST_PARENS)
1822#define _PICOTEST_ARGCOUNT(...) \
1823 _PICOTEST_LASTARG _PICOTEST_PARENS( \
1824 __VA_ARGS__, 63, 62, 61, 60, 59, 58, 57, 56, 55, 54, 53, 52, 51, 50, \
1825 49, 48, 47, 46, 45, 44, 43, 42, 41, 40, 39, 38, 37, 36, 35, 34, 33, \
1826 32, 31, 30, 29, 28, 27, 26, 25, 24, 23, 22, 21, 20, 19, 18, 17, 16, \
1827 15, 14, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0)
1828#else
1829#define _PICOTEST_ARGCOUNT(...) \
1830 _PICOTEST_LASTARG(__VA_ARGS__, 63, 62, 61, 60, 59, 58, 57, 56, 55, 54, 53, \
1831 52, 51, 50, 49, 48, 47, 46, 45, 44, 43, 42, 41, 40, 39, \
1832 38, 37, 36, 35, 34, 33, 32, 31, 30, 29, 28, 27, 26, 25, \
1833 24, 23, 22, 21, 20, 19, 18, 17, 16, 15, 14, 13, 12, 11, \
1834 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0)
1835#endif /* defined(_PICOTEST_PARENS) */
1837
1839#define _PICOTEST_LASTARG( \
1840 _1, _2, _3, _4, _5, _6, _7, _8, _9, _10, _11, _12, _13, _14, _15, _16, \
1841 _17, _18, _19, _20, _21, _22, _23, _24, _25, _26, _27, _28, _29, _30, _31, \
1842 _32, _33, _34, _35, _36, _37, _38, _39, _40, _41, _42, _43, _44, _45, _46, \
1843 _47, _48, _49, _50, _51, _52, _53, _54, _55, _56, _57, _58, _59, _60, _61, \
1844 _62, _63, N, ...) \
1845 N
1847
1858#if defined(_PICOTEST_PARENS)
1859#define _PICOTEST_FOR_EACH(what, ...) \
1860 _PICOTEST_CONCATENATE(_PICOTEST_FOR_EACH_, \
1861 _PICOTEST_ARGCOUNT(__VA_ARGS__)) \
1862 _PICOTEST_PARENS(what, __VA_ARGS__)
1863#else
1864#define _PICOTEST_FOR_EACH(what, ...) \
1865 _PICOTEST_CONCATENATE(_PICOTEST_FOR_EACH_, \
1866 _PICOTEST_ARGCOUNT(__VA_ARGS__)) \
1867 (what, __VA_ARGS__)
1868#endif /* defined(_PICOTEST_PARENS) */
1870
1872#if defined(_PICOTEST_PARENS)
1873#define _PICOTEST_FOR_EACH_1(what, x) what(x)
1874#define _PICOTEST_FOR_EACH_2(what, x, ...) \
1875 what(x) _PICOTEST_FOR_EACH_1 _PICOTEST_PARENS(what, __VA_ARGS__)
1876#define _PICOTEST_FOR_EACH_3(what, x, ...) \
1877 what(x) _PICOTEST_FOR_EACH_2 _PICOTEST_PARENS(what, __VA_ARGS__)
1878#define _PICOTEST_FOR_EACH_4(what, x, ...) \
1879 what(x) _PICOTEST_FOR_EACH_3 _PICOTEST_PARENS(what, __VA_ARGS__)
1880#define _PICOTEST_FOR_EACH_5(what, x, ...) \
1881 what(x) _PICOTEST_FOR_EACH_4 _PICOTEST_PARENS(what, __VA_ARGS__)
1882#define _PICOTEST_FOR_EACH_6(what, x, ...) \
1883 what(x) _PICOTEST_FOR_EACH_5 _PICOTEST_PARENS(what, __VA_ARGS__)
1884#define _PICOTEST_FOR_EACH_7(what, x, ...) \
1885 what(x) _PICOTEST_FOR_EACH_6 _PICOTEST_PARENS(what, __VA_ARGS__)
1886#define _PICOTEST_FOR_EACH_8(what, x, ...) \
1887 what(x) _PICOTEST_FOR_EACH_7 _PICOTEST_PARENS(what, __VA_ARGS__)
1888#define _PICOTEST_FOR_EACH_9(what, x, ...) \
1889 what(x) _PICOTEST_FOR_EACH_8 _PICOTEST_PARENS(what, __VA_ARGS__)
1890#define _PICOTEST_FOR_EACH_10(what, x, ...) \
1891 what(x) _PICOTEST_FOR_EACH_9 _PICOTEST_PARENS(what, __VA_ARGS__)
1892#define _PICOTEST_FOR_EACH_11(what, x, ...) \
1893 what(x) _PICOTEST_FOR_EACH_10 _PICOTEST_PARENS(what, __VA_ARGS__)
1894#define _PICOTEST_FOR_EACH_12(what, x, ...) \
1895 what(x) _PICOTEST_FOR_EACH_11 _PICOTEST_PARENS(what, __VA_ARGS__)
1896#define _PICOTEST_FOR_EACH_13(what, x, ...) \
1897 what(x) _PICOTEST_FOR_EACH_12 _PICOTEST_PARENS(what, __VA_ARGS__)
1898#define _PICOTEST_FOR_EACH_14(what, x, ...) \
1899 what(x) _PICOTEST_FOR_EACH_13 _PICOTEST_PARENS(what, __VA_ARGS__)
1900#define _PICOTEST_FOR_EACH_15(what, x, ...) \
1901 what(x) _PICOTEST_FOR_EACH_14 _PICOTEST_PARENS(what, __VA_ARGS__)
1902#define _PICOTEST_FOR_EACH_16(what, x, ...) \
1903 what(x) _PICOTEST_FOR_EACH_15 _PICOTEST_PARENS(what, __VA_ARGS__)
1904#define _PICOTEST_FOR_EACH_17(what, x, ...) \
1905 what(x) _PICOTEST_FOR_EACH_16 _PICOTEST_PARENS(what, __VA_ARGS__)
1906#define _PICOTEST_FOR_EACH_18(what, x, ...) \
1907 what(x) _PICOTEST_FOR_EACH_17 _PICOTEST_PARENS(what, __VA_ARGS__)
1908#define _PICOTEST_FOR_EACH_19(what, x, ...) \
1909 what(x) _PICOTEST_FOR_EACH_18 _PICOTEST_PARENS(what, __VA_ARGS__)
1910#define _PICOTEST_FOR_EACH_20(what, x, ...) \
1911 what(x) _PICOTEST_FOR_EACH_19 _PICOTEST_PARENS(what, __VA_ARGS__)
1912#define _PICOTEST_FOR_EACH_21(what, x, ...) \
1913 what(x) _PICOTEST_FOR_EACH_20 _PICOTEST_PARENS(what, __VA_ARGS__)
1914#define _PICOTEST_FOR_EACH_22(what, x, ...) \
1915 what(x) _PICOTEST_FOR_EACH_21 _PICOTEST_PARENS(what, __VA_ARGS__)
1916#define _PICOTEST_FOR_EACH_23(what, x, ...) \
1917 what(x) _PICOTEST_FOR_EACH_22 _PICOTEST_PARENS(what, __VA_ARGS__)
1918#define _PICOTEST_FOR_EACH_24(what, x, ...) \
1919 what(x) _PICOTEST_FOR_EACH_23 _PICOTEST_PARENS(what, __VA_ARGS__)
1920#define _PICOTEST_FOR_EACH_25(what, x, ...) \
1921 what(x) _PICOTEST_FOR_EACH_24 _PICOTEST_PARENS(what, __VA_ARGS__)
1922#define _PICOTEST_FOR_EACH_26(what, x, ...) \
1923 what(x) _PICOTEST_FOR_EACH_25 _PICOTEST_PARENS(what, __VA_ARGS__)
1924#define _PICOTEST_FOR_EACH_27(what, x, ...) \
1925 what(x) _PICOTEST_FOR_EACH_26 _PICOTEST_PARENS(what, __VA_ARGS__)
1926#define _PICOTEST_FOR_EACH_28(what, x, ...) \
1927 what(x) _PICOTEST_FOR_EACH_27 _PICOTEST_PARENS(what, __VA_ARGS__)
1928#define _PICOTEST_FOR_EACH_29(what, x, ...) \
1929 what(x) _PICOTEST_FOR_EACH_28 _PICOTEST_PARENS(what, __VA_ARGS__)
1930#define _PICOTEST_FOR_EACH_30(what, x, ...) \
1931 what(x) _PICOTEST_FOR_EACH_29 _PICOTEST_PARENS(what, __VA_ARGS__)
1932#define _PICOTEST_FOR_EACH_31(what, x, ...) \
1933 what(x) _PICOTEST_FOR_EACH_30 _PICOTEST_PARENS(what, __VA_ARGS__)
1934#define _PICOTEST_FOR_EACH_32(what, x, ...) \
1935 what(x) _PICOTEST_FOR_EACH_31 _PICOTEST_PARENS(what, __VA_ARGS__)
1936#define _PICOTEST_FOR_EACH_33(what, x, ...) \
1937 what(x) _PICOTEST_FOR_EACH_32 _PICOTEST_PARENS(what, __VA_ARGS__)
1938#define _PICOTEST_FOR_EACH_34(what, x, ...) \
1939 what(x) _PICOTEST_FOR_EACH_33 _PICOTEST_PARENS(what, __VA_ARGS__)
1940#define _PICOTEST_FOR_EACH_35(what, x, ...) \
1941 what(x) _PICOTEST_FOR_EACH_34 _PICOTEST_PARENS(what, __VA_ARGS__)
1942#define _PICOTEST_FOR_EACH_36(what, x, ...) \
1943 what(x) _PICOTEST_FOR_EACH_35 _PICOTEST_PARENS(what, __VA_ARGS__)
1944#define _PICOTEST_FOR_EACH_37(what, x, ...) \
1945 what(x) _PICOTEST_FOR_EACH_36 _PICOTEST_PARENS(what, __VA_ARGS__)
1946#define _PICOTEST_FOR_EACH_38(what, x, ...) \
1947 what(x) _PICOTEST_FOR_EACH_37 _PICOTEST_PARENS(what, __VA_ARGS__)
1948#define _PICOTEST_FOR_EACH_39(what, x, ...) \
1949 what(x) _PICOTEST_FOR_EACH_38 _PICOTEST_PARENS(what, __VA_ARGS__)
1950#define _PICOTEST_FOR_EACH_40(what, x, ...) \
1951 what(x) _PICOTEST_FOR_EACH_39 _PICOTEST_PARENS(what, __VA_ARGS__)
1952#define _PICOTEST_FOR_EACH_41(what, x, ...) \
1953 what(x) _PICOTEST_FOR_EACH_40 _PICOTEST_PARENS(what, __VA_ARGS__)
1954#define _PICOTEST_FOR_EACH_42(what, x, ...) \
1955 what(x) _PICOTEST_FOR_EACH_41 _PICOTEST_PARENS(what, __VA_ARGS__)
1956#define _PICOTEST_FOR_EACH_43(what, x, ...) \
1957 what(x) _PICOTEST_FOR_EACH_42 _PICOTEST_PARENS(what, __VA_ARGS__)
1958#define _PICOTEST_FOR_EACH_44(what, x, ...) \
1959 what(x) _PICOTEST_FOR_EACH_43 _PICOTEST_PARENS(what, __VA_ARGS__)
1960#define _PICOTEST_FOR_EACH_45(what, x, ...) \
1961 what(x) _PICOTEST_FOR_EACH_44 _PICOTEST_PARENS(what, __VA_ARGS__)
1962#define _PICOTEST_FOR_EACH_46(what, x, ...) \
1963 what(x) _PICOTEST_FOR_EACH_45 _PICOTEST_PARENS(what, __VA_ARGS__)
1964#define _PICOTEST_FOR_EACH_47(what, x, ...) \
1965 what(x) _PICOTEST_FOR_EACH_46 _PICOTEST_PARENS(what, __VA_ARGS__)
1966#define _PICOTEST_FOR_EACH_48(what, x, ...) \
1967 what(x) _PICOTEST_FOR_EACH_47 _PICOTEST_PARENS(what, __VA_ARGS__)
1968#define _PICOTEST_FOR_EACH_49(what, x, ...) \
1969 what(x) _PICOTEST_FOR_EACH_48 _PICOTEST_PARENS(what, __VA_ARGS__)
1970#define _PICOTEST_FOR_EACH_50(what, x, ...) \
1971 what(x) _PICOTEST_FOR_EACH_49 _PICOTEST_PARENS(what, __VA_ARGS__)
1972#define _PICOTEST_FOR_EACH_51(what, x, ...) \
1973 what(x) _PICOTEST_FOR_EACH_50 _PICOTEST_PARENS(what, __VA_ARGS__)
1974#define _PICOTEST_FOR_EACH_52(what, x, ...) \
1975 what(x) _PICOTEST_FOR_EACH_51 _PICOTEST_PARENS(what, __VA_ARGS__)
1976#define _PICOTEST_FOR_EACH_53(what, x, ...) \
1977 what(x) _PICOTEST_FOR_EACH_52 _PICOTEST_PARENS(what, __VA_ARGS__)
1978#define _PICOTEST_FOR_EACH_54(what, x, ...) \
1979 what(x) _PICOTEST_FOR_EACH_53 _PICOTEST_PARENS(what, __VA_ARGS__)
1980#define _PICOTEST_FOR_EACH_55(what, x, ...) \
1981 what(x) _PICOTEST_FOR_EACH_54 _PICOTEST_PARENS(what, __VA_ARGS__)
1982#define _PICOTEST_FOR_EACH_56(what, x, ...) \
1983 what(x) _PICOTEST_FOR_EACH_55 _PICOTEST_PARENS(what, __VA_ARGS__)
1984#define _PICOTEST_FOR_EACH_57(what, x, ...) \
1985 what(x) _PICOTEST_FOR_EACH_56 _PICOTEST_PARENS(what, __VA_ARGS__)
1986#define _PICOTEST_FOR_EACH_58(what, x, ...) \
1987 what(x) _PICOTEST_FOR_EACH_57 _PICOTEST_PARENS(what, __VA_ARGS__)
1988#define _PICOTEST_FOR_EACH_59(what, x, ...) \
1989 what(x) _PICOTEST_FOR_EACH_58 _PICOTEST_PARENS(what, __VA_ARGS__)
1990#define _PICOTEST_FOR_EACH_60(what, x, ...) \
1991 what(x) _PICOTEST_FOR_EACH_59 _PICOTEST_PARENS(what, __VA_ARGS__)
1992#define _PICOTEST_FOR_EACH_61(what, x, ...) \
1993 what(x) _PICOTEST_FOR_EACH_60 _PICOTEST_PARENS(what, __VA_ARGS__)
1994#define _PICOTEST_FOR_EACH_62(what, x, ...) \
1995 what(x) _PICOTEST_FOR_EACH_61 _PICOTEST_PARENS(what, __VA_ARGS__)
1996#define _PICOTEST_FOR_EACH_63(what, x, ...) \
1997 what(x) _PICOTEST_FOR_EACH_62 _PICOTEST_PARENS(what, __VA_ARGS__)
1998#else
1999#define _PICOTEST_FOR_EACH_1(what, x) what(x)
2000#define _PICOTEST_FOR_EACH_2(what, x, ...) \
2001 what(x) _PICOTEST_FOR_EACH_1(what, __VA_ARGS__)
2002#define _PICOTEST_FOR_EACH_3(what, x, ...) \
2003 what(x) _PICOTEST_FOR_EACH_2(what, __VA_ARGS__)
2004#define _PICOTEST_FOR_EACH_4(what, x, ...) \
2005 what(x) _PICOTEST_FOR_EACH_3(what, __VA_ARGS__)
2006#define _PICOTEST_FOR_EACH_5(what, x, ...) \
2007 what(x) _PICOTEST_FOR_EACH_4(what, __VA_ARGS__)
2008#define _PICOTEST_FOR_EACH_6(what, x, ...) \
2009 what(x) _PICOTEST_FOR_EACH_5(what, __VA_ARGS__)
2010#define _PICOTEST_FOR_EACH_7(what, x, ...) \
2011 what(x) _PICOTEST_FOR_EACH_6(what, __VA_ARGS__)
2012#define _PICOTEST_FOR_EACH_8(what, x, ...) \
2013 what(x) _PICOTEST_FOR_EACH_7(what, __VA_ARGS__)
2014#define _PICOTEST_FOR_EACH_9(what, x, ...) \
2015 what(x) _PICOTEST_FOR_EACH_8(what, __VA_ARGS__)
2016#define _PICOTEST_FOR_EACH_10(what, x, ...) \
2017 what(x) _PICOTEST_FOR_EACH_9(what, __VA_ARGS__)
2018#define _PICOTEST_FOR_EACH_11(what, x, ...) \
2019 what(x) _PICOTEST_FOR_EACH_10(what, __VA_ARGS__)
2020#define _PICOTEST_FOR_EACH_12(what, x, ...) \
2021 what(x) _PICOTEST_FOR_EACH_11(what, __VA_ARGS__)
2022#define _PICOTEST_FOR_EACH_13(what, x, ...) \
2023 what(x) _PICOTEST_FOR_EACH_12(what, __VA_ARGS__)
2024#define _PICOTEST_FOR_EACH_14(what, x, ...) \
2025 what(x) _PICOTEST_FOR_EACH_13(what, __VA_ARGS__)
2026#define _PICOTEST_FOR_EACH_15(what, x, ...) \
2027 what(x) _PICOTEST_FOR_EACH_14(what, __VA_ARGS__)
2028#define _PICOTEST_FOR_EACH_16(what, x, ...) \
2029 what(x) _PICOTEST_FOR_EACH_15(what, __VA_ARGS__)
2030#define _PICOTEST_FOR_EACH_17(what, x, ...) \
2031 what(x) _PICOTEST_FOR_EACH_16(what, __VA_ARGS__)
2032#define _PICOTEST_FOR_EACH_18(what, x, ...) \
2033 what(x) _PICOTEST_FOR_EACH_17(what, __VA_ARGS__)
2034#define _PICOTEST_FOR_EACH_19(what, x, ...) \
2035 what(x) _PICOTEST_FOR_EACH_18(what, __VA_ARGS__)
2036#define _PICOTEST_FOR_EACH_20(what, x, ...) \
2037 what(x) _PICOTEST_FOR_EACH_19(what, __VA_ARGS__)
2038#define _PICOTEST_FOR_EACH_21(what, x, ...) \
2039 what(x) _PICOTEST_FOR_EACH_20(what, __VA_ARGS__)
2040#define _PICOTEST_FOR_EACH_22(what, x, ...) \
2041 what(x) _PICOTEST_FOR_EACH_21(what, __VA_ARGS__)
2042#define _PICOTEST_FOR_EACH_23(what, x, ...) \
2043 what(x) _PICOTEST_FOR_EACH_22(what, __VA_ARGS__)
2044#define _PICOTEST_FOR_EACH_24(what, x, ...) \
2045 what(x) _PICOTEST_FOR_EACH_23(what, __VA_ARGS__)
2046#define _PICOTEST_FOR_EACH_25(what, x, ...) \
2047 what(x) _PICOTEST_FOR_EACH_24(what, __VA_ARGS__)
2048#define _PICOTEST_FOR_EACH_26(what, x, ...) \
2049 what(x) _PICOTEST_FOR_EACH_25(what, __VA_ARGS__)
2050#define _PICOTEST_FOR_EACH_27(what, x, ...) \
2051 what(x) _PICOTEST_FOR_EACH_26(what, __VA_ARGS__)
2052#define _PICOTEST_FOR_EACH_28(what, x, ...) \
2053 what(x) _PICOTEST_FOR_EACH_27(what, __VA_ARGS__)
2054#define _PICOTEST_FOR_EACH_29(what, x, ...) \
2055 what(x) _PICOTEST_FOR_EACH_28(what, __VA_ARGS__)
2056#define _PICOTEST_FOR_EACH_30(what, x, ...) \
2057 what(x) _PICOTEST_FOR_EACH_29(what, __VA_ARGS__)
2058#define _PICOTEST_FOR_EACH_31(what, x, ...) \
2059 what(x) _PICOTEST_FOR_EACH_30(what, __VA_ARGS__)
2060#define _PICOTEST_FOR_EACH_32(what, x, ...) \
2061 what(x) _PICOTEST_FOR_EACH_31(what, __VA_ARGS__)
2062#define _PICOTEST_FOR_EACH_33(what, x, ...) \
2063 what(x) _PICOTEST_FOR_EACH_32(what, __VA_ARGS__)
2064#define _PICOTEST_FOR_EACH_34(what, x, ...) \
2065 what(x) _PICOTEST_FOR_EACH_33(what, __VA_ARGS__)
2066#define _PICOTEST_FOR_EACH_35(what, x, ...) \
2067 what(x) _PICOTEST_FOR_EACH_34(what, __VA_ARGS__)
2068#define _PICOTEST_FOR_EACH_36(what, x, ...) \
2069 what(x) _PICOTEST_FOR_EACH_35(what, __VA_ARGS__)
2070#define _PICOTEST_FOR_EACH_37(what, x, ...) \
2071 what(x) _PICOTEST_FOR_EACH_36(what, __VA_ARGS__)
2072#define _PICOTEST_FOR_EACH_38(what, x, ...) \
2073 what(x) _PICOTEST_FOR_EACH_37(what, __VA_ARGS__)
2074#define _PICOTEST_FOR_EACH_39(what, x, ...) \
2075 what(x) _PICOTEST_FOR_EACH_38(what, __VA_ARGS__)
2076#define _PICOTEST_FOR_EACH_40(what, x, ...) \
2077 what(x) _PICOTEST_FOR_EACH_39(what, __VA_ARGS__)
2078#define _PICOTEST_FOR_EACH_41(what, x, ...) \
2079 what(x) _PICOTEST_FOR_EACH_40(what, __VA_ARGS__)
2080#define _PICOTEST_FOR_EACH_42(what, x, ...) \
2081 what(x) _PICOTEST_FOR_EACH_41(what, __VA_ARGS__)
2082#define _PICOTEST_FOR_EACH_43(what, x, ...) \
2083 what(x) _PICOTEST_FOR_EACH_42(what, __VA_ARGS__)
2084#define _PICOTEST_FOR_EACH_44(what, x, ...) \
2085 what(x) _PICOTEST_FOR_EACH_43(what, __VA_ARGS__)
2086#define _PICOTEST_FOR_EACH_45(what, x, ...) \
2087 what(x) _PICOTEST_FOR_EACH_44(what, __VA_ARGS__)
2088#define _PICOTEST_FOR_EACH_46(what, x, ...) \
2089 what(x) _PICOTEST_FOR_EACH_45(what, __VA_ARGS__)
2090#define _PICOTEST_FOR_EACH_47(what, x, ...) \
2091 what(x) _PICOTEST_FOR_EACH_46(what, __VA_ARGS__)
2092#define _PICOTEST_FOR_EACH_48(what, x, ...) \
2093 what(x) _PICOTEST_FOR_EACH_47(what, __VA_ARGS__)
2094#define _PICOTEST_FOR_EACH_49(what, x, ...) \
2095 what(x) _PICOTEST_FOR_EACH_48(what, __VA_ARGS__)
2096#define _PICOTEST_FOR_EACH_50(what, x, ...) \
2097 what(x) _PICOTEST_FOR_EACH_49(what, __VA_ARGS__)
2098#define _PICOTEST_FOR_EACH_51(what, x, ...) \
2099 what(x) _PICOTEST_FOR_EACH_50(what, __VA_ARGS__)
2100#define _PICOTEST_FOR_EACH_52(what, x, ...) \
2101 what(x) _PICOTEST_FOR_EACH_51(what, __VA_ARGS__)
2102#define _PICOTEST_FOR_EACH_53(what, x, ...) \
2103 what(x) _PICOTEST_FOR_EACH_52(what, __VA_ARGS__)
2104#define _PICOTEST_FOR_EACH_54(what, x, ...) \
2105 what(x) _PICOTEST_FOR_EACH_53(what, __VA_ARGS__)
2106#define _PICOTEST_FOR_EACH_55(what, x, ...) \
2107 what(x) _PICOTEST_FOR_EACH_54(what, __VA_ARGS__)
2108#define _PICOTEST_FOR_EACH_56(what, x, ...) \
2109 what(x) _PICOTEST_FOR_EACH_55(what, __VA_ARGS__)
2110#define _PICOTEST_FOR_EACH_57(what, x, ...) \
2111 what(x) _PICOTEST_FOR_EACH_56(what, __VA_ARGS__)
2112#define _PICOTEST_FOR_EACH_58(what, x, ...) \
2113 what(x) _PICOTEST_FOR_EACH_57(what, __VA_ARGS__)
2114#define _PICOTEST_FOR_EACH_59(what, x, ...) \
2115 what(x) _PICOTEST_FOR_EACH_58(what, __VA_ARGS__)
2116#define _PICOTEST_FOR_EACH_60(what, x, ...) \
2117 what(x) _PICOTEST_FOR_EACH_59(what, __VA_ARGS__)
2118#define _PICOTEST_FOR_EACH_61(what, x, ...) \
2119 what(x) _PICOTEST_FOR_EACH_60(what, __VA_ARGS__)
2120#define _PICOTEST_FOR_EACH_62(what, x, ...) \
2121 what(x) _PICOTEST_FOR_EACH_61(what, __VA_ARGS__)
2122#define _PICOTEST_FOR_EACH_63(what, x, ...) \
2123 what(x) _PICOTEST_FOR_EACH_62(what, __VA_ARGS__)
2124#endif /* defined(_PICOTEST_PARENS) */
2126
2128
2131
2132#endif /* _PICOTEST */
void PicoTestAssertBeforeProc(const char *type, const char *test)
Function signature of assert before hooks.
Definition picotest.h:994
void PicoTestAssertAfterProc(const char *type, const char *test, int fail)
Function signature of assert after hooks.
Definition picotest.h:1043
void PicoTestFixtureAfterSetupProc(const char *fixtureName, const char *testName)
Function signature of test fixture after setup hooks.
Definition picotest.h:1303
void PicoTestFixtureBeforeSetupProc(const char *fixtureName, const char *testName)
Function signature of test fixture before setup hooks.
Definition picotest.h:1254
void PicoTestFixtureBeforeTeardownProc(const char *fixtureName, const char *testName, int fail)
Function signature of test fixture before teardown hooks.
Definition picotest.h:1353
void PicoTestFixtureAfterTeardownProc(const char *fixtureName, const char *testName, int fail)
Function signature of test fixture after teardown hooks.
Definition picotest.h:1404
const char * file
Definition picotest.h:179
const char * name
Definition picotest.h:178
PicoTestProc *const test
Definition picotest.h:181
const struct PicoTestMetadata ** subtests
Definition picotest.h:183
int nbSubtests
Definition picotest.h:182
int line
Definition picotest.h:180
void PicoTestVisitProc(const PicoTestMetadata *metadata, PicoTestVisitStep step)
Function signature of test visit proc.
Definition picotest.h:436
void PicoTestTraverseProc(const char *name, int nb)
Function signature of test traversal proc.
Definition picotest.h:369
int PicoTestProc(const char *cond)
Signature of test functions.
Definition picotest.h:172
PicoTestFilterResult PicoTestFilterProc(PicoTestProc *test, const char *testName, const char *cond)
Signature of test filter functions.
Definition picotest.h:285
PicoTestVisitStep
Test visit step.
Definition picotest.h:417
PicoTestFilterResult
Result of test filter functions.
Definition picotest.h:245
void PicoTestFailureLoggerProc(const char *file, int line, const char *type, const char *test, const char *msg, va_list args)
Function signature of test failure log handlers.
Definition picotest.h:508
@ PICOTEST_VISIT_ENTER
Enter the test.
Definition picotest.h:419
@ PICOTEST_VISIT_LEAVE
Leave the test.
Definition picotest.h:422
@ PICOTEST_FILTER_SKIP
Test does not match the condition, skip this test and all its subtests.
Definition picotest.h:248
@ PICOTEST_FILTER_PASS
Test matches the condition, run this test and all its subtests.
Definition picotest.h:251
@ PICOTEST_FILTER_SKIP_PROPAGATE
Test does not match the condition, skip this test but filter its subtests.
Definition picotest.h:255
@ PICOTEST_FILTER_PASS_PROPAGATE
Test matches the condition, run this test but filter its subtests.
Definition picotest.h:258
Test metadata.
Definition picotest.h:177
void PicoTestCaseEnterProc(const char *testName)
Function signature of test case enter hooks.
Definition picotest.h:718
void PicoTestCaseLeaveProc(const char *testName, int fail)
Function signature of test case leave hooks.
Definition picotest.h:766
void PicoTestSuiteEnterProc(const char *suiteName, int nb)
Function signature of test suite enter hooks.
Definition picotest.h:1568
void PicoTestSuiteLeaveProc(const char *suiteName, int nb, int fail)
Function signature of test suite leave hooks.
Definition picotest.h:1616
void PicoTestSuiteBeforeSubtestProc(const char *suiteName, int nb, int fail, int index, const char *testName)
Function signature of test suite before subtest hooks.
Definition picotest.h:1670
void PicoTestSuiteAfterSubtestProc(const char *suiteName, int nb, int fail, int index, const char *testName, int sfail)
Function signature of test suite after subtest hooks.
Definition picotest.h:1727