Skip to content

Commit ae871c5

Browse files
committed
tests: unit: util: Add tests for COND_CASE_1
Add test cases for the COND_CASE_1 macro. Signed-off-by: Pieter De Gendt <[email protected]>
1 parent ea18d64 commit ae871c5

File tree

2 files changed

+66
-54
lines changed

2 files changed

+66
-54
lines changed

include/zephyr/sys/util_internal.h

Lines changed: 35 additions & 54 deletions
Original file line numberDiff line numberDiff line change
@@ -73,63 +73,44 @@
7373

7474
/* Used by COND_CASE_1(); supports up to 16 flag/value pairs */
7575
#define Z_COND_CASE_1(...) \
76-
Z_COND_CASE_1_SELECT(NUM_VA_ARGS_LESS_1(__VA_ARGS__), __VA_ARGS__)
76+
Z_COND_CASE_1_CAT_N(NUM_VA_ARGS_LESS_1(__VA_ARGS__), __VA_ARGS__)
7777

78-
#define Z_COND_CASE_1_SELECT(count_minus_one, ...) \
79-
UTIL_CAT(Z_COND_CASE_1_LEVEL_, count_minus_one)(__VA_ARGS__)
78+
#define Z_COND_CASE_1_CAT_N(count_minus_one, ...) \
79+
UTIL_CAT(Z_COND_CASE_1_N_, count_minus_one)(__VA_ARGS__)
8080

