Skip to content

Commit 4163528

Browse files
committed
Add missing compilation options from EPhotosynthesis library to test compilation now that it is compiled separately
Add guards checking for if MSVC compile with /Zc:preprocessor Updated macro tests to trigger an error Add macros for comparing integers
1 parent 396b4be commit 4163528

File tree

5 files changed

+139
-34
lines changed

5 files changed

+139
-34
lines changed

CMakeLists.txt

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -573,6 +573,9 @@ if(BUILD_TESTS)
573573
# non-exported symbols can still be tested by unit tests
574574
add_executable(testRunner ${TEST_LIST} $<TARGET_OBJECTS:EPhotosynthesis>)
575575
# target_link_libraries(testRunner EPhotosynthesis)
576+
target_compile_options(
577+
testRunner PUBLIC $<TARGET_PROPERTY:EPhotosynthesis,COMPILE_OPTIONS>
578+
)
576579
target_include_directories(
577580
testRunner PUBLIC $<TARGET_PROPERTY:EPhotosynthesis,INCLUDE_DIRECTORIES>
578581
)

include/macros.hpp

Lines changed: 68 additions & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -8,16 +8,18 @@
88
# define EXPAND(...) __VA_ARGS__
99
# define OBSTRUCT_INDIRECT() OBSTRUCT
1010

11-
// On Clang/GNU compilers, ", ## __VA_ARGS__" will result in an empty
12-
// token if __VA_ARGS__ is empty. This is not True for MSVC.
13-
// #define EAT_COMMA(...) , ## __VA_ARGS__
14-
// #define APPEND_VA_ARGS(x, ...) x EAT_COMMA(__VA_ARGS__)
15-
11+
#if defined(_MSVC_TRADITIONAL) && _MSVC_TRADITIONAL
1612
#define APPEND_VA_ARGS_1(x, ...) x
1713
#define APPEND_VA_ARGS_0(x, ...) x, __VA_ARGS__
1814
#define APPEND_VA_ARGS(x, ...) \
1915
IF_FUNC(IS_EMPTY(__VA_ARGS__), APPEND_VA_ARGS_)(x, __VA_ARGS__)
20-
16+
#else
17+
// On Clang/GNU compilers, ", ## __VA_ARGS__" will result in an empty
18+
// token if __VA_ARGS__ is empty. This is not True for MSVC unless
19+
// /Zc:preprocessor set
20+
#define EAT_COMMA(...) , ## __VA_ARGS__
21+
#define APPEND_VA_ARGS(x, ...) x EAT_COMMA(__VA_ARGS__)
22+
#endif
2123

2224
#define NARGS_ARG_N_(...) NARGS_ARG_N(__VA_ARGS__)
2325

@@ -367,6 +369,13 @@
367369
#endif // VALUE_SET_VAL_MEMBERS
368370

369371

372+
#define LESSEQ_0 1
373+
#define LESSEQ_1 0
374+
#define LESSEQ(A, B) IF_FUNC(SUBTRACT(A, B), LESSEQ_)
375+
#define GREATEREQ_0 1
376+
#define GREATEREQ_1 0
377+
#define GREATEREQ(A, B) IF_FUNC(SUBTRACT(B, A), GREATEREQ_)
378+
#define EQUAL(A, B) AND(LESSEQ(A, B), GREATEREQ(A, B))
370379
#define ADD(N, M) EVAL(ADD_(N, M))
371380
#define ADD_(N, M) NEST(M, INC, N)
372381
#define SUBTRACT(N, M) EVAL(SUBTRACT_(N, M))
@@ -414,6 +423,11 @@
414423
#define NARGS_ALT(...) NARGS_ALT_(__VA_ARGS__)
415424
#define NARGS(...) NARGS_ALT(__VA_ARGS__)
416425

