1
0
Fork 0
mirror of https://github.com/iNavFlight/inav.git synced 2025-07-25 01:05:21 +03:00
inav/src/test/unit/bitarray_unittest.cc
Alberto García Hierro 7f1a7d5a0b
[BITARRAY] Bounds check in the first iteration in bitArrayFindFirstSet() (#5707)
We already had bounds checking for the 2nd and subsequent 32 bit
blocks, but since the first block was handled separately (due to the
masking needed if it doesn't fall on a 32 bit boundary) it skipped
the check. With this change, any start bit >= the number of bits
in the array will return -1.
2020-05-16 17:38:31 +02:00

96 lines
2.5 KiB
C++

#include <cstdint>
#include <cstring>
extern "C" {
#include "common/bitarray.h"
}
#include "gtest/gtest.h"
TEST(BitArrayTest, TestGetSet)
{
BITARRAY_DECLARE(p, 32);
memset(p, 0, sizeof(p));
bitArraySet(p, 14);
EXPECT_EQ(bitArrayGet(p, 14), true);
EXPECT_EQ(bitArrayGet(p, 13), false);
EXPECT_EQ(bitArrayGet(p, 15), false);
EXPECT_EQ(bitArrayGet(p, 0), false);
bitArraySet(p, 0);
EXPECT_EQ(bitArrayGet(p, 0), true);
}
TEST(BitArrayTest, TestClr)
{
BITARRAY_DECLARE(p, 32);
memset(p, 0, sizeof(p));
bitArraySet(p, 31);
EXPECT_EQ(bitArrayGet(p, 31), true);
EXPECT_EQ(bitArrayGet(p, 30), false);
EXPECT_EQ(bitArrayGet(p, 0), false);
bitArrayClr(p, 31);
EXPECT_EQ(bitArrayGet(p, 31), false);
}
TEST(BitArrayTest, TestFind)
{
BITARRAY_DECLARE(p, 32*4);
memset(p, 0, sizeof(p));
EXPECT_EQ(bitArrayFindFirstSet(p, 0, sizeof(p)), -1);
bitArraySet(p, 17);
EXPECT_EQ(bitArrayFindFirstSet(p, 0, sizeof(p)), 17);
EXPECT_EQ(bitArrayFindFirstSet(p, 16, sizeof(p)), 17);
EXPECT_EQ(bitArrayFindFirstSet(p, 17, sizeof(p)), 17);
EXPECT_EQ(bitArrayFindFirstSet(p, 18, sizeof(p)), -1);
bitArraySet(p, 44);
EXPECT_EQ(bitArrayFindFirstSet(p, 0, sizeof(p)), 17);
EXPECT_EQ(bitArrayFindFirstSet(p, 16, sizeof(p)), 17);
EXPECT_EQ(bitArrayFindFirstSet(p, 17, sizeof(p)), 17);
EXPECT_EQ(bitArrayFindFirstSet(p, 18, sizeof(p)), 44);
bitArrayClr(p, 17);
EXPECT_EQ(bitArrayFindFirstSet(p, 0, sizeof(p)), 44);
EXPECT_EQ(bitArrayFindFirstSet(p, 16, sizeof(p)), 44);
EXPECT_EQ(bitArrayFindFirstSet(p, 17, sizeof(p)), 44);
EXPECT_EQ(bitArrayFindFirstSet(p, 18, sizeof(p)), 44);
EXPECT_EQ(bitArrayFindFirstSet(p, 43, sizeof(p)), 44);
EXPECT_EQ(bitArrayFindFirstSet(p, 44, sizeof(p)), 44);
EXPECT_EQ(bitArrayFindFirstSet(p, 45, sizeof(p)), -1);
bitArrayClr(p, 44);
EXPECT_EQ(bitArrayFindFirstSet(p, 0, sizeof(p)), -1);
EXPECT_EQ(bitArrayFindFirstSet(p, 64, sizeof(p)), -1);
}
TEST(BitArrayTest, TestSetClrAll)
{
const int bits = 32 * 4;
BITARRAY_DECLARE(p, bits);
BITARRAY_CLR_ALL(p);
EXPECT_EQ(-1, BITARRAY_FIND_FIRST_SET(p, 0));
BITARRAY_SET_ALL(p);
for (int ii = 0; ii < bits; ii++) {
EXPECT_EQ(ii, BITARRAY_FIND_FIRST_SET(p, ii));
}
}
TEST(BitArrayTest, TestOutOfBounds)
{
const int bits = 32 * 4;
BITARRAY_DECLARE(p, bits);
BITARRAY_CLR_ALL(p);
EXPECT_EQ(-1, BITARRAY_FIND_FIRST_SET(p, 0));
EXPECT_EQ(-1, BITARRAY_FIND_FIRST_SET(p, bits));
EXPECT_EQ(-1, BITARRAY_FIND_FIRST_SET(p, bits + 1));
}