On Fri, 9 Aug 2024 17:37:08 +0200 Mattias Rönnblom <hof...@lysator.liu.se> wrote:
> On 2024-08-09 17:03, Stephen Hemminger wrote: > > 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. > > GEN_TEST_BIT_ACCESS is being used by six more test cases in later > patches in the series. Would it be possible to make it a function and pass function pointers with Generic?