1 #include <gtest/gtest.h> 2 #include <math.h> 3 #include "svc_enc_golomb.h" 4 #include "macros.h" 5 6 using namespace WelsEnc; 7 8 const double g_kdLog2Factor = 1.0 / log (2.0); 9 TEST(UeExpGolombTest,TestBsSizeUeLt256)10TEST (UeExpGolombTest, TestBsSizeUeLt256) { 11 uint32_t uiInVal = 0; 12 for (; uiInVal < 256; ++ uiInVal) { 13 const uint32_t uiActVal = BsSizeUE (uiInVal); 14 const int32_t m = static_cast<int32_t> (log ((uiInVal + 1) * 1.0) * g_kdLog2Factor + 1e-6); 15 const uint32_t uiExpVal = (m << 1) + 1; 16 EXPECT_EQ (uiActVal, uiExpVal); 17 } 18 } 19 TEST(UeExpGolombTest,TestBsSizeUeRangeFrom256To65534)20TEST (UeExpGolombTest, TestBsSizeUeRangeFrom256To65534) { 21 uint32_t uiInVal = 0x100; 22 for (; uiInVal < 0xFFFF; ++ uiInVal) { 23 const uint32_t uiActVal = BsSizeUE (uiInVal); 24 const int32_t m = static_cast<int32_t> (log ((uiInVal + 1) * 1.0) * g_kdLog2Factor + 1e-6); 25 const uint32_t uiExpVal = (m << 1) + 1; 26 EXPECT_EQ (uiActVal, uiExpVal); 27 } 28 } 29 TEST(UeExpGolombTest,TestBsSizeUeRangeFrom65535ToPlus256)30TEST (UeExpGolombTest, TestBsSizeUeRangeFrom65535ToPlus256) { 31 uint32_t uiInVal = 0xFFFF; 32 const uint32_t uiCountBase = 256; 33 const uint32_t uiInValEnd = uiInVal + uiCountBase; 34 for (; uiInVal < uiInValEnd; ++ uiInVal) { 35 const uint32_t uiActVal = BsSizeUE (uiInVal); 36 // float precision issue in case use math::log 37 const int32_t m = WELS_LOG2 (1 + uiInVal); 38 const uint32_t uiExpVal = (m << 1) + 1; 39 EXPECT_EQ (uiActVal, uiExpVal); 40 } 41 } 42