openh264/test/encoder/EncUT_MemoryZero.cpp

97 lines
3.4 KiB
C++

#include <gtest/gtest.h>
#include <math.h>
#include <stdlib.h>
#include <time.h>
#include "cpu_core.h"
#include "cpu.h"
#include "macros.h"
#include "wels_func_ptr_def.h"
#include "../../codec/encoder/core/src/encoder.cpp"
using namespace WelsEnc;
#define MEMORYZEROTEST_NUM 1000
TEST (SetMemZeroFunTest, WelsSetMemZero) {
int32_t iLen = 64;
int32_t iCpuCores = 0;
SWelsFuncPtrList sFuncPtrList;
uint32_t uiCpuFlag = WelsCPUFeatureDetect (&iCpuCores);
/* Functionality utilization of CPU instructions dependency */
sFuncPtrList.pfSetMemZeroSize8 = WelsSetMemZero_c; // confirmed_safe_unsafe_usage
sFuncPtrList.pfSetMemZeroSize64Aligned16 = WelsSetMemZero_c; // confirmed_safe_unsafe_usage
sFuncPtrList.pfSetMemZeroSize64 = WelsSetMemZero_c; // confirmed_safe_unsafe_usage
#if defined(X86_ASM)
if (uiCpuFlag & WELS_CPU_MMXEXT) {
sFuncPtrList.pfSetMemZeroSize8 = WelsSetMemZeroSize8_mmx; // confirmed_safe_unsafe_usage
sFuncPtrList.pfSetMemZeroSize64Aligned16 = WelsSetMemZeroSize64_mmx; // confirmed_safe_unsafe_usage
sFuncPtrList.pfSetMemZeroSize64 = WelsSetMemZeroSize64_mmx; // confirmed_safe_unsafe_usage
}
if (uiCpuFlag & WELS_CPU_SSE2) {
sFuncPtrList.pfSetMemZeroSize64Aligned16 = WelsSetMemZeroAligned64_sse2; // confirmed_safe_unsafe_usage
}
#else
(void) uiCpuFlag; // Avoid warnings if no assembly is enabled
#endif//X86_ASM
#if defined(HAVE_NEON)
if (uiCpuFlag & WELS_CPU_NEON) {
sFuncPtrList.pfSetMemZeroSize8 = WelsSetMemZero_neon;
sFuncPtrList.pfSetMemZeroSize64Aligned16 = WelsSetMemZero_neon;
sFuncPtrList.pfSetMemZeroSize64 = WelsSetMemZero_neon;
}
#endif
#if defined(HAVE_NEON_AARCH64)
if (uiCpuFlag & WELS_CPU_NEON) {
sFuncPtrList.pfSetMemZeroSize8 = WelsSetMemZero_AArch64_neon;
sFuncPtrList.pfSetMemZeroSize64Aligned16 = WelsSetMemZero_AArch64_neon;
sFuncPtrList.pfSetMemZeroSize64 = WelsSetMemZero_AArch64_neon;
}
#endif
ENFORCE_STACK_ALIGN_2D (uint8_t, pInputAlign, 2, 64 * 101, 16)
for (int32_t k = 0; k < MEMORYZEROTEST_NUM; k++) {
memset (pInputAlign[0], 255, 64 * 101);
memset (pInputAlign[1], 255, 64 * 101);
iLen = 64 * (1 + (rand() % 100));
WelsSetMemZero_c (pInputAlign[0], iLen);
sFuncPtrList.pfSetMemZeroSize64Aligned16 (pInputAlign[1], iLen);
for (int32_t i = 0 ; i < 64 * 101; i++) {
ASSERT_EQ (pInputAlign[0][i], pInputAlign[1][i]);
}
}
for (int32_t k = 0; k < MEMORYZEROTEST_NUM; k++) {
memset (pInputAlign[0], 255, 64 * 101);
memset (pInputAlign[1], 255, 64 * 101);
iLen = 64 * (1 + (rand() % 100));
WelsSetMemZero_c (pInputAlign[0] + 1, iLen);
sFuncPtrList.pfSetMemZeroSize64 (pInputAlign[1] + 1, iLen);
for (int32_t i = 0 ; i < 64 * 101; i++) {
ASSERT_EQ (pInputAlign[0][i], pInputAlign[1][i]);
}
}
memset (pInputAlign[0], 255, 64 * 101);
memset (pInputAlign[1], 255, 64 * 101);
iLen = 32;
WelsSetMemZero_c (pInputAlign[0] + 1, iLen);
sFuncPtrList.pfSetMemZeroSize8 (pInputAlign[1] + 1, iLen);
for (int32_t i = 0 ; i < 64 * 101; i++) {
ASSERT_EQ (pInputAlign[0][i], pInputAlign[1][i]);
}
memset (pInputAlign[0], 255, 64 * 101);
memset (pInputAlign[1], 255, 64 * 101);
iLen = 24;
WelsSetMemZero_c (pInputAlign[0] + 1, iLen);
sFuncPtrList.pfSetMemZeroSize8 (pInputAlign[1] + 1, iLen);
for (int32_t i = 0 ; i < 64 * 101; i++) {
ASSERT_EQ (pInputAlign[0][i], pInputAlign[1][i]);
}
}