cOMS/tests/utils/BitUtilsTest.cpp
Dennis Eichhorn 39fbcf4300
Some checks are pending
CodeQL / Analyze (${{ matrix.language }}) (autobuild, c-cpp) (push) Waiting to run
Microsoft C++ Code Analysis / Analyze (push) Waiting to run
linux bug fixes
2025-03-22 01:10:19 +00:00

198 lines
6.8 KiB
C++
Executable File

#include "../TestFramework.h"
#include "../../utils/BitUtils.h"
static void test_is_bit_set_l2r()
{
ASSERT_FALSE_CONST(IS_BIT_SET_L2R((uint8_t) 0b01000000, 0, sizeof(uint8_t) * 8));
ASSERT_TRUE_CONST(IS_BIT_SET_L2R((uint8_t) 0b10000000, 0, sizeof(uint8_t) * 8));
ASSERT_TRUE_CONST(IS_BIT_SET_L2R((uint8_t) 0b01000000, 1, sizeof(uint8_t) * 8));
ASSERT_FALSE_CONST(IS_BIT_SET_L2R((uint8_t) 0b01000000, 2, sizeof(uint8_t) * 8));
}
static void test_bit_set_l2r()
{
uint8_t num = 0b00000000;
ASSERT_TRUE(IS_BIT_SET_L2R(BIT_SET_L2R(num, 0, sizeof(uint8_t) * 8), 0, sizeof(uint8_t) * 8));
ASSERT_TRUE(IS_BIT_SET_L2R(BIT_SET_L2R(num, 1, sizeof(uint8_t) * 8), 1, sizeof(uint8_t) * 8));
ASSERT_FALSE(IS_BIT_SET_L2R(BIT_SET_L2R(num, 1, sizeof(uint8_t) * 8), 0, sizeof(uint8_t) * 8));
}
static void test_bit_unset_l2r() {
uint8_t num = 0b11111111;
ASSERT_FALSE(IS_BIT_SET_L2R(BIT_UNSET_L2R(num, 0, sizeof(uint8_t) * 8), 0, sizeof(uint8_t) * 8));
ASSERT_FALSE(IS_BIT_SET_L2R(BIT_UNSET_L2R(num, 1, sizeof(uint8_t) * 8), 1, sizeof(uint8_t) * 8));
ASSERT_TRUE(IS_BIT_SET_L2R(BIT_UNSET_L2R(num, 1, sizeof(uint8_t) * 8), 0, sizeof(uint8_t) * 8));
}
static void test_bit_flip_l2r() {
uint8_t num = 0b10101010;
ASSERT_FALSE(IS_BIT_SET_L2R(BIT_FLIP_L2R(num, 0, sizeof(uint8_t) * 8), 0, sizeof(uint8_t) * 8));
ASSERT_TRUE(IS_BIT_SET_L2R(BIT_FLIP_L2R(num, 1, sizeof(uint8_t) * 8), 1, sizeof(uint8_t) * 8));
}
static void test_bit_set_to_l2r() {
uint8_t num = 0b00000000;
ASSERT_TRUE(IS_BIT_SET_L2R(BIT_SET_TO_L2R(num, 0, 1, sizeof(uint8_t) * 8), 0, sizeof(uint8_t) * 8));
ASSERT_FALSE(IS_BIT_SET_L2R(BIT_SET_TO_L2R(num, 1, 0, sizeof(uint8_t) * 8), 1, sizeof(uint8_t) * 8));
}
static void test_bits_get_8_l2r() {
uint8_t num = 0b11001100;
ASSERT_TRUE(BITS_GET_8_L2R(num, 0, 2) == 0b11);
ASSERT_TRUE(BITS_GET_8_L2R(num, 2, 2) == 0b00);
}
static void test_bits_get_16_l2r() {
uint16_t num = 0b1100110011001100;
ASSERT_TRUE(BITS_GET_16_L2R(num, 0, 4) == 0b1100);
ASSERT_TRUE(BITS_GET_16_L2R(num, 4, 4) == 0b1100);
}
static void test_bits_get_32_l2r() {
uint32_t num = 0b11001100110011001100110011001100;
ASSERT_TRUE(BITS_GET_32_L2R(num, 0, 8) == 0b11001100);
ASSERT_TRUE(BITS_GET_32_L2R(num, 8, 8) == 0b11001100);
}
static void test_bits_get_64_l2r() {
uint64_t num = 0b1100110011001100110011001100110011001100110011001100110011001100;
ASSERT_TRUE(BITS_GET_64_L2R(num, 0, 16) == 0b1100110011001100);
ASSERT_TRUE(BITS_GET_64_L2R(num, 16, 16) == 0b1100110011001100);
}
static void test_bytes_merge_2_l2r() {
uint8_t arr[] = {0x12, 0x34};
ASSERT_TRUE(BYTES_MERGE_2_L2R(arr) == 0x1234);
}
static void test_bytes_merge_4_l2r() {
uint8_t arr[] = {0x12, 0x34, 0x56, 0x78};
ASSERT_TRUE(BYTES_MERGE_4_L2R(arr) == 0x12345678);
}
static void test_bytes_merge_8_l2r() {
uint8_t arr[] = {0x12, 0x34, 0x56, 0x78, 0x9A, 0xBC, 0xDE, 0xF0};
ASSERT_TRUE(BYTES_MERGE_8_L2R(arr) == 0x123456789ABCDEF0);
}
static void test_is_bit_set_r2l() {
ASSERT_FALSE_CONST(IS_BIT_SET_R2L((uint8_t) 0b00000010, 0));
ASSERT_TRUE_CONST(IS_BIT_SET_R2L((uint8_t) 0b00000001, 0));
ASSERT_TRUE_CONST(IS_BIT_SET_R2L((uint8_t) 0b00000010, 1));
ASSERT_FALSE_CONST(IS_BIT_SET_R2L((uint8_t) 0b00000010, 2));
}
static void test_is_bit_set_64_r2l() {
ASSERT_FALSE_CONST(IS_BIT_SET_64_R2L((uint64_t) 0b00000010, 0));
ASSERT_TRUE_CONST(IS_BIT_SET_64_R2L((uint64_t) 0b00000001, 0));
ASSERT_TRUE_CONST(IS_BIT_SET_64_R2L((uint64_t) 0b00000010, 1));
ASSERT_FALSE_CONST(IS_BIT_SET_64_R2L((uint64_t) 0b00000010, 2));
}
static void test_bit_set_r2l() {
uint8_t num = 0b00000000;
ASSERT_TRUE(IS_BIT_SET_R2L(BIT_SET_R2L(num, 0), 0));
ASSERT_TRUE(IS_BIT_SET_R2L(BIT_SET_R2L(num, 1), 1));
ASSERT_FALSE(IS_BIT_SET_R2L(BIT_SET_R2L(num, 1), 0));
}
static void test_bit_unset_r2l() {
uint8_t num = 0b11111111;
ASSERT_FALSE(IS_BIT_SET_R2L(BIT_UNSET_R2L(num, 0), 0));
ASSERT_FALSE(IS_BIT_SET_R2L(BIT_UNSET_R2L(num, 1), 1));
ASSERT_TRUE(IS_BIT_SET_R2L(BIT_UNSET_R2L(num, 1), 0));
}
static void test_bit_flip_r2l() {
uint8_t num = 0b10101010;
ASSERT_TRUE(IS_BIT_SET_R2L(BIT_FLIP_R2L(num, 0), 0));
ASSERT_FALSE(IS_BIT_SET_R2L(BIT_FLIP_R2L(num, 1), 1));
}
static void test_bit_set_to_r2l() {
uint8_t num = 0b00000000;
ASSERT_TRUE(IS_BIT_SET_R2L(BIT_SET_TO_R2L(num, 0, 1), 0));
ASSERT_FALSE(IS_BIT_SET_R2L(BIT_SET_TO_R2L(num, 1, 0), 1));
}
static void test_bits_get_8_r2l() {
uint8_t num = 0b11001100;
ASSERT_TRUE(BITS_GET_8_R2L(num, 0, 2) == 0b00);
ASSERT_TRUE(BITS_GET_8_R2L(num, 2, 2) == 0b11);
}
static void test_bits_get_16_r2l() {
uint16_t num = 0b1100110011001100;
ASSERT_TRUE(BITS_GET_16_R2L(num, 0, 4) == 0b1100);
ASSERT_TRUE(BITS_GET_16_R2L(num, 4, 4) == 0b1100);
}
static void test_bits_get_32_r2l() {
uint32_t num = 0b11001100110011001100110011001100;
ASSERT_TRUE(BITS_GET_32_R2L(num, 0, 8) == 0b11001100);
ASSERT_TRUE(BITS_GET_32_R2L(num, 8, 8) == 0b11001100);
}
static void test_bits_get_64_r2l() {
uint64_t num = 0b1100110011001100110011001100110011001100110011001100110011001100;
ASSERT_TRUE(BITS_GET_64_R2L(num, 0, 16) == 0b1100110011001100);
ASSERT_TRUE(BITS_GET_64_R2L(num, 16, 16) == 0b1100110011001100);
ASSERT_FALSE(BITS_GET_64_R2L(num, 15, 16) == 0b1100110011001100);
}
static void test_bytes_merge_2_r2l() {
uint8_t arr[] = {0x12, 0x34};
ASSERT_TRUE(BYTES_MERGE_2_R2L(arr) == 0x3412);
}
static void test_bytes_merge_4_r2l() {
uint8_t arr[] = {0x12, 0x34, 0x56, 0x78};
ASSERT_TRUE(BYTES_MERGE_4_R2L(arr) == 0x78563412);
}
static void test_bytes_merge_8_r2l() {
uint8_t arr[] = {0x12, 0x34, 0x56, 0x78, 0x9A, 0xBC, 0xDE, 0xF0};
ASSERT_TRUE(BYTES_MERGE_8_R2L(arr) == 0xF0DEBC9A78563412);
}
#ifdef UBER_TEST
#ifdef main
#undef main
#endif
#define main UtilsBitUtilsTest
#endif
int main() {
TEST_INIT(75);
TEST_RUN(test_is_bit_set_l2r);
TEST_RUN(test_bit_set_l2r);
TEST_RUN(test_bit_unset_l2r);
TEST_RUN(test_bit_flip_l2r);
TEST_RUN(test_bit_set_to_l2r);
TEST_RUN(test_bits_get_8_l2r);
TEST_RUN(test_bits_get_16_l2r);
TEST_RUN(test_bits_get_32_l2r);
TEST_RUN(test_bits_get_64_l2r);
TEST_RUN(test_bytes_merge_2_l2r);
TEST_RUN(test_bytes_merge_4_l2r);
TEST_RUN(test_bytes_merge_8_l2r);
TEST_RUN(test_is_bit_set_r2l);
TEST_RUN(test_is_bit_set_64_r2l);
TEST_RUN(test_bit_set_r2l);
TEST_RUN(test_bit_unset_r2l);
TEST_RUN(test_bit_flip_r2l);
TEST_RUN(test_bit_set_to_r2l);
TEST_RUN(test_bits_get_8_r2l);
TEST_RUN(test_bits_get_16_r2l);
TEST_RUN(test_bits_get_32_r2l);
TEST_RUN(test_bits_get_64_r2l);
TEST_RUN(test_bytes_merge_2_r2l);
TEST_RUN(test_bytes_merge_4_r2l);
TEST_RUN(test_bytes_merge_8_r2l);
TEST_FINALIZE();
return 0;
}