426+
// #if defined(_MSVC_TRADITIONAL) && _MSVC_TRADITIONAL
427+
// #else
428+
// #define NARGS(...) NARGS_DIRECT(__VA_ARGS__)
429+
// #endif
430+
417431
#define FIRST_ARG(a, ...) a
418432
#define FIRST_ARG_DEFERED() FIRST_ARG
419433
#define FIRST_ARG_PACKED(args) FIRST_ARG args
@@ -600,6 +614,33 @@ MACRO_TEST(OR, 1, OR(1, ));
600614
MACRO_TEST(OR, 1, OR(, 1));
601615
MACRO_TEST(OR, 0, OR(, ));
602616

617+
MACRO_TEST(ADD, 2, ADD(1, 1));
618+
MACRO_TEST(ADD, 15, ADD(10, 5));
619+
620+
MACRO_TEST(SUBTRACT, 1, SUBTRACT(2, 1));
621+
MACRO_TEST(SUBTRACT, 0, SUBTRACT(1, 2));
622+
MACRO_TEST(SUBTRACT, 10, SUBTRACT(15, 5));
623+
MACRO_TEST(SUBTRACT, 0, SUBTRACT(15, 15));
624+
625+
MACRO_TEST(LESSEQ, 1, LESSEQ(0, 1));
626+
MACRO_TEST(LESSEQ, 1, LESSEQ(0, 0));
627+
MACRO_TEST(LESSEQ, 0, LESSEQ(1, 0));
628+
MACRO_TEST(LESSEQ, 1, LESSEQ(15, 20));
629+
MACRO_TEST(LESSEQ, 0, LESSEQ(20, 15));
630+
631+
MACRO_TEST(GREATEREQ, 0, GREATEREQ(0, 1));
632+
MACRO_TEST(GREATEREQ, 1, GREATEREQ(0, 0));
633+
MACRO_TEST(GREATEREQ, 1, GREATEREQ(1, 0));
634+
MACRO_TEST(GREATEREQ, 0, GREATEREQ(15, 20));
635+
MACRO_TEST(GREATEREQ, 1, GREATEREQ(20, 15));
636+
637+
MACRO_TEST(EQUAL, 1, EQUAL(1, 1));
638+
MACRO_TEST(EQUAL, 1, EQUAL(0, 0));
639+
MACRO_TEST(EQUAL, 1, EQUAL(15, 15));
640+
MACRO_TEST(EQUAL, 0, EQUAL(1, 0));
641+
MACRO_TEST(EQUAL, 0, EQUAL(15, 20));
642+
MACRO_TEST(EQUAL, 0, EQUAL(20, 15));
643+
603644
MACRO_TEST(HAS_PARENS, 0, HAS_PARENS(A, B, C));
604645
MACRO_TEST(HAS_PARENS, 1, HAS_PARENS((A)));
605646
MACRO_TEST(HAS_PARENS, 1, HAS_PARENS((A, B, C)));
@@ -657,38 +698,39 @@ MACRO_TEST(IS_LESS_THAN_NARGS_N, 0, IS_LESS_THAN_NARGS_N(1, A, B, C));
657698
MACRO_TEST(IS_LESS_THAN_NARGS_N, 1, IS_LESS_THAN_NARGS_N(4, A, B, C));
658699
MACRO_TEST(IS_LESS_THAN_NARGS_N, 0, IS_LESS_THAN_NARGS_N(3, A, B, C));
659700
MACRO_TEST(IS_LESS_THAN_NARGS_N, 1, IS_LESS_THAN_NARGS_N(2, ));
701+
MACRO_TEST(IS_LESS_THAN_NARGS_N, 0, IS_LESS_THAN_NARGS_N(1, ));
660702

661703
MACRO_TEST(IS_MORE_THAN_NARGS_N, 1, IS_MORE_THAN_NARGS_N(1, A, B, C));
662704
MACRO_TEST(IS_MORE_THAN_NARGS_N, 0, IS_MORE_THAN_NARGS_N(4, A, B, C));
663705

