shithub: openh264

ref: 22342648af5e2790df2c5bf386fe0d6e00c80986
dir: /test/encoder/EncUT_MemoryAlloc.cpp/

View raw version
#include <time.h>

#include "gtest/gtest.h"
#include "memory_align.h"

using namespace WelsSVCEnc;

//Tests of WelsGetCacheLineSize Begin
TEST(MemoryAlignTest, GetCacheLineSize_LoopWithin16K) {
  const unsigned int kuiTestBoundary16K = 16 * 1024;
	unsigned int uiTargetAlign = 1;
	while (uiTargetAlign < kuiTestBoundary16K) {
		CMemoryAlign cTestMa(uiTargetAlign);
    ASSERT_EQ(  (uiTargetAlign & 0x0F)?16:uiTargetAlign, cTestMa.WelsGetCacheLineSize() );
		++ uiTargetAlign;
	}
}

TEST(MemoryAlignTest, GetCacheLineSize_Zero) {
  CMemoryAlign cTestMa(0);
  const uint32_t kuiSixteen = 16;
  ASSERT_EQ(  kuiSixteen, cTestMa.WelsGetCacheLineSize() );
}
TEST(MemoryAlignTest, GetCacheLineSize_MaxUINT) {
	CMemoryAlign cTestMa(0xFFFFFFFF);
    const uint32_t kuiSixteen = 16;
	ASSERT_EQ( kuiSixteen, cTestMa.WelsGetCacheLineSize() );
}
//Tests of WelsGetCacheLineSize End
//Tests of WelsMallocAndFree Begin
TEST(MemoryAlignTest, WelsMallocAndFreeOnceFunctionVerify) {
  const uint32_t kuiTargetAlignSize[4] = {32, 16, 64, 8};
  srand((uint32_t)time(NULL));
  const uint32_t kuiZero = 0;
  for (int i=0; i<4; i++) {
    const uint32_t kuiTestAlignSize	= kuiTargetAlignSize[i];
    const uint32_t kuiTestDataSize		= abs(rand());

    CMemoryAlign cTestMa(kuiTestAlignSize);
    const uint32_t uiSize = kuiTestDataSize;
    const char strUnitTestTag[100] = "pUnitTestData";
    const uint32_t kuiUsedCacheLineSize	= ((kuiTestAlignSize == 0) || (kuiTestAlignSize & 0x0F)) ? (16) : (kuiTestAlignSize);
    const uint32_t kuiExtraAlignSize	= kuiUsedCacheLineSize-1;
    const uint32_t kuiExpectedSize	= sizeof( void ** ) + sizeof( int32_t ) + kuiExtraAlignSize + uiSize;
    uint8_t *pUnitTestData = static_cast<uint8_t *>(cTestMa.WelsMalloc(uiSize, strUnitTestTag));
    if ( pUnitTestData != NULL ) {
      ASSERT_TRUE( (((uintptr_t)(pUnitTestData)) & kuiExtraAlignSize) == 0 );
      EXPECT_EQ( kuiExpectedSize, cTestMa.WelsGetMemoryUsage() );
      cTestMa.WelsFree( pUnitTestData, strUnitTestTag );
      EXPECT_EQ( kuiZero, cTestMa.WelsGetMemoryUsage() );
    }
    else {
      EXPECT_EQ( NULL, pUnitTestData );
      EXPECT_EQ( kuiZero, cTestMa.WelsGetMemoryUsage() );
      cTestMa.WelsFree( pUnitTestData, strUnitTestTag );
      EXPECT_EQ( kuiZero, cTestMa.WelsGetMemoryUsage() );
    }
  }
}