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);