81-
#define Z_COND_CASE_1_LEVEL_0(_default) __DEBRACKET _default
82-
#define Z_COND_CASE_1_LEVEL_1(...) Z_COND_SWITCH_REQUIRES_FLAG_VALUE_PAIRS
83-
#define Z_COND_CASE_1_LEVEL_2(flag0, value0, _default) \
81+
#define Z_COND_CASE_1_N_0(_default) __DEBRACKET _default
82+
#define Z_COND_CASE_1_N_2(flag0, value0, _default) \
8483
Z_COND_CODE_1(flag0, (__DEBRACKET value0), (__DEBRACKET _default))
85-
#define Z_COND_CASE_1_LEVEL_3(...) Z_COND_SWITCH_REQUIRES_FLAG_VALUE_PAIRS
86-
#define Z_COND_CASE_1_LEVEL_4(flag0, value0, ...) \
87-
Z_COND_CODE_1(flag0, (__DEBRACKET value0), (Z_COND_CASE_1_LEVEL_2(__VA_ARGS__)))
88-
#define Z_COND_CASE_1_LEVEL_5(...) Z_COND_SWITCH_REQUIRES_FLAG_VALUE_PAIRS
89-
#define Z_COND_CASE_1_LEVEL_6(flag0, value0, ...) \
90-
Z_COND_CODE_1(flag0, (__DEBRACKET value0), (Z_COND_CASE_1_LEVEL_4(__VA_ARGS__)))
91-
#define Z_COND_CASE_1_LEVEL_7(...) Z_COND_SWITCH_REQUIRES_FLAG_VALUE_PAIRS
92-
#define Z_COND_CASE_1_LEVEL_8(flag0, value0, ...) \
93-
Z_COND_CODE_1(flag0, (__DEBRACKET value0), (Z_COND_CASE_1_LEVEL_6(__VA_ARGS__)))
94-
#define Z_COND_CASE_1_LEVEL_9(...) Z_COND_SWITCH_REQUIRES_FLAG_VALUE_PAIRS
95-
#define Z_COND_CASE_1_LEVEL_10(flag0, value0, ...) \
96-
Z_COND_CODE_1(flag0, (__DEBRACKET value0), (Z_COND_CASE_1_LEVEL_8(__VA_ARGS__)))
97-
#define Z_COND_CASE_1_LEVEL_11(...) Z_COND_SWITCH_REQUIRES_FLAG_VALUE_PAIRS
98-
#define Z_COND_CASE_1_LEVEL_12(flag0, value0, ...) \
99-
Z_COND_CODE_1(flag0, (__DEBRACKET value0), (Z_COND_CASE_1_LEVEL_10(__VA_ARGS__)))
100-
#define Z_COND_CASE_1_LEVEL_13(...) Z_COND_SWITCH_REQUIRES_FLAG_VALUE_PAIRS
101-
#define Z_COND_CASE_1_LEVEL_14(flag0, value0, ...) \
102-
Z_COND_CODE_1(flag0, (__DEBRACKET value0), (Z_COND_CASE_1_LEVEL_12(__VA_ARGS__)))
103-
#define Z_COND_CASE_1_LEVEL_15(...) Z_COND_SWITCH_REQUIRES_FLAG_VALUE_PAIRS
104-
#define Z_COND_CASE_1_LEVEL_16(flag0, value0, ...) \
105-
Z_COND_CODE_1(flag0, (__DEBRACKET value0), (Z_COND_CASE_1_LEVEL_14(__VA_ARGS__)))
106-
#define Z_COND_CASE_1_LEVEL_17(...) Z_COND_SWITCH_REQUIRES_FLAG_VALUE_PAIRS
107-
#define Z_COND_CASE_1_LEVEL_18(flag0, value0, ...) \
108-
Z_COND_CODE_1(flag0, (__DEBRACKET value0), (Z_COND_CASE_1_LEVEL_16(__VA_ARGS__)))
109-
#define Z_COND_CASE_1_LEVEL_19(...) Z_COND_SWITCH_REQUIRES_FLAG_VALUE_PAIRS
110-
#define Z_COND_CASE_1_LEVEL_20(flag0, value0, ...) \
111-
Z_COND_CODE_1(flag0, (__DEBRACKET value0), (Z_COND_CASE_1_LEVEL_18(__VA_ARGS__)))
112-
#define Z_COND_CASE_1_LEVEL_21(...) Z_COND_SWITCH_REQUIRES_FLAG_VALUE_PAIRS
113-
#define Z_COND_CASE_1_LEVEL_22(flag0, value0, ...) \
114-
Z_COND_CODE_1(flag0, (__DEBRACKET value0), (Z_COND_CASE_1_LEVEL_20(__VA_ARGS__)))
115-
#define Z_COND_CASE_1_LEVEL_23(...) Z_COND_SWITCH_REQUIRES_FLAG_VALUE_PAIRS
116-
#define Z_COND_CASE_1_LEVEL_24(flag0, value0, ...) \
117-
Z_COND_CODE_1(flag0, (__DEBRACKET value0), (Z_COND_CASE_1_LEVEL_22(__VA_ARGS__)))
118-
#define Z_COND_CASE_1_LEVEL_25(...) Z_COND_SWITCH_REQUIRES_FLAG_VALUE_PAIRS
119-
#define Z_COND_CASE_1_LEVEL_26(flag0, value0, ...) \
120-
Z_COND_CODE_1(flag0, (__DEBRACKET value0), (Z_COND_CASE_1_LEVEL_24(__VA_ARGS__)))
121-
#define Z_COND_CASE_1_LEVEL_27(...) Z_COND_SWITCH_REQUIRES_FLAG_VALUE_PAIRS
122-
#define Z_COND_CASE_1_LEVEL_28(flag0, value0, ...) \
123-
Z_COND_CODE_1(flag0, (__DEBRACKET value0), (Z_COND_CASE_1_LEVEL_26(__VA_ARGS__)))
124-
#define Z_COND_CASE_1_LEVEL_29(...) Z_COND_SWITCH_REQUIRES_FLAG_VALUE_PAIRS
125-
#define Z_COND_CASE_1_LEVEL_30(flag0, value0, ...) \
126-
Z_COND_CODE_1(flag0, (__DEBRACKET value0), (Z_COND_CASE_1_LEVEL_28(__VA_ARGS__)))
127-
#define Z_COND_CASE_1_LEVEL_31(...) Z_COND_SWITCH_REQUIRES_FLAG_VALUE_PAIRS
128-
#define Z_COND_CASE_1_LEVEL_32(flag0, value0, ...) \
129-
Z_COND_CODE_1(flag0, (__DEBRACKET value0), (Z_COND_CASE_1_LEVEL_30(__VA_ARGS__)))
130-
#define Z_COND_CASE_1_LEVEL_33(...) Z_COND_SWITCH_REQUIRES_FLAG_VALUE_PAIRS
131-
132-
#define Z_COND_CASE_1_REQUIRES_FLAG_VALUE_PAIRS Z_COND_CASE_1_REQUIRES_FLAG_VALUE_PAIRS
84+
#define Z_COND_CASE_1_N_4(flag0, value0, ...) \
85+
Z_COND_CODE_1(flag0, (__DEBRACKET value0), (Z_COND_CASE_1_N_2(__VA_ARGS__)))
86+
#define Z_COND_CASE_1_N_6(flag0, value0, ...) \
87+
Z_COND_CODE_1(flag0, (__DEBRACKET value0), (Z_COND_CASE_1_N_4(__VA_ARGS__)))
88+
#define Z_COND_CASE_1_N_8(flag0, value0, ...) \
89+
Z_COND_CODE_1(flag0, (__DEBRACKET value0), (Z_COND_CASE_1_N_6(__VA_ARGS__)))
90+
#define Z_COND_CASE_1_N_10(flag0, value0, ...) \
91+
Z_COND_CODE_1(flag0, (__DEBRACKET value0), (Z_COND_CASE_1_N_8(__VA_ARGS__)))
92+
#define Z_COND_CASE_1_N_12(flag0, value0, ...) \
93+
Z_COND_CODE_1(flag0, (__DEBRACKET value0), (Z_COND_CASE_1_N_10(__VA_ARGS__)))
94+
#define Z_COND_CASE_1_N_14(flag0, value0, ...) \
95+
Z_COND_CODE_1(flag0, (__DEBRACKET value0), (Z_COND_CASE_1_N_12(__VA_ARGS__)))
96+
#define Z_COND_CASE_1_N_16(flag0, value0, ...) \
97+
Z_COND_CODE_1(flag0, (__DEBRACKET value0), (Z_COND_CASE_1_N_14(__VA_ARGS__)))
98+
#define Z_COND_CASE_1_N_18(flag0, value0, ...) \
99+
Z_COND_CODE_1(flag0, (__DEBRACKET value0), (Z_COND_CASE_1_N_16(__VA_ARGS__)))
100+
#define Z_COND_CASE_1_N_20(flag0, value0, ...) \
101+
Z_COND_CODE_1(flag0, (__DEBRACKET value0), (Z_COND_CASE_1_N_18(__VA_ARGS__)))
102+
#define Z_COND_CASE_1_N_22(flag0, value0, ...) \
103+
Z_COND_CODE_1(flag0, (__DEBRACKET value0), (Z_COND_CASE_1_N_20(__VA_ARGS__)))
104+
#define Z_COND_CASE_1_N_24(flag0, value0, ...) \
105+
Z_COND_CODE_1(flag0, (__DEBRACKET value0), (Z_COND_CASE_1_N_22(__VA_ARGS__)))
106+
#define Z_COND_CASE_1_N_26(flag0, value0, ...) \
107+
Z_COND_CODE_1(flag0, (__DEBRACKET value0), (Z_COND_CASE_1_N_24(__VA_ARGS__)))
108+
#define Z_COND_CASE_1_N_28(flag0, value0, ...) \
109+
Z_COND_CODE_1(flag0, (__DEBRACKET value0), (Z_COND_CASE_1_N_26(__VA_ARGS__)))
110+
#define Z_COND_CASE_1_N_30(flag0, value0, ...) \
111+
Z_COND_CODE_1(flag0, (__DEBRACKET value0), (Z_COND_CASE_1_N_28(__VA_ARGS__)))
112+
#define Z_COND_CASE_1_N_32(flag0, value0, ...) \
113+
Z_COND_CODE_1(flag0, (__DEBRACKET value0), (Z_COND_CASE_1_N_30(__VA_ARGS__)))
133114

