• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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)10 TEST (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)20 TEST (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)30 TEST (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