664-
MACRO_TEST(FOR_EACH, A, FOR_EACH(PASS_THROUGH, A));
665-
MACRO_TEST(FOR_EACH, PACK_MACRO(A; B; C), FOR_EACH(PASS_THROUGH, A, B, C));
666-
MACRO_TEST(FOR_EACH_COMMA, (A), ADD_PARENS(FOR_EACH_COMMA(PASS_THROUGH, A)));
667-
MACRO_TEST(FOR_EACH_COMMA, (A, B, C), ADD_PARENS(FOR_EACH_COMMA(PASS_THROUGH, A, B, C)));
706+
MACRO_TEST(FOR_EACH, 15, FOR_EACH(PASS_THROUGH, 15));
707+
MACRO_TEST_NOEQ(FOR_EACH, PACK_MACRO(A; B; C), FOR_EACH(PASS_THROUGH, A, B, C));
708+
MACRO_TEST_NOEQ(FOR_EACH_COMMA, (A), ADD_PARENS(FOR_EACH_COMMA(PASS_THROUGH, A)));
709+
MACRO_TEST_NOEQ(FOR_EACH_COMMA, (A, B, C), ADD_PARENS(FOR_EACH_COMMA(PASS_THROUGH, A, B, C)));
668710

669-
MACRO_TEST(GET_ARG_N_BEFORE_END, A, GET_ARG_N_BEFORE_END(2, A, B, C));
670-
MACRO_TEST(GET_ARG_N_BEFORE_END, B, GET_ARG_N_BEFORE_END(1, A, B, C));
671-
MACRO_TEST(GET_ARG_N_BEFORE_END, C, GET_ARG_N_BEFORE_END(0, A, B, C));
672-
MACRO_TEST(GET_ARG_N_BEFORE_END, , GET_ARG_N_BEFORE_END(0, A, B, ));
711+
MACRO_TEST_NOEQ(GET_ARG_N_BEFORE_END, A, GET_ARG_N_BEFORE_END(2, A, B, C));
712+
MACRO_TEST_NOEQ(GET_ARG_N_BEFORE_END, B, GET_ARG_N_BEFORE_END(1, A, B, C));
713+
MACRO_TEST_NOEQ(GET_ARG_N_BEFORE_END, C, GET_ARG_N_BEFORE_END(0, A, B, C));
714+
MACRO_TEST_NOEQ(GET_ARG_N_BEFORE_END, , GET_ARG_N_BEFORE_END(0, A, B, ));
673715

674-
MACRO_TEST(LAST_ARG, C, LAST_ARG(A, B, C));
675-
MACRO_TEST(LAST_ARG, , LAST_ARG(A, B, ));
716+
MACRO_TEST_NOEQ(LAST_ARG, C, LAST_ARG(A, B, C));
717+
MACRO_TEST_NOEQ(LAST_ARG, , LAST_ARG(A, B, ));
676718

677719
MACRO_TEST(IS_SPACE_ARG_N, 0, IS_SPACE_ARG_N(0, A));
678720
MACRO_TEST(IS_SPACE_ARG_N, 1, IS_SPACE_ARG_N(0, ));
679721
MACRO_TEST(IS_SPACE_ARG_N, 1, IS_SPACE_ARG_N(124, B));
680722

