[PATCH 2/5] eal: add unit tests for bit operations
Stephen Hemminger
stephen at networkplumber.org
Fri Aug 9 17:03:14 CEST 2024
On Fri, 9 Aug 2024 11:04:36 +0200
Mattias Rönnblom <mattias.ronnblom at 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.
More information about the dev
mailing list