Skip to content

Commit fa21774

Browse files
committed
tests: unit: util: Add test for fast versions of loop macros
Added tests for FAST_FOR_EACH_x, FAST_GET_ARG_N and FAST_GET_ARGS_LESS_N. Signed-off-by: Krzysztof Chruscinski <[email protected]>
1 parent 4784db5 commit fa21774

File tree

1 file changed

+58
-0
lines changed

1 file changed

+58
-0
lines changed

tests/unit/util/test.inc

Lines changed: 58 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -254,6 +254,13 @@ static void test_FOR_EACH(void)
254254
zassert_equal(array[0], 1, "Unexpected value %d", array[0]);
255255
zassert_equal(array[1], 2, "Unexpected value %d", array[1]);
256256
zassert_equal(array[2], 3, "Unexpected value %d", array[2]);
257+
258+
buf = array;
259+
FAST_FOR_EACH(FOR_EACH_MACRO_TEST, (;), 4, 5, 6);
260+
261+
zassert_equal(array[0], 4, "Unexpected value %d", array[0]);
262+
zassert_equal(array[1], 5, "Unexpected value %d", array[1]);
263+
zassert_equal(array[2], 6, "Unexpected value %d", array[2]);
257264
}
258265

259266
static void test_FOR_EACH_NONEMPTY_TERM(void)
@@ -301,18 +308,28 @@ static void test_FOR_EACH_FIXED_ARG(void)
301308
FOR_EACH_FIXED_ARG(fsum, (;), &sum, 1, 2, 3);
302309

303310
zassert_equal(sum, 6, "Unexpected value %d", sum);
311+
312+
sum = 0;
313+
FAST_FOR_EACH_FIXED_ARG(fsum, (;), &sum, 10, 20, 30);
314+
315+
zassert_equal(sum, 60, "Unexpected value %d", sum);
304316
}
305317

306318
static void test_FOR_EACH_IDX(void)
307319
{
308320
#define FOR_EACH_IDX_MACRO_TEST(n, arg) uint8_t a##n = arg
321+
#define FAST_FOR_EACH_IDX_MACRO_TEST(n, arg) uint8_t b##n = arg
309322

310323
FOR_EACH_IDX(FOR_EACH_IDX_MACRO_TEST, (;), 1, 2, 3);
324+
FAST_FOR_EACH_IDX(FAST_FOR_EACH_IDX_MACRO_TEST, (;), 1, 2, 3);
311325

312326
zassert_equal(a0, 1, "Unexpected value %d", a0);
313327
zassert_equal(a1, 2, "Unexpected value %d", a1);
314328
zassert_equal(a2, 3, "Unexpected value %d", a2);
315329

330+
zassert_equal(b0, 3, "Unexpected value %d", a0);
331+
zassert_equal(b1, 2, "Unexpected value %d", a1);
332+
zassert_equal(b2, 1, "Unexpected value %d", a2);
316333
#define FOR_EACH_IDX_MACRO_TEST2(n, arg) array[n] = arg
317334
uint8_t array[32] = {0};
318335

@@ -324,13 +341,29 @@ static void test_FOR_EACH_IDX(void)
324341
}
325342
zassert_equal(array[15], 0, "Unexpected value: %d", array[15]);
326343

344+
FAST_FOR_EACH_IDX(FOR_EACH_IDX_MACRO_TEST2, (;),
345+
14, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0);
346+
for (int i = 0; i < 15; i++) {
347+
zassert_equal(array[i], i,
348+
"Unexpected value: %d", array[i]);
349+
}
350+
zassert_equal(array[15], 0, "Unexpected value: %d", array[15]);
351+
327352
#define FOR_EACH_IDX_MACRO_TEST3(n, arg) &a##n
328353

329354
uint8_t *a[] = {
330355
FOR_EACH_IDX(FOR_EACH_IDX_MACRO_TEST3, (,), 1, 2, 3)
331356
};
332357