681-
MACRO_TEST(GET_ARGS_AFTER, PACK_MACRO(B, C),
682-
EVAL(GET_ARGS_AFTER_N(1, A, B, C)));
683-
MACRO_TEST(GET_ARGS_AFTER,
684-
PACK_MACRO(_11, _12, _13),
685-
EVAL(GET_ARGS_AFTER_N(10, _1, _2, _3, _4, _5, _6, _7, _8, _9,
686-
_10, _11, _12, _13)));
687-
MACRO_TEST(GET_ARGS_AFTER,
688-
PACK_MACRO(_16, _17, _18, _19, _20),
689-
EVAL(GET_ARGS_AFTER_N(15, _1, _2, _3, _4, _5, _6, _7, _8, _9,
723+
MACRO_TEST_EVAL(GET_ARGS_AFTER, PACK_MACRO(B, C),
724+
GET_ARGS_AFTER_N(1, A, B, C));
725+
MACRO_TEST_EVAL(GET_ARGS_AFTER,
726+
PACK_MACRO(_11, _12, _13),
727+
GET_ARGS_AFTER_N(10, _1, _2, _3, _4, _5, _6, _7, _8, _9,
728+
_10, _11, _12, _13));
729+
MACRO_TEST_EVAL(GET_ARGS_AFTER,
730+
PACK_MACRO(_16, _17, _18, _19, _20),
731+
GET_ARGS_AFTER_N(15, _1, _2, _3, _4, _5, _6, _7, _8, _9,
690732
_10, _11, _12, _13, _14, _15, _16, _17,
691-
_18, _19, _20)));
733+
_18, _19, _20));
692734

693735
#define TEST_ARG_NODEF (const double&, val, )
694736
#define TEST_ARG_DEF (bool, includePrefixes, false)

include/macros_iter.hpp

