mirror of
https://github.com/Karaka-Management/cOMS.git
synced 2026-01-10 19:08:39 +00:00
150 lines
4.1 KiB
C++
Executable File
150 lines
4.1 KiB
C++
Executable File
#include "../TestFramework.h"
|
|
#include "../../utils/Utils.h"
|
|
|
|
static void test_is_equal() {
|
|
uint8_t region1[] = {0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08};
|
|
uint8_t region2[] = {0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08};
|
|
uint8_t region3[] = {0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x09};
|
|
|
|
// Test equal regions
|
|
ASSERT_TRUE(is_equal(region1, region2, sizeof(region1)));
|
|
|
|
// Test unequal regions
|
|
ASSERT_FALSE(is_equal(region1, region3, sizeof(region1)));
|
|
|
|
// Test partial equality
|
|
ASSERT_TRUE(is_equal(region1, region2, 4));
|
|
|
|
// Test unequal partial regions
|
|
ASSERT_FALSE(is_equal(region1 + 4, region3 + 4, 4));
|
|
|
|
// Test smaller than 4 bytes
|
|
ASSERT_TRUE(is_equal(region1, region2, 2));
|
|
|
|
// Test empty regions
|
|
ASSERT_TRUE(is_equal(region1, region2, 0));
|
|
}
|
|
|
|
static void test_is_empty() {
|
|
uint8_t region1[] = {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00};
|
|
uint8_t region2[] = {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01};
|
|
uint8_t region3[] = {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00};
|
|
uint8_t region4[] = {0x01, 0x02, 0x03, 0x04, 0x00, 0x00, 0x00, 0x00};
|
|
|
|
// Test empty region
|
|
ASSERT_TRUE(is_empty(region1, sizeof(region1)));
|
|
|
|
// Test non-empty region
|
|
ASSERT_FALSE(is_empty(region2, sizeof(region2)));
|
|
|
|
// Test partial empty region
|
|
ASSERT_TRUE(is_empty(region1, 4));
|
|
|
|
// Test partial non-empty region
|
|
ASSERT_FALSE(is_empty(region2 + 4, 4));
|
|
|
|
// Test smaller than 4 bytes
|
|
ASSERT_TRUE(is_empty(region3, sizeof(region3)));
|
|
|
|
// Test non-empty smaller than 4 bytes
|
|
ASSERT_FALSE(is_empty(region4, sizeof(region4)));
|
|
|
|
// Test empty region with size 0
|
|
ASSERT_TRUE(is_empty(region1, 0));
|
|
}
|
|
|
|
#if PERFORMANCE_TEST
|
|
static void _is_equal(volatile void* val) {
|
|
volatile bool* res = (volatile bool *) val;
|
|
|
|
uint8_t region1[64];
|
|
uint8_t region2[64];
|
|
memset(region1, 0xAA, sizeof(region1));
|
|
memset(region2, 0xAA, sizeof(region2));
|
|
|
|
*res |= is_equal(region1, region2, sizeof(region1));
|
|
}
|
|
|
|
static void _memcmp(volatile void* val) {
|
|
volatile bool* res = (volatile bool *) val;
|
|
|
|
uint8_t region1[64];
|
|
uint8_t region2[64];
|
|
memset(region1, 0xAA, sizeof(region1));
|
|
memset(region2, 0xAA, sizeof(region2));
|
|
|
|
*res |= (bool) (memcmp(region1, region2, sizeof(region1)) == 0);
|
|
}
|
|
|
|
static void test_is_equal_performance() {
|
|
COMPARE_FUNCTION_TEST_TIME(_is_equal, _memcmp, 10.0);
|
|
COMPARE_FUNCTION_TEST_CYCLE(_is_equal, _memcmp, 10.0);
|
|
}
|
|
|
|
static void _is_empty(volatile void* val) {
|
|
volatile bool* res = (volatile bool *) val;
|
|
|
|
alignas(64) uint8_t region1[64];
|
|
memset(region1, 0xAA, sizeof(region1));
|
|
|
|
*res |= is_empty(region1, sizeof(region1));
|
|
}
|
|
|
|
static void _memcmp_empty(volatile void* val) {
|
|
volatile bool* res = (volatile bool *) val;
|
|
|
|
alignas(64) uint8_t region1[64];
|
|
memset(region1, 0xAA, sizeof(region1));
|
|
|
|
*res |= *region1 == 0 && memcmp(region1, region1 + 1, sizeof(region1) - 1) == 0;
|
|
}
|
|
|
|
static void _is_empty2(volatile void* val) {
|
|
volatile bool* res = (volatile bool *) val;
|
|
|
|
alignas(64) uint8_t region1[64];
|
|
memset(region1, 0, sizeof(region1));
|
|
|
|
*res |= is_empty(region1, sizeof(region1));
|
|
}
|
|
|
|
static void _memcmp_empty2(volatile void* val) {
|
|
volatile bool* res = (volatile bool *) val;
|
|
|
|
alignas(64) uint8_t region1[64];
|
|
memset(region1, 0, sizeof(region1));
|
|
|
|
*res |= *region1 == 0 && memcmp(region1, region1 + 1, sizeof(region1) - 1) == 0;
|
|
}
|
|
|
|
static void test_is_empty_performance() {
|
|
COMPARE_FUNCTION_TEST_TIME(_is_empty, _memcmp_empty, 10.0);
|
|
COMPARE_FUNCTION_TEST_CYCLE(_is_empty, _memcmp_empty, 10.0);
|
|
|
|
COMPARE_FUNCTION_TEST_TIME(_is_empty2, _memcmp_empty2, 10.0);
|
|
COMPARE_FUNCTION_TEST_CYCLE(_is_empty2, _memcmp_empty2, 10.0);
|
|
}
|
|
#endif
|
|
|
|
#ifdef UBER_TEST
|
|
#ifdef main
|
|
#undef main
|
|
#endif
|
|
#define main UtilsUtilsTest
|
|
#endif
|
|
|
|
int main() {
|
|
TEST_INIT(10);
|
|
|
|
TEST_RUN(test_is_equal);
|
|
TEST_RUN(test_is_empty);
|
|
|
|
#if PERFORMANCE_TEST
|
|
TEST_RUN(test_is_equal_performance);
|
|
TEST_RUN(test_is_empty_performance);
|
|
#endif
|
|
|
|
TEST_FINALIZE();
|
|
|
|
return 0;
|
|
} |