333358
zassert_equal(ARRAY_SIZE(a), 3, "Unexpected value:%d", ARRAY_SIZE(a));
359+
360+
#define FAST_FOR_EACH_IDX_MACRO_TEST3(n, arg) &b##n
361+
362+
uint8_t *b[] = {
363+
FAST_FOR_EACH_IDX(FAST_FOR_EACH_IDX_MACRO_TEST3, (,), 1, 2, 3)
364+
};
365+
366+
zassert_equal(ARRAY_SIZE(b), 3, "Unexpected value:%d", ARRAY_SIZE(b));
334367
}
335368

336369
static void test_FOR_EACH_IDX_FIXED_ARG(void)
@@ -344,6 +377,12 @@ static void test_FOR_EACH_IDX_FIXED_ARG(void)
344377
zassert_equal(a0, 1, "Unexpected value %d", a0);
345378
zassert_equal(a1, 2, "Unexpected value %d", a1);
346379
zassert_equal(a2, 3, "Unexpected value %d", a2);
380+
381+
FAST_FOR_EACH_IDX_FIXED_ARG(FOO, (;), b, 1, 2, 3);
382+
383+
zassert_equal(b0, 3, "Unexpected value %d", a0);
384+
zassert_equal(b1, 2, "Unexpected value %d", a1);
385+
zassert_equal(b2, 1, "Unexpected value %d", a2);
347386
}
348387

349388
static void test_IS_EMPTY(void)
@@ -385,6 +424,12 @@ static void test_nested_FOR_EACH(void)
385424
zassert_equal(a0, 0, NULL);
386425
zassert_equal(a1, 1, NULL);
387426
zassert_equal(a2, 2, NULL);
427+
428+
FAST_FOR_EACH(FOO_2, (;), FAST_FOR_EACH(FOO_1, (,), 3, 4, 5));
429+
430+
zassert_equal(a3, 3, NULL);
431+
zassert_equal(a4, 4, NULL);
432+
zassert_equal(a5, 5, NULL);
388433
}
389434

390435
static void test_GET_ARG_N(void)
@@ -396,22 +441,35 @@ static void test_GET_ARG_N(void)
396441
zassert_equal(a, 10, NULL);
397442
zassert_equal(b, 100, NULL);
398443
zassert_equal(c, 1000, NULL);
444+
445+
zassert_equal(FAST_GET_ARG_N(1, 10, 100, 1000), 10, NULL);
446+
zassert_equal(FAST_GET_ARG_N(2, 10, 100, 1000), 100, NULL);
447+
zassert_equal(FAST_GET_ARG_N(3, 10, 100, 1000), 1000, NULL);
399448
}
400449

401450
static void test_GET_ARGS_LESS_N(void)
402451
{
403452
uint8_t a[] = { GET_ARGS_LESS_N(0, 1, 2, 3) };
404453
uint8_t b[] = { GET_ARGS_LESS_N(1, 1, 2, 3) };
405454
uint8_t c[] = { GET_ARGS_LESS_N(2, 1, 2, 3) };
455+
uint8_t a2[] = { FAST_GET_ARGS_LESS_N(0, 1, 2, 3) };
456+
uint8_t b2[] = { FAST_GET_ARGS_LESS_N(1, 1, 2, 3) };
457+
uint8_t c2[] = { FAST_GET_ARGS_LESS_N(2, 1, 2, 3) };
406458

407459
zassert_equal(sizeof(a), 3, NULL);
460+
zassert_equal(sizeof(a2), 3, NULL);
408461

409462
zassert_equal(sizeof(b), 2, NULL);
463+
zassert_equal(sizeof(b2), 2, NULL);
410464
zassert_equal(b[0], 2, NULL);
411465
zassert_equal(b[1], 3, NULL);
466+
zassert_equal(b2[0], 2, NULL);
467+
zassert_equal(b2[1], 3, NULL);
412468

413469
zassert_equal(sizeof(c), 1, NULL);
470+
zassert_equal(sizeof(c2), 1, NULL);
414471
zassert_equal(c[0], 3, NULL);
472+
zassert_equal(c2[0], 3, NULL);
415473
}
416474

417475
static void test_mixing_GET_ARG_and_FOR_EACH(void)

0 commit comments

Comments
 (0)