/*
 * 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(PREDICTION_MODE mode) = 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(DC_PRED);
      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(PREDICTION_MODE mode) {
    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