134115
/* Used by IS_EMPTY() */
135116
/* reference: https://gustedt.wordpress.com/2010/06/08/detect-empty-macro-arguments/ */

tests/unit/util/main.c

Lines changed: 31 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -165,6 +165,37 @@ ZTEST(util, test_COND_CODE_0) {
165165
zassert_true((y3 == 1));
166166
}
167167

168+
ZTEST(util, test_COND_CASE_1) {
169+
/* Intentionally undefined symbols used to verify that only the selected
170+
* branch expands.
171+
*/
172+
int val;
173+
174+
#define CASE_TRUE 1
175+
#define CASE_FALSE 0
176+
177+
val = COND_CASE_1(CASE_TRUE, (42),
178+
CASE_TRUE, (COND_CASE_1_SHOULD_NOT_REACH_SECOND_TRUE_CASE),
179+
(0));
180+
zexpect_equal(val, 42);
181+
182+
val = COND_CASE_1(CASE_FALSE, (COND_CASE_1_SHOULD_NOT_USE_FIRST_CASE),
183+
CASE_TRUE, (7),
184+
(11));
185+
zexpect_equal(val, 7);
186+
187+
val = COND_CASE_1(CASE_FALSE, (COND_CASE_1_SHOULD_NOT_USE_SECOND_CASE),
188+
CASE_FALSE, (COND_CASE_1_SHOULD_NOT_USE_THIRD_CASE),
189+
(5));
190+
zexpect_equal(val, 5);
191+
192+
val = COND_CASE_1((9));
193+
zexpect_equal(val, 9);
194+
195+
#undef CASE_TRUE
196+
#undef CASE_FALSE
197+
}
198+
168199
#undef ZERO
169200
#undef SEVEN
170201
#undef A_BUILD_ERROR

0 commit comments

Comments
 (0)