/*
 * Copyright (c) 2016, Alliance for Open Media. All rights reserved
 *
 * This source code is subject to the terms of the BSD 2 Clause License and
 * the Alliance for Open Media Patent License 1.0. If the BSD 2 Clause License
 * was not distributed with this source code in the LICENSE file, you can
 * obtain it at www.aomedia.org/license/software. If the Alliance for Open
 * Media Patent License 1.0 was not distributed with this source code in the
 * PATENTS file, you can obtain it at www.aomedia.org/license/patent.
*/

#include <string>

#include "third_party/googletest/src/include/gtest/gtest.h"

#include "./aom_config.h"
#include "./aom_dsp_rtcd.h"
#include "test/acm_random.h"
#include "test/clear_system_state.h"
#include "test/register_state_check.h"
#include "test/util.h"
#include "av1/common/blockd.h"
#include "av1/common/pred_common.h"
#include "aom_mem/aom_mem.h"

namespace {

using libaom_test::ACMRandom;

const int count_test_block = 100000;

// Base class for AV1 intra prediction tests.
class AV1IntraPredBase {
 public:
  virtual ~AV1IntraPredBase() { libaom_test::ClearSystemState(); }

 protected:
  virtual void Predict() = 0;

  void CheckPrediction(int test_case_number, int *error_count) const {
    // For each pixel ensure that the calculated value is the same as reference.
    for (int y = 0; y < block_size_; y++) {
      for (int x = 0; x < block_size_; x++) {
        *error_count += ref_dst_[x + y * stride_] != dst_[x + y * stride_];
        if (*error_count == 1) {
          ASSERT_EQ(ref_dst_[x + y * stride_], dst_[x + y * stride_])
              << " Failed on Test Case Number " << test_case_number;
        }
      }
    }
  }

  void RunTest(uint16_t *left_col, uint16_t *above_data, uint16_t *dst,
               uint16_t *ref_dst) {
    ACMRandom rnd(ACMRandom::DeterministicSeed());
    left_col_ = left_col;
    dst_ = dst;
    ref_dst_ = ref_dst;
    above_row_ = above_data + 16;
    int error_count = 0;
    for (int i = 0; i < count_test_block; ++i) {
      // Fill edges with random data, try first with saturated values.
      for (int x = -1; x <= block_size_ * 2; x++) {
        if (i == 0) {
          above_row_[x] = mask_;
        } else {
          above_row_[x] = rnd.Rand16() & mask_;
        }
      }
      for (int y = 0; y < block_size_; y++) {
        if (i == 0) {
          left_col_[y] = mask_;
        } else {
          left_col_[y] = rnd.Rand16() & mask_;
        }
      }
      Predict();
      CheckPrediction(i, &error_count);
    }
    ASSERT_EQ(0, error_count);
  }

