Don't reset the random number generator within the unit tests

This makes sure we don't accidentally return the same sequence
of random numbers multiple times within one test (which would
be very non-random).

Every time srand(time()) is called, the pseudo random number
generator is initialized to the same value (as long as time()
returned the same value).

By initializing the random number generator once and for all
before starting to run the unit tests, we are sure we don't
need to reinitialize it within all the tests and all the
functions that use random numbers.

This fixes occasional errors in MotionEstimateTest.

MotionEstimateTest was designed to allow the test to occasionally
not succeed - if it didn't succeed, it tried again, up to 100 times.
However, since the YUVPixelDataGenerator function reset the random
seed to time(), every attempt actually ran with the same random
data (as long as all 100 attempts ran within 1 second) - thus if
one attempt in MotionEstimateTest failed, all 100 of them would
fail. If the utility functions don't touch the random seed,
this is not an issue.
This commit is contained in:
Martin Storsjö
2014-06-28 21:57:42 +03:00
parent 806e59fcb1
commit 4f594deff9
16 changed files with 12 additions and 114 deletions

View File

@@ -1,7 +1,5 @@
#include<gtest/gtest.h>
#include<math.h>
#include<stdlib.h>
#include<time.h>
#include "cpu_core.h"
#include "cpu.h"
@@ -24,7 +22,6 @@ TEST (IntraSadSatdFuncTest, WelsIntra16x16Combined3Sad_ssse3) {
uint8_t* pDec = (uint8_t*)cMemoryAlign.WelsMalloc (iLineSizeDec << 5, "pDec");
uint8_t* pEnc = (uint8_t*)cMemoryAlign.WelsMalloc (iLineSizeEnc << 5, "pEnc");
uint8_t* pDst = (uint8_t*)cMemoryAlign.WelsMalloc (512, "pDst");
srand ((uint32_t)time (NULL));
for (int i = 0; i < (iLineSizeDec << 5); i++)
pDec[i] = rand() % 256;
for (int i = 0; i < (iLineSizeEnc << 5); i++)
@@ -56,7 +53,6 @@ TEST (IntraSadSatdFuncTest, WelsIntra16x16Combined3Satd_sse41) {
uint8_t* pDec = (uint8_t*)cMemoryAlign.WelsMalloc (iLineSizeDec << 5, "pDec");
uint8_t* pEnc = (uint8_t*)cMemoryAlign.WelsMalloc (iLineSizeEnc << 5, "pEnc");
uint8_t* pDst = (uint8_t*)cMemoryAlign.WelsMalloc (512, "pDst");
srand ((uint32_t)time (NULL));
for (int i = 0; i < (iLineSizeDec << 5); i++)
pDec[i] = rand() % 256;
for (int i = 0; i < (iLineSizeEnc << 5); i++)
@@ -88,7 +84,6 @@ TEST (IntraSadSatdFuncTest, WelsSampleSatdThree4x4_sse2) {
uint8_t* pEnc = (uint8_t*)cMemoryAlign.WelsMalloc (iLineSizeEnc << 5, "pEnc");
uint8_t* pDst = (uint8_t*)cMemoryAlign.WelsMalloc (512, "pDst");
WelsInitFillingPredFuncs (WELS_CPU_SSE2);
srand ((uint32_t)time (NULL));
for (int i = 0; i < (iLineSizeDec << 5); i++)
pDec[i] = rand() % 256;
for (int i = 0; i < (iLineSizeEnc << 5); i++)
@@ -121,7 +116,6 @@ TEST (IntraSadSatdFuncTest, WelsIntraChroma8x8Combined3Satd_sse41) {
uint8_t* pDecCr = (uint8_t*)cMemoryAlign.WelsMalloc (iLineSizeDec << 5, "pDecCr");
uint8_t* pEncCr = (uint8_t*)cMemoryAlign.WelsMalloc (iLineSizeEnc << 5, "pEncCr");
uint8_t* pDstChma = (uint8_t*)cMemoryAlign.WelsMalloc (512, "pDstChma");
srand ((uint32_t)time (NULL));
for (int i = 0; i < (iLineSizeDec << 5); i++) {
pDecCb[i] = rand() % 256;
pDecCr[i] = rand() % 256;
@@ -165,7 +159,6 @@ class SadSatdCFuncTest : public testing::Test {
virtual void SetUp() {
pMemAlign = new CMemoryAlign (0);
srand ((uint32_t)time (NULL));
m_iStrideA = rand() % 256 + PIXEL_STRIDE;
m_iStrideB = rand() % 256 + PIXEL_STRIDE;
m_pPixSrcA = (uint8_t*)pMemAlign->WelsMalloc (m_iStrideA << 5, "Sad_m_pPixSrcA");
@@ -192,7 +185,6 @@ class SadSatdCFuncTest : public testing::Test {
};
TEST_F (SadSatdCFuncTest, WelsSampleSad4x4_c) {
srand ((uint32_t)time (NULL));
for (int i = 0; i < (m_iStrideA << 2); i++)
m_pPixSrcA[i] = rand() % 256;
for (int i = 0; i < (m_iStrideB << 2); i++)
@@ -211,7 +203,6 @@ TEST_F (SadSatdCFuncTest, WelsSampleSad4x4_c) {
}
TEST_F (SadSatdCFuncTest, WelsSampleSad8x8_c) {
srand ((uint32_t)time (NULL));
for (int i = 0; i < (m_iStrideA << 3); i++)
m_pPixSrcA[i] = rand() % 256;
for (int i = 0; i < (m_iStrideB << 3); i++)
@@ -231,7 +222,6 @@ TEST_F (SadSatdCFuncTest, WelsSampleSad8x8_c) {
}
TEST_F (SadSatdCFuncTest, WelsSampleSad16x8_c) {
srand ((uint32_t)time (NULL));
for (int i = 0; i < (m_iStrideA << 3); i++)
m_pPixSrcA[i] = rand() % 256;
for (int i = 0; i < (m_iStrideB << 3); i++)
@@ -251,7 +241,6 @@ TEST_F (SadSatdCFuncTest, WelsSampleSad16x8_c) {
}
TEST_F (SadSatdCFuncTest, WelsSampleSad8x16_c) {
srand ((uint32_t)time (NULL));
for (int i = 0; i < (m_iStrideA << 4); i++)
m_pPixSrcA[i] = rand() % 256;
for (int i = 0; i < (m_iStrideB << 4); i++)
@@ -271,7 +260,6 @@ TEST_F (SadSatdCFuncTest, WelsSampleSad8x16_c) {
}
TEST_F (SadSatdCFuncTest, WelsSampleSad16x16_c) {
srand ((uint32_t)time (NULL));
for (int i = 0; i < (m_iStrideA << 4); i++)
m_pPixSrcA[i] = rand() % 256;
for (int i = 0; i < (m_iStrideB << 4); i++)
@@ -291,7 +279,6 @@ TEST_F (SadSatdCFuncTest, WelsSampleSad16x16_c) {
}
TEST_F (SadSatdCFuncTest, WelsSampleSatd4x4_c) {
srand ((uint32_t)time (NULL));
for (int i = 0; i < (m_iStrideA << 2); i++)
m_pPixSrcA[i] = rand() % 256;
for (int i = 0; i < (m_iStrideB << 2); i++)
@@ -355,7 +342,6 @@ TEST_F (SadSatdCFuncTest, WelsSampleSatd4x4_c) {
}
TEST_F (SadSatdCFuncTest, WelsSampleSadFour16x16_c) {
srand ((uint32_t)time (NULL));
for (int i = 0; i < (m_iStrideA << 5); i++)
m_pPixSrcA[i] = rand() % 256;
for (int i = 0; i < (m_iStrideB << 5); i++)
@@ -379,7 +365,6 @@ TEST_F (SadSatdCFuncTest, WelsSampleSadFour16x16_c) {
}
TEST_F (SadSatdCFuncTest, WelsSampleSadFour16x8_c) {
srand ((uint32_t)time (NULL));
for (int i = 0; i < (m_iStrideA << 5); i++)
m_pPixSrcA[i] = rand() % 256;
for (int i = 0; i < (m_iStrideB << 5); i++)
@@ -404,7 +389,6 @@ TEST_F (SadSatdCFuncTest, WelsSampleSadFour16x8_c) {
}
TEST_F (SadSatdCFuncTest, WelsSampleSadFour8x16_c) {
srand ((uint32_t)time (NULL));
for (int i = 0; i < (m_iStrideA << 5); i++)
m_pPixSrcA[i] = rand() % 256;
for (int i = 0; i < (m_iStrideB << 5); i++)
@@ -429,7 +413,6 @@ TEST_F (SadSatdCFuncTest, WelsSampleSadFour8x16_c) {
}
TEST_F (SadSatdCFuncTest, WelsSampleSadFour8x8_c) {
srand ((uint32_t)time (NULL));
for (int i = 0; i < (m_iStrideA << 4); i++)
m_pPixSrcA[i] = rand() % 256;
for (int i = 0; i < (m_iStrideB << 4); i++)
@@ -453,7 +436,6 @@ TEST_F (SadSatdCFuncTest, WelsSampleSadFour8x8_c) {
}
TEST_F (SadSatdCFuncTest, WelsSampleSadFour4x4_c) {
srand ((uint32_t)time (NULL));
for (int i = 0; i < (m_iStrideA << 3); i++)
m_pPixSrcA[i] = rand() % 256;
for (int i = 0; i < (m_iStrideB << 3); i++)
@@ -512,7 +494,6 @@ TEST_F (SadSatdAssemblyFuncTest, WelsSampleSad4x4_mmx) {
if (0 == (m_uiCpuFeatureFlag & WELS_CPU_MMXEXT))
return;
srand ((uint32_t)time (NULL));
for (int i = 0; i < (m_iStrideA << 2); i++)
m_pPixSrcA[i] = rand() % 256;
for (int i = 0; i < (m_iStrideB << 2); i++)
@@ -527,7 +508,6 @@ TEST_F (SadSatdAssemblyFuncTest, WelsSampleSad8x8_sse21) {
if (0 == (m_uiCpuFeatureFlag & WELS_CPU_SSE2))
return;
srand ((uint32_t)time (NULL));
for (int i = 0; i < (m_iStrideA << 3); i++)
m_pPixSrcA[i] = rand() % 256;
for (int i = 0; i < (m_iStrideB << 3); i++)
@@ -540,7 +520,6 @@ TEST_F (SadSatdAssemblyFuncTest, WelsSampleSad8x8_sse21) {
TEST_F (SadSatdAssemblyFuncTest, WelsSampleSad8x16_sse2) {
if (0 == (m_uiCpuFeatureFlag & WELS_CPU_SSE2))
return;
srand ((uint32_t)time (NULL));
for (int i = 0; i < (m_iStrideA << 4); i++)
m_pPixSrcA[i] = rand() % 256;
for (int i = 0; i < (m_iStrideB << 4); i++)
@@ -553,7 +532,6 @@ TEST_F (SadSatdAssemblyFuncTest, WelsSampleSad8x16_sse2) {
TEST_F (SadSatdAssemblyFuncTest, WelsSampleSad16x8_sse2) {
if (0 == (m_uiCpuFeatureFlag & WELS_CPU_SSE2))
return;
srand ((uint32_t)time (NULL));
for (int i = 0; i < (m_iStrideA << 3); i++)
m_pPixSrcA[i] = rand() % 256;
for (int i = 0; i < (m_iStrideB << 3); i++)
@@ -566,7 +544,6 @@ TEST_F (SadSatdAssemblyFuncTest, WelsSampleSad16x8_sse2) {
TEST_F (SadSatdAssemblyFuncTest, WelsSampleSad16x16_sse2) {
if (0 == (m_uiCpuFeatureFlag & WELS_CPU_SSE2))
return;
srand ((uint32_t)time (NULL));
for (int i = 0; i < (m_iStrideA << 4); i++)
m_pPixSrcA[i] = rand() % 256;
for (int i = 0; i < (m_iStrideB << 4); i++)
@@ -579,7 +556,6 @@ TEST_F (SadSatdAssemblyFuncTest, WelsSampleSad16x16_sse2) {
TEST_F (SadSatdAssemblyFuncTest, WelsSampleSatd4x4_sse2) {
if (0 == (m_uiCpuFeatureFlag & WELS_CPU_SSE2))
return;
srand ((uint32_t)time (NULL));
for (int i = 0; i < (m_iStrideA << 2); i++)
m_pPixSrcA[i] = rand() % 256;
for (int i = 0; i < (m_iStrideB << 2); i++)
@@ -592,7 +568,6 @@ TEST_F (SadSatdAssemblyFuncTest, WelsSampleSatd4x4_sse2) {
TEST_F (SadSatdAssemblyFuncTest, WelsSampleSatd8x8_sse2) {
if (0 == (m_uiCpuFeatureFlag & WELS_CPU_SSE2))
return;
srand ((uint32_t)time (NULL));
for (int i = 0; i < (m_iStrideA << 3); i++)
m_pPixSrcA[i] = rand() % 256;
for (int i = 0; i < (m_iStrideB << 3); i++)
@@ -605,7 +580,6 @@ TEST_F (SadSatdAssemblyFuncTest, WelsSampleSatd8x8_sse2) {
TEST_F (SadSatdAssemblyFuncTest, WelsSampleSatd8x16_sse2) {
if (0 == (m_uiCpuFeatureFlag & WELS_CPU_SSE2))
return;
srand ((uint32_t)time (NULL));
for (int i = 0; i < (m_iStrideA << 4); i++)
m_pPixSrcA[i] = rand() % 256;
for (int i = 0; i < (m_iStrideB << 4); i++)
@@ -618,7 +592,6 @@ TEST_F (SadSatdAssemblyFuncTest, WelsSampleSatd8x16_sse2) {
TEST_F (SadSatdAssemblyFuncTest, WelsSampleSatd16x8_sse2) {
if (0 == (m_uiCpuFeatureFlag & WELS_CPU_SSE2))
return;
srand ((uint32_t)time (NULL));
for (int i = 0; i < (m_iStrideA << 3); i++)
m_pPixSrcA[i] = rand() % 256;
for (int i = 0; i < (m_iStrideB << 3); i++)
@@ -631,7 +604,6 @@ TEST_F (SadSatdAssemblyFuncTest, WelsSampleSatd16x8_sse2) {
TEST_F (SadSatdAssemblyFuncTest, WelsSampleSatd16x16_sse2) {
if (0 == (m_uiCpuFeatureFlag & WELS_CPU_SSE2))
return;
srand ((uint32_t)time (NULL));
for (int i = 0; i < (m_iStrideA << 4); i++)
m_pPixSrcA[i] = rand() % 256;
for (int i = 0; i < (m_iStrideB << 4); i++)
@@ -644,7 +616,6 @@ TEST_F (SadSatdAssemblyFuncTest, WelsSampleSatd16x16_sse2) {
TEST_F (SadSatdAssemblyFuncTest, WelsSampleSatd4x4_sse41) {
if (0 == (m_uiCpuFeatureFlag & WELS_CPU_SSE41))
return;
srand ((uint32_t)time (NULL));
for (int i = 0; i < (m_iStrideA << 2); i++)
m_pPixSrcA[i] = rand() % 256;
for (int i = 0; i < (m_iStrideB << 2); i++)
@@ -657,7 +628,6 @@ TEST_F (SadSatdAssemblyFuncTest, WelsSampleSatd4x4_sse41) {
TEST_F (SadSatdAssemblyFuncTest, WelsSampleSatd8x8_sse41) {
if (0 == (m_uiCpuFeatureFlag & WELS_CPU_SSE41))
return;
srand ((uint32_t)time (NULL));
for (int i = 0; i < (m_iStrideA << 3); i++)
m_pPixSrcA[i] = rand() % 256;
for (int i = 0; i < (m_iStrideB << 3); i++)
@@ -670,7 +640,6 @@ TEST_F (SadSatdAssemblyFuncTest, WelsSampleSatd8x8_sse41) {
TEST_F (SadSatdAssemblyFuncTest, WelsSampleSatd8x16_sse41) {
if (0 == (m_uiCpuFeatureFlag & WELS_CPU_SSE41))
return;
srand ((uint32_t)time (NULL));
for (int i = 0; i < (m_iStrideA << 4); i++)
m_pPixSrcA[i] = rand() % 256;
for (int i = 0; i < (m_iStrideB << 4); i++)
@@ -683,7 +652,6 @@ TEST_F (SadSatdAssemblyFuncTest, WelsSampleSatd8x16_sse41) {
TEST_F (SadSatdAssemblyFuncTest, WelsSampleSatd16x8_sse41) {
if (0 == (m_uiCpuFeatureFlag & WELS_CPU_SSE41))
return;
srand ((uint32_t)time (NULL));
for (int i = 0; i < (m_iStrideA << 3); i++)
m_pPixSrcA[i] = rand() % 256;
for (int i = 0; i < (m_iStrideB << 3); i++)
@@ -696,7 +664,6 @@ TEST_F (SadSatdAssemblyFuncTest, WelsSampleSatd16x8_sse41) {
TEST_F (SadSatdAssemblyFuncTest, WelsSampleSatd16x16_sse41) {
if (0 == (m_uiCpuFeatureFlag & WELS_CPU_SSE41))
return;
srand ((uint32_t)time (NULL));
for (int i = 0; i < (m_iStrideA << 4); i++)
m_pPixSrcA[i] = rand() % 256;
for (int i = 0; i < (m_iStrideB << 4); i++)
@@ -710,7 +677,6 @@ TEST_F (SadSatdAssemblyFuncTest, WelsSampleSadFour16x16_sse2) {
if (0 == (m_uiCpuFeatureFlag & WELS_CPU_SSE2))
return;
srand ((uint32_t)time (NULL));
for (int i = 0; i < (m_iStrideA << 5); i++)
m_pPixSrcA[i] = rand() % 256;
for (int i = 0; i < (m_iStrideB << 5); i++)
@@ -739,7 +705,6 @@ TEST_F (SadSatdAssemblyFuncTest, WelsSampleSadFour16x8_sse2) {
if (0 == (m_uiCpuFeatureFlag & WELS_CPU_SSE2))
return;
srand ((uint32_t)time (NULL));
for (int i = 0; i < (m_iStrideA << 5); i++)
m_pPixSrcA[i] = rand() % 256;
for (int i = 0; i < (m_iStrideB << 5); i++)
@@ -768,7 +733,6 @@ TEST_F (SadSatdAssemblyFuncTest, WelsSampleSadFour8x16_sse2) {
if (0 == (m_uiCpuFeatureFlag & WELS_CPU_SSE2))
return;
srand ((uint32_t)time (NULL));
for (int i = 0; i < (m_iStrideA << 5); i++)
m_pPixSrcA[i] = rand() % 256;
for (int i = 0; i < (m_iStrideB << 5); i++)
@@ -797,7 +761,6 @@ TEST_F (SadSatdAssemblyFuncTest, WelsSampleSadFour8x8_sse2) {
if (0 == (m_uiCpuFeatureFlag & WELS_CPU_SSE2))
return;
srand ((uint32_t)time (NULL));
for (int i = 0; i < (m_iStrideA << 4); i++)
m_pPixSrcA[i] = rand() % 256;
for (int i = 0; i < (m_iStrideB << 4); i++)
@@ -827,7 +790,6 @@ TEST_F (SadSatdAssemblyFuncTest, WelsSampleSadFour4x4_sse2) {
if (0 == (m_uiCpuFeatureFlag & WELS_CPU_SSE2))
return;
srand ((uint32_t)time (NULL));
for (int i = 0; i < (m_iStrideA << 3); i++)
m_pPixSrcA[i] = rand() % 256;
for (int i = 0; i < (m_iStrideB << 3); i++)