Change CFLSubAvgTest to use separate dst buffers The dst buffer passed to sub_avg() or sub_avg_ref() should be different from the src buffer. With this change, CFLSubAvgTest should fail on ppc64le because subtract_average_vsx() has a bug in its second do-while loop (which does not use the src_ptr parameter). Also change the return type of libaom_test::ACMRandom::Rand15() from int16_t to uint16_t. Change-Id: I840543351e118c861eb87977f8355dfb4c2f3021 (cherry picked from commit f6c2362492bf0aff06dfa7a55b718c4872042770)
diff --git a/test/acm_random.h b/test/acm_random.h index 6fb6d56..67f7aa8 100644 --- a/test/acm_random.h +++ b/test/acm_random.h
@@ -40,7 +40,7 @@ int16_t Rand16Signed() { return static_cast<int16_t>(Rand16()); } - int16_t Rand15() { + uint16_t Rand15() { const uint32_t value = random_.Generate(testing::internal::Random::kMaxRange); // There's a bit more entropy in the upper bits of this implementation.
diff --git a/test/cfl_test.cc b/test/cfl_test.cc index e093c4e..3f93305 100644 --- a/test/cfl_test.cc +++ b/test/cfl_test.cc
@@ -175,7 +175,7 @@ typedef cfl_subtract_average_fn (*sub_avg_fn)(TX_SIZE tx_size); typedef std::tuple<TX_SIZE, sub_avg_fn> sub_avg_param; class CFLSubAvgTest : public ::testing::TestWithParam<sub_avg_param>, - public CFLTestWithData<int16_t> { + public CFLTestWithData<uint16_t> { public: void SetUp() override { CFLTest::init(std::get<0>(this->GetParam())); @@ -191,27 +191,31 @@ GTEST_ALLOW_UNINSTANTIATED_PARAMETERIZED_TEST(CFLSubAvgTest); TEST_P(CFLSubAvgTest, SubAvgTest) { + int16_t dst[CFL_BUF_SQUARE]; + int16_t dst_ref[CFL_BUF_SQUARE]; for (int it = 0; it < NUM_ITERATIONS; it++) { randData(&ACMRandom::Rand15); - sub_avg((uint16_t *)data, data); - sub_avg_ref((uint16_t *)data_ref, data_ref); - assert_eq<int16_t>(data, data_ref, width, height); + sub_avg(data, dst); + sub_avg_ref(data_ref, dst_ref); + assert_eq<int16_t>(dst, dst_ref, width, height); } } TEST_P(CFLSubAvgTest, DISABLED_SubAvgSpeedTest) { + int16_t dst[CFL_BUF_SQUARE]; + int16_t dst_ref[CFL_BUF_SQUARE]; aom_usec_timer ref_timer; aom_usec_timer timer; randData(&ACMRandom::Rand15); aom_usec_timer_start(&ref_timer); for (int k = 0; k < NUM_ITERATIONS_SPEED; k++) { - sub_avg_ref((uint16_t *)data_ref, data_ref); + sub_avg_ref(data_ref, dst_ref); } aom_usec_timer_mark(&ref_timer); int ref_elapsed_time = (int)aom_usec_timer_elapsed(&ref_timer); aom_usec_timer_start(&timer); for (int k = 0; k < NUM_ITERATIONS_SPEED; k++) { - sub_avg((uint16_t *)data, data); + sub_avg(data, dst); } aom_usec_timer_mark(&timer); int elapsed_time = (int)aom_usec_timer_elapsed(&timer); @@ -261,13 +265,13 @@ CFLTestWithData<I>::randData(random); aom_usec_timer_start(&ref_timer); for (int k = 0; k < NUM_ITERATIONS_SPEED; k++) { - fun_ref(this->data_ref, CFL_BUF_LINE, sub_luma_pels); + fun_ref(this->data_ref, CFL_BUF_LINE, sub_luma_pels_ref); } aom_usec_timer_mark(&ref_timer); int ref_elapsed_time = (int)aom_usec_timer_elapsed(&ref_timer); aom_usec_timer_start(&timer); for (int k = 0; k < NUM_ITERATIONS_SPEED; k++) { - fun(this->data, CFL_BUF_LINE, sub_luma_pels_ref); + fun(this->data, CFL_BUF_LINE, sub_luma_pels); } aom_usec_timer_mark(&timer); int elapsed_time = (int)aom_usec_timer_elapsed(&timer);