Lines changed: 22 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -217,6 +217,7 @@
217217
#define DEC(N) CONCATENATE_MAX(DEC_, N)
218218
#define DEC_DEFERED() DEC
219219
#define DEC_EXPANDED(...) DEC(__VA_ARGS__)
220+
#define DEC_0 0
220221
#define DEC_1 0
221222
#define DEC_2 1
222223
#define DEC_3 2
@@ -2278,6 +2279,7 @@
22782279
#define NARGS_FLAGS() \
22792280
UNIQUE_FLAG, UNIQUE_FLAG, UNIQUE_FLAG, UNIQUE_FLAG, UNIQUE_FLAG, UNIQUE_FLAG, UNIQUE_FLAG, UNIQUE_FLAG, UNIQUE_FLAG, UNIQUE_FLAG, UNIQUE_FLAG, UNIQUE_FLAG, UNIQUE_FLAG, UNIQUE_FLAG, UNIQUE_FLAG, UNIQUE_FLAG, UNIQUE_FLAG, UNIQUE_FLAG, UNIQUE_FLAG, UNIQUE_FLAG, UNIQUE_FLAG, UNIQUE_FLAG, UNIQUE_FLAG, UNIQUE_FLAG, UNIQUE_FLAG, UNIQUE_FLAG, UNIQUE_FLAG, UNIQUE_FLAG, UNIQUE_FLAG, UNIQUE_FLAG, UNIQUE_FLAG, UNIQUE_FLAG, UNIQUE_FLAG, UNIQUE_FLAG, UNIQUE_FLAG, UNIQUE_FLAG, UNIQUE_FLAG, UNIQUE_FLAG, UNIQUE_FLAG, UNIQUE_FLAG, UNIQUE_FLAG, UNIQUE_FLAG, UNIQUE_FLAG, UNIQUE_FLAG, UNIQUE_FLAG, UNIQUE_FLAG, UNIQUE_FLAG, UNIQUE_FLAG, UNIQUE_FLAG, UNIQUE_FLAG, UNIQUE_FLAG, UNIQUE_FLAG, UNIQUE_FLAG, UNIQUE_FLAG, UNIQUE_FLAG, UNIQUE_FLAG, UNIQUE_FLAG, UNIQUE_FLAG, UNIQUE_FLAG, UNIQUE_FLAG, UNIQUE_FLAG, UNIQUE_FLAG, UNIQUE_FLAG, UNIQUE_FLAG, UNIQUE_FLAG, UNIQUE_FLAG, UNIQUE_FLAG, UNIQUE_FLAG, UNIQUE_FLAG, UNIQUE_FLAG, UNIQUE_FLAG, UNIQUE_FLAG, UNIQUE_FLAG, UNIQUE_FLAG, UNIQUE_FLAG, UNIQUE_FLAG, UNIQUE_FLAG, UNIQUE_FLAG, UNIQUE_FLAG, UNIQUE_FLAG, UNIQUE_FLAG, UNIQUE_FLAG, UNIQUE_FLAG, UNIQUE_FLAG, UNIQUE_FLAG, UNIQUE_FLAG, UNIQUE_FLAG, UNIQUE_FLAG, UNIQUE_FLAG, UNIQUE_FLAG, UNIQUE_FLAG, UNIQUE_FLAG, UNIQUE_FLAG, UNIQUE_FLAG, UNIQUE_FLAG, UNIQUE_FLAG, UNIQUE_FLAG, UNIQUE_FLAG, UNIQUE_FLAG, UNIQUE_FLAG, UNIQUE_FLAG, UNIQUE_FLAG, UNIQUE_FLAG, UNIQUE_FLAG, UNIQUE_FLAG, UNIQUE_FLAG, UNIQUE_FLAG, UNIQUE_FLAG, UNIQUE_FLAG, UNIQUE_FLAG, UNIQUE_FLAG, UNIQUE_FLAG, UNIQUE_FLAG, UNIQUE_FLAG, UNIQUE_FLAG, UNIQUE_FLAG, UNIQUE_FLAG, UNIQUE_FLAG, UNIQUE_FLAG, UNIQUE_FLAG, UNIQUE_FLAG, UNIQUE_FLAG, UNIQUE_FLAG, UNIQUE_FLAG, UNIQUE_FLAG, UNIQUE_FLAG, UNIQUE_FLAG, UNIQUE_FLAG, UNIQUE_FLAG, UNIQUE_FLAG, UNIQUE_FLAG, UNIQUE_FLAG, UNIQUE_FLAG, UNIQUE_FLAG, UNIQUE_FLAG, UNIQUE_FLAG, UNIQUE_FLAG, UNIQUE_FLAG, UNIQUE_FLAG, UNIQUE_FLAG, UNIQUE_FLAG, UNIQUE_FLAG, UNIQUE_FLAG, UNIQUE_FLAG, UNIQUE_FLAG, UNIQUE_FLAG, UNIQUE_FLAG, UNIQUE_FLAG, UNIQUE_FLAG, UNIQUE_FLAG, UNIQUE_FLAG, UNIQUE_FLAG, UNIQUE_FLAG, UNIQUE_FLAG, UNIQUE_FLAG, UNIQUE_FLAG, UNIQUE_FLAG, UNIQUE_FLAG, UNIQUE_FLAG, UNIQUE_FLAG, UNIQUE_FLAG, UNIQUE_FLAG, UNIQUE_FLAG, UNIQUE_FLAG, UNIQUE_FLAG, UNIQUE_FLAG, UNIQUE_FLAG, UNIQUE_FLAG, UNIQUE_FLAG, UNIQUE_FLAG, UNIQUE_FLAG, UNIQUE_FLAG, UNIQUE_FLAG, UNIQUE_FLAG, UNIQUE_FLAG, UNIQUE_FLAG, UNIQUE_FLAG, UNIQUE_FLAG, UNIQUE_FLAG, UNIQUE_FLAG, UNIQUE_FLAG, UNIQUE_FLAG, UNIQUE_FLAG, UNIQUE_FLAG, UNIQUE_FLAG, UNIQUE_FLAG, UNIQUE_FLAG, UNIQUE_FLAG, UNIQUE_FLAG, UNIQUE_FLAG, UNIQUE_FLAG, UNIQUE_FLAG, UNIQUE_FLAG, UNIQUE_FLAG, UNIQUE_FLAG, UNIQUE_FLAG, UNIQUE_FLAG, UNIQUE_FLAG, UNIQUE_FLAG, UNIQUE_FLAG
22802281

