From 521cf00964b42dde5cb12d1282475fcfdb0cb0dd Mon Sep 17 00:00:00 2001 From: Thomas Watson Date: Sun, 7 Jul 2024 14:25:24 -0500 Subject: [PATCH] AP_Common: templatify bitmask tests Enables testing of different widths and edge cases. --- libraries/AP_Common/tests/test_bitmask.cpp | 68 ++++++++++++++-------- 1 file changed, 43 insertions(+), 25 deletions(-) diff --git a/libraries/AP_Common/tests/test_bitmask.cpp b/libraries/AP_Common/tests/test_bitmask.cpp index 525ab9dd66..d4b08b7ca7 100644 --- a/libraries/AP_Common/tests/test_bitmask.cpp +++ b/libraries/AP_Common/tests/test_bitmask.cpp @@ -5,9 +5,10 @@ const AP_HAL::HAL& hal = AP_HAL::get_HAL(); -TEST(Bitmask, Tests) +template +void bitmask_tests(void) { - Bitmask<49> x; + Bitmask x; EXPECT_EQ(0, x.count()); EXPECT_EQ(-1, x.first_set()); x.set(5); @@ -18,16 +19,16 @@ TEST(Bitmask, Tests) EXPECT_EQ(-1, x.first_set()); EXPECT_EQ(-1, x.first_set()); - x.set(42); - EXPECT_EQ(42, x.first_set()); - x.clear(42); + x.set(N-7); + EXPECT_EQ(N-7, x.first_set()); + x.clear(N-7); EXPECT_EQ(-1, x.first_set()); EXPECT_EQ(-1, x.first_set()); x.set(0); x.set(5); x.set(6); - x.set(48); + x.set(N-1); EXPECT_EQ(4, x.count()); EXPECT_EQ(0, x.first_set()); EXPECT_EQ(0, x.first_set()); @@ -38,65 +39,82 @@ TEST(Bitmask, Tests) EXPECT_EQ(6, x.first_set()); EXPECT_EQ(6, x.first_set()); x.clear(6); - EXPECT_EQ(48, x.first_set()); - EXPECT_EQ(48, x.first_set()); - x.clear(48); + EXPECT_EQ(N-1, x.first_set()); + EXPECT_EQ(N-1, x.first_set()); + x.clear(N-1); EXPECT_EQ(-1, x.first_set()); - Bitmask<49> x2; + Bitmask x2; x2 = x; #if CONFIG_HAL_BOARD == HAL_BOARD_LINUX - x.set(50); + x.set(N+1); #elif CONFIG_HAL_BOARD == HAL_BOARD_SITL - EXPECT_EXIT(x.set(50), testing::KilledBySignal(SIGABRT), "AP_InternalError::error_t::bitmask_range"); + EXPECT_EXIT(x.set(N+1), testing::KilledBySignal(SIGABRT), "AP_InternalError::error_t::bitmask_range"); #endif - for (uint8_t i=0; i<49; i++) { + for (uint8_t i=0; i x; + bitmask_tests<49>(); +} + +template +void bitmask_setall(void) +{ + Bitmask x; EXPECT_EQ(-1, x.first_set()); - EXPECT_EQ(false, x.get(45)); + EXPECT_EQ(false, x.get(N-4)); x.setall(); EXPECT_EQ(0, x.first_set()); x.clear(0); EXPECT_EQ(1, x.first_set()); x.clear(1); EXPECT_EQ(2, x.first_set()); - EXPECT_EQ(true, x.get(45)); + EXPECT_EQ(true, x.get(N-4)); EXPECT_EQ(false, x.empty()); x.clearall(); EXPECT_EQ(-1, x.first_set()); - EXPECT_EQ(false, x.get(45)); + EXPECT_EQ(false, x.get(N-4)); EXPECT_EQ(true, x.empty()); } -TEST(Bitmask, Assignment) +TEST(Bitmask, SetAll) { - Bitmask<49> x; + bitmask_setall<49>(); +} + +template +void bitmask_assignment(void) +{ + Bitmask x; x.set(0); x.set(5); x.set(6); - x.set(48); + x.set(N-1); - Bitmask<49> y; + Bitmask y; y = x; x.clear(0); EXPECT_EQ(true, y.get(0)); EXPECT_EQ(true, y.get(5)); EXPECT_EQ(true, y.get(6)); - EXPECT_EQ(true, y.get(48)); + EXPECT_EQ(true, y.get(N-1)); +} + +TEST(Bitmask, Assignment) +{ + bitmask_assignment<49>(); } AP_GTEST_PANIC()