On Fri, 9 Aug 2024 11:04:36 +0200
Mattias Rönnblom <mattias.ronnb...@ericsson.com> wrote:

> -uint32_t val32;
> -uint64_t val64;
> +#define GEN_TEST_BIT_ACCESS(test_name, set_fun, clear_fun, assign_fun,       
> \
> +                         flip_fun, test_fun, size)                   \
> +     static int                                                      \
> +     test_name(void)                                                 \
> +     {                                                               \
> +             uint ## size ## _t reference = (uint ## size ## _t)rte_rand(); \
> +             unsigned int bit_nr;                                    \
> +             uint ## size ## _t word = (uint ## size ## _t)rte_rand(); \
> +                                                                     \
> +             for (bit_nr = 0; bit_nr < size; bit_nr++) {             \
> +                     bool reference_bit = (reference >> bit_nr) & 1; \
> +                     bool assign = rte_rand() & 1;                   \
> +                     if (assign)                                     \
> +                             assign_fun(&word, bit_nr, reference_bit); \
> +                     else {                                          \
> +                             if (reference_bit)                      \
> +                                     set_fun(&word, bit_nr);         \
> +                             else                                    \
> +                                     clear_fun(&word, bit_nr);       \
> +                                                                     \
> +                     }                                               \
> +                     TEST_ASSERT(test_fun(&word, bit_nr) == reference_bit, \
> +                                 "Bit %d had unexpected value", bit_nr); \
> +                     flip_fun(&word, bit_nr);                        \
> +                     TEST_ASSERT(test_fun(&word, bit_nr) != reference_bit, \
> +                                 "Bit %d had unflipped value", bit_nr); \
> +                     flip_fun(&word, bit_nr);                        \
> +                                                                     \
> +                     const uint ## size ## _t *const_ptr = &word;    \
> +                     TEST_ASSERT(test_fun(const_ptr, bit_nr) ==      \
> +                                 reference_bit,                      \
> +                                 "Bit %d had unexpected value", bit_nr); \
> +             }                                                       \
> +                                                                     \
> +             for (bit_nr = 0; bit_nr < size; bit_nr++) {             \
> +                     bool reference_bit = (reference >> bit_nr) & 1; \
> +                     TEST_ASSERT(test_fun(&word, bit_nr) == reference_bit, \
> +                                 "Bit %d had unexpected value", bit_nr); \
> +             }                                                       \
> +                                                                     \
> +             TEST_ASSERT(reference == word, "Word had unexpected value"); \
> +                                                                     \
> +             return TEST_SUCCESS;                                    \
> +     }
> +
> +GEN_TEST_BIT_ACCESS(test_bit_access32, rte_bit_set, rte_bit_clear,
> +                 rte_bit_assign, rte_bit_flip, rte_bit_test, 32)
> +
> +GEN_TEST_BIT_ACCESS(test_bit_access64, rte_bit_set, rte_bit_clear,
> +                 rte_bit_assign, rte_bit_flip, rte_bit_test, 64)

Having large macro like this for two cases adds complexity without
additional clarity. Just duplicate the code please.

Reply via email to