2282+
#ifdef DO_TEST_MACROS_PREPROCESS
22812283
//////////////////////////////////////////////////////////////////////
22822284
// TESTING
22832285
// Utilities for testing macros
@@ -2291,6 +2293,24 @@
22912293
#define TEST_SEQ_200 \
22922294
0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, 148, 149, 150, 151, 152, 153, 154, 155, 156, 157, 158, 159, 160, 161, 162, 163, 164, 165, 166, 167, 168, 169, 170, 171, 172, 173, 174, 175, 176, 177, 178, 179, 180, 181, 182, 183, 184, 185, 186, 187, 188, 189, 190, 191, 192, 193, 194, 195, 196, 197, 198, 199
22932295
#define TEST_SEQ_MAX_ITER TEST_SEQ_200
2294-
#define MACRO_TEST(name, exp, expr) name[exp][expr] -> #expr
2296+
#define DISPLAY_MACRO_TEST(name, exp, expr, str) \
2297+
name[exp][expr] -> str
2298+
#define MACRO_TEST_ERROR \
2299+
MACRO_TEST_ERROR ## (
2300+
#define MACRO_TEST_RESULT_0(...) \
2301+
MACRO_TEST_ERROR; \
2302+
DISPLAY_MACRO_TEST(__VA_ARGS__)
2303+
#ifdef SHOW_PASSED_MACRO_TESTS
2304+
#define MACRO_TEST_RESULT_1(...) DISPLAY_MACRO_TEST(__VA_ARGS__)
2305+
#else // SHOW_PASSED_MACRO_TESTS
2306+
#define MACRO_TEST_RESULT_1(...)
2307+
#endif // SHOW_PASSED_MACRO_TESTS
2308+
#define CHECK_TEST_RESULT(name, exp, expr, str) \
2309+
IF_FUNC(EQUAL(exp, expr), MACRO_TEST_RESULT_)(name, exp, expr, str)
2310+
#define MACRO_TEST(name, exp, expr) \
2311+
CHECK_TEST_RESULT(name, PACK_MACRO(exp), PACK_MACRO(expr), #expr)
2312+
#define MACRO_TEST_NOEQ(name, exp, expr) \
2313+
DISPLAY_MACRO_TEST(name, PACK_MACRO(exp), PACK_MACRO(expr), #expr)
22952314
#define MACRO_TEST_EVAL(name, exp, expr) \
2296-
name[exp][EVAL(expr)] -> #expr
2315+
DISPLAY_MACRO_TEST(name, PACK_MACRO(exp), EVAL(expr), #expr)
2316+
#endif // DO_TEST_MACROS_PREPROCESS

scripts/devtasks.py

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -697,6 +697,8 @@ def __init__(self, args):
697697
if not args.defines:
698698
args.defines = []
699699
args.defines.append('DO_TEST_MACROS_PREPROCESS=1')
700+
if args.show_passed_macro_tests:
701+
args.defines.append('SHOW_PASSED_MACRO_TESTS=1')
700702
generate_macros = os.path.join(_utils_dir,
701703
'generate_macros.py')
702704
result_macros = os.path.join(_source_dir, 'include',
@@ -837,6 +839,10 @@ def __init__(self, args, **kwargs):
837839
'--test-macros', action='store_true',
838840
help='Enable macro testing'
839841
)
842+
parser_preprocess.add_argument(
843+
'--show-passed-macro-tests', action='store_true',
844+
help='Show results from passed macro tests'
845+
)
840846
parser_preprocess.add_argument(
841847
'--capture', action='store_true',
842848
help='Capture the output to preprocess.txt if output_file not set'

utils/generate_macros.py

Lines changed: 40 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -154,6 +154,9 @@ def generate_dec(self):
154154
lines = self.begin_section("DEC", "Decrement an integer")
155155
lines += [f'#define DEC_MAX {self.args.max_iter}']
156156
lines += self.define_N('DEC', no_suffix=True)
157+
lines += [
158+
'#define DEC_0 0'
159+
]
157160
lines += [
158161
f'#define DEC_{x + 1} {x}' for x in range(self.args.max_iter)
159162
]
@@ -307,7 +310,9 @@ def generate_nargs(self):
307310
lines = self.begin_section(
308311
'NARGS', 'Utilities for counting macro arguments'
309312
)
313+
# lines += ['#if defined(_MSVC_TRADITIONAL) && _MSVC_TRADITIONAL']
310314
lines += self.define('NARGS_MAX', body=str(self.max_args))
315+
# lines += ['#endif']
311316
lines += self.define_return_N(self.max_args,
312317
name='NARGS_ARG_N')
313318
lines += self.define_return_N(1)
@@ -342,7 +347,8 @@ def generate_nargs(self):
342347
return self.end_section(lines)
343348

344349
def generate_test(self):
345-
lines = self.begin_section(
350+
lines = ['#ifdef DO_TEST_MACROS_PREPROCESS']
351+
lines += self.begin_section(
346352
"TESTING", 'Utilities for testing macros'
347353
)
348354
lines += self.define(
@@ -363,15 +369,43 @@ def generate_test(self):
363369
)
364370
lines += self.define('TEST_SEQ_MAX_ITER',
365371
body=f'TEST_SEQ_{self.args.max_iter}')
366-
# lines += self.define('MACRO_TEST_0', args=['name', 'exp', 'expr'],
367-
# body='')
368-
# lines += self.define('MACRO_TEST_EVAL', args=['name', 'exp', 'expr'],
372+
lines += self.define(
373+
'DISPLAY_MACRO_TEST', args=['name', 'exp', 'expr', 'str'],
374+
body='name[exp][expr] -> str',
375+
)
376+
lines += self.define('MACRO_TEST_ERROR',
377+
body=['MACRO_TEST_ERROR ## ('])
378+
lines += self.define('MACRO_TEST_RESULT_0', va_args=True,
379+
body=['MACRO_TEST_ERROR; ',
380+
'DISPLAY_MACRO_TEST(__VA_ARGS__)'])
381+
lines += ['#ifdef SHOW_PASSED_MACRO_TESTS']
382+
lines += self.define('MACRO_TEST_RESULT_1', va_args=True,
383+
body='DISPLAY_MACRO_TEST(__VA_ARGS__)')
384+
lines += ['#else // SHOW_PASSED_MACRO_TESTS']
385+
lines += self.define('MACRO_TEST_RESULT_1', va_args=True,
386+
body='')
387+
lines += ['#endif // SHOW_PASSED_MACRO_TESTS']
388+
lines += self.define(
389+
'CHECK_TEST_RESULT', args=['name', 'exp', 'expr', 'str'],
390+
body=('IF_FUNC(EQUAL(exp, expr), MACRO_TEST_RESULT_)'
391+
'(name, exp, expr, str)')
392+
)
369393
lines += self.define(
370394
'MACRO_TEST', args=['name', 'exp', 'expr'],
371-
body=('name[exp][expr] -> #expr'))
395+
body=('CHECK_TEST_RESULT(name, PACK_MACRO(exp), '
396+
'PACK_MACRO(expr), #expr)')
397+
)
398+
lines += self.define(
399+
'MACRO_TEST_NOEQ', args=['name', 'exp', 'expr'],
400+
body=('DISPLAY_MACRO_TEST(name, PACK_MACRO(exp), '
401+
'PACK_MACRO(expr), #expr)'),
402+
)
372403
lines += self.define(
373404
'MACRO_TEST_EVAL', args=['name', 'exp', 'expr'],
374-
body=('name[exp][EVAL(expr)] -> #expr'))
405+
body=('DISPLAY_MACRO_TEST(name, PACK_MACRO(exp), '
406+
'EVAL(expr), #expr)'),
407+
)
408+
lines += ['#endif // DO_TEST_MACROS_PREPROCESS']
375409
return self.end_section(lines)
376410

377411
def write(self, lines):

0 commit comments

Comments
 (0)