  int block_size_;
  uint16_t *above_row_;
  uint16_t *left_col_;
  uint16_t *dst_;
  uint16_t *ref_dst_;
  ptrdiff_t stride_;
  int mask_;
};

typedef void (*intra_pred_fn_t)(uint16_t *dst, ptrdiff_t stride,
                                const uint16_t *above, const uint16_t *left,
                                int bps);
typedef std::tr1::tuple<intra_pred_fn_t, intra_pred_fn_t, int, int>
    intra_pred_params_t;
class AV1IntraPredTest : public AV1IntraPredBase,
                         public ::testing::TestWithParam<intra_pred_params_t> {
  virtual void SetUp() {
    pred_fn_ = GET_PARAM(0);
    ref_fn_ = GET_PARAM(1);
    block_size_ = GET_PARAM(2);
    bit_depth_ = GET_PARAM(3);
    stride_ = block_size_ * 3;
    mask_ = (1 << bit_depth_) - 1;
  }

  virtual void Predict() {
    const uint16_t *const_above_row = above_row_;
    const uint16_t *const_left_col = left_col_;
    ref_fn_(ref_dst_, stride_, const_above_row, const_left_col, bit_depth_);
    ASM_REGISTER_STATE_CHECK(
        pred_fn_(dst_, stride_, const_above_row, const_left_col, bit_depth_));
  }
  intra_pred_fn_t pred_fn_;
  intra_pred_fn_t ref_fn_;
  int bit_depth_;
};

TEST_P(AV1IntraPredTest, IntraPredTests) {
  // max block size is 32
  DECLARE_ALIGNED(16, uint16_t, left_col[2 * 32]);
  DECLARE_ALIGNED(16, uint16_t, above_data[2 * 32 + 32]);
  DECLARE_ALIGNED(16, uint16_t, dst[3 * 32 * 32]);
  DECLARE_ALIGNED(16, uint16_t, ref_dst[3 * 32 * 32]);
  RunTest(left_col, above_data, dst, ref_dst);
}

using std::tr1::make_tuple;

#if HAVE_SSE2
#if CONFIG_AOM_HIGHBITDEPTH
#if CONFIG_USE_X86INC
INSTANTIATE_TEST_CASE_P(
    SSE2_TO_C_8, AV1IntraPredTest,
    ::testing::Values(make_tuple(&aom_highbd_dc_predictor_32x32_sse2,
                                 &aom_highbd_dc_predictor_32x32_c, 32, 8),
                      make_tuple(&aom_highbd_tm_predictor_16x16_sse2,
                                 &aom_highbd_tm_predictor_16x16_c, 16, 8),
                      make_tuple(&aom_highbd_tm_predictor_32x32_sse2,
                                 &aom_highbd_tm_predictor_32x32_c, 32, 8),
                      make_tuple(&aom_highbd_dc_predictor_4x4_sse2,
                                 &aom_highbd_dc_predictor_4x4_c, 4, 8),
                      make_tuple(&aom_highbd_dc_predictor_8x8_sse2,
                                 &aom_highbd_dc_predictor_8x8_c, 8, 8),
                      make_tuple(&aom_highbd_dc_predictor_16x16_sse2,
                                 &aom_highbd_dc_predictor_16x16_c, 16, 8),
                      make_tuple(&aom_highbd_v_predictor_4x4_sse2,
                                 &aom_highbd_v_predictor_4x4_c, 4, 8),
                      make_tuple(&aom_highbd_v_predictor_8x8_sse2,
                                 &aom_highbd_v_predictor_8x8_c, 8, 8),
                      make_tuple(&aom_highbd_v_predictor_16x16_sse2,
                                 &aom_highbd_v_predictor_16x16_c, 16, 8),
                      make_tuple(&aom_highbd_v_predictor_32x32_sse2,
                                 &aom_highbd_v_predictor_32x32_c, 32, 8),
                      make_tuple(&aom_highbd_tm_predictor_4x4_sse2,
                                 &aom_highbd_tm_predictor_4x4_c, 4, 8),
                      make_tuple(&aom_highbd_tm_predictor_8x8_sse2,
                                 &aom_highbd_tm_predictor_8x8_c, 8, 8)));

INSTANTIATE_TEST_CASE_P(
    SSE2_TO_C_10, AV1IntraPredTest,
    ::testing::Values(make_tuple(&aom_highbd_dc_predictor_32x32_sse2,
                                 &aom_highbd_dc_predictor_32x32_c, 32, 10),
                      make_tuple(&aom_highbd_tm_predictor_16x16_sse2,
                                 &aom_highbd_tm_predictor_16x16_c, 16, 10),
                      make_tuple(&aom_highbd_tm_predictor_32x32_sse2,
                                 &aom_highbd_tm_predictor_32x32_c, 32, 10),
                      make_tuple(&aom_highbd_dc_predictor_4x4_sse2,
                                 &aom_highbd_dc_predictor_4x4_c, 4, 10),
                      make_tuple(&aom_highbd_dc_predictor_8x8_sse2,
                                 &aom_highbd_dc_predictor_8x8_c, 8, 10),
                      make_tuple(&aom_highbd_dc_predictor_16x16_sse2,
                                 &aom_highbd_dc_predictor_16x16_c, 16, 10),
                      make_tuple(&aom_highbd_v_predictor_4x4_sse2,
                                 &aom_highbd_v_predictor_4x4_c, 4, 10),
                      make_tuple(&aom_highbd_v_predictor_8x8_sse2,
                                 &aom_highbd_v_predictor_8x8_c, 8, 10),
                      make_tuple(&aom_highbd_v_predictor_16x16_sse2,
                                 &aom_highbd_v_predictor_16x16_c, 16, 10),
                      make_tuple(&aom_highbd_v_predictor_32x32_sse2,
                                 &aom_highbd_v_predictor_32x32_c, 32, 10),
                      make_tuple(&aom_highbd_tm_predictor_4x4_sse2,
                                 &aom_highbd_tm_predictor_4x4_c, 4, 10),
                      make_tuple(&aom_highbd_tm_predictor_8x8_sse2,
                                 &aom_highbd_tm_predictor_8x8_c, 8, 10)));

INSTANTIATE_TEST_CASE_P(
    SSE2_TO_C_12, AV1IntraPredTest,
    ::testing::Values(make_tuple(&aom_highbd_dc_predictor_32x32_sse2,
                                 &aom_highbd_dc_predictor_32x32_c, 32, 12),
                      make_tuple(&aom_highbd_tm_predictor_16x16_sse2,
                                 &aom_highbd_tm_predictor_16x16_c, 16, 12),
                      make_tuple(&aom_highbd_tm_predictor_32x32_sse2,
                                 &aom_highbd_tm_predictor_32x32_c, 32, 12),
                      make_tuple(&aom_highbd_dc_predictor_4x4_sse2,
                                 &aom_highbd_dc_predictor_4x4_c, 4, 12),
                      make_tuple(&aom_highbd_dc_predictor_8x8_sse2,
                                 &aom_highbd_dc_predictor_8x8_c, 8, 12),
                      make_tuple(&aom_highbd_dc_predictor_16x16_sse2,
                                 &aom_highbd_dc_predictor_16x16_c, 16, 12),
                      make_tuple(&aom_highbd_v_predictor_4x4_sse2,
                                 &aom_highbd_v_predictor_4x4_c, 4, 12),
                      make_tuple(&aom_highbd_v_predictor_8x8_sse2,
                                 &aom_highbd_v_predictor_8x8_c, 8, 12),
                      make_tuple(&aom_highbd_v_predictor_16x16_sse2,
                                 &aom_highbd_v_predictor_16x16_c, 16, 12),
                      make_tuple(&aom_highbd_v_predictor_32x32_sse2,
                                 &aom_highbd_v_predictor_32x32_c, 32, 12),
                      make_tuple(&aom_highbd_tm_predictor_4x4_sse2,
                                 &aom_highbd_tm_predictor_4x4_c, 4, 12),
                      make_tuple(&aom_highbd_tm_predictor_8x8_sse2,
                                 &aom_highbd_tm_predictor_8x8_c, 8, 12)));

#endif  // CONFIG_USE_X86INC
#endif  // CONFIG_AOM_HIGHBITDEPTH
#endif  // HAVE_SSE2
}  // namespace
