/*
 * 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/googletest/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;

typedef void (*HighbdIntraPred)(uint16_t *dst, ptrdiff_t stride,
                                const uint16_t *above, const uint16_t *left,
                                int bps);
typedef void (*IntraPred)(uint8_t *dst, ptrdiff_t stride, const uint8_t *above,
                          const uint8_t *left);

template <typename FuncType>
struct IntraPredFunc {
  IntraPredFunc(FuncType pred = NULL, FuncType ref = NULL,
                int block_width_value = 0, int block_height_value = 0,
                int bit_depth_value = 0)
      : pred_fn(pred), ref_fn(ref), block_width(block_width_value),
        block_height(block_height_value), bit_depth(bit_depth_value) {}

  FuncType pred_fn;
  FuncType ref_fn;
  int block_width;
  int block_height;
  int bit_depth;
};

template <typename FuncType, typename Pixel>
class AV1IntraPredTest
    : public ::testing::TestWithParam<IntraPredFunc<FuncType> > {
 public:
  void RunTest(Pixel *left_col, Pixel *above_data, Pixel *dst, Pixel *ref_dst) {
    ACMRandom rnd(ACMRandom::DeterministicSeed());
    const int block_width = params_.block_width;
    const int block_height = params_.block_height;
    above_row_ = above_data + 16;
    left_col_ = left_col;
    dst_ = dst;
    ref_dst_ = ref_dst;
    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_width * 2; x++) {
        if (i == 0) {
          above_row_[x] = mask_;
        } else {
          above_row_[x] = rnd.Rand16() & mask_;
        }
      }
      for (int y = 0; y < block_height; 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);
  }

 protected:
  virtual void SetUp() {
    params_ = this->GetParam();
    stride_ = params_.block_width * 3;
    mask_ = (1 << params_.bit_depth) - 1;
  }

  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.
    const int block_width = params_.block_width;
    const int block_height = params_.block_height;
    for (int y = 0; y < block_height; y++) {
      for (int x = 0; x < block_width; 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
              << " location: x = " << x << " y = " << y;
        }
      }
    }
  }

  Pixel *above_row_;
  Pixel *left_col_;
  Pixel *dst_;
  Pixel *ref_dst_;
  ptrdiff_t stride_;
  int mask_;

  IntraPredFunc<FuncType> params_;
};

class HighbdIntraPredTest : public AV1IntraPredTest<HighbdIntraPred, uint16_t> {
 protected:
  void Predict() {
    const int bit_depth = params_.bit_depth;
    params_.ref_fn(ref_dst_, stride_, above_row_, left_col_, bit_depth);
    ASM_REGISTER_STATE_CHECK(
        params_.pred_fn(dst_, stride_, above_row_, left_col_, bit_depth));
  }
};

class LowbdIntraPredTest : public AV1IntraPredTest<IntraPred, uint8_t> {
 protected:
  void Predict() {
    params_.ref_fn(ref_dst_, stride_, above_row_, left_col_);
    ASM_REGISTER_STATE_CHECK(
        params_.pred_fn(dst_, stride_, above_row_, left_col_));
  }
};

TEST_P(HighbdIntraPredTest, Bitexact) {
  // 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]);
  memset(left_col, 0, sizeof(left_col));
  memset(above_data, 0, sizeof(above_data));
  RunTest(left_col, above_data, dst, ref_dst);
}

TEST_P(LowbdIntraPredTest, Bitexact) {
  // max block size is 32
  DECLARE_ALIGNED(16, uint8_t, left_col[2 * 32]);
  DECLARE_ALIGNED(16, uint8_t, above_data[2 * 32 + 32]);
  DECLARE_ALIGNED(16, uint8_t, dst[3 * 32 * 32]);
  DECLARE_ALIGNED(16, uint8_t, ref_dst[3 * 32 * 32]);
  memset(left_col, 0, sizeof(left_col));
  memset(above_data, 0, sizeof(above_data));
  RunTest(left_col, above_data, dst, ref_dst);
}

// -----------------------------------------------------------------------------
// High Bit Depth Tests

#define highbd_entry(type, width, height, opt, bd)                          \
  IntraPredFunc<HighbdIntraPred>(                                           \
      &aom_highbd_##type##_predictor_##width##x##height##_##opt,            \
      &aom_highbd_##type##_predictor_##width##x##height##_c, width, height, \
      bd)

/*
#define highbd_intrapred(type, opt, bd)                                       \
  highbd_entry(type, 4, 4, opt, bd), highbd_entry(type, 4, 8, opt, bd),       \
      highbd_entry(type, 8, 4, opt, bd), highbd_entry(type, 8, 8, opt, bd),   \
      highbd_entry(type, 8, 16, opt, bd), highbd_entry(type, 16, 8, opt, bd), \
      highbd_entry(type, 16, 16, opt, bd),                                    \
      highbd_entry(type, 16, 32, opt, bd),                                    \
      highbd_entry(type, 32, 16, opt, bd), highbd_entry(type, 32, 32, opt, bd)
*/

#if HAVE_SSE2
const IntraPredFunc<HighbdIntraPred> IntraPredTestVector8[] = {
  // highbd_intrapred(dc, sse2, 8),     highbd_intrapred(dc_left, sse2, 8),
  // highbd_intrapred(dc_top, sse2, 8), highbd_intrapred(dc_128, sse2, 8),
  // highbd_intrapred(h, sse2, 8),      highbd_intrapred(v, sse2, 8),
  // highbd_entry(d117, 4, 4, sse2, 8), highbd_entry(d135, 4, 4, sse2, 8),
  // highbd_entry(d153, 4, 4, sse2, 8), highbd_entry(d45e, 4, 4, sse2, 8),
  // highbd_entry(d45e, 4, 8, sse2, 8), highbd_entry(d45e, 8, 4, sse2, 8),
  // highbd_entry(d45e, 8, 8, sse2, 8), highbd_entry(d45e, 8, 16, sse2, 8),
  // highbd_entry(d207e, 4, 4, sse2, 8),   highbd_entry(d207e, 4, 8, sse2, 8),
  // highbd_entry(d207e, 8, 4, sse2, 8),   highbd_entry(d207e, 8, 8, sse2, 8),
  // highbd_entry(d207e, 8, 16, sse2, 8),  highbd_entry(d207e, 16, 8, sse2, 8),
  // highbd_entry(d207e, 16, 16, sse2, 8), highbd_entry(d207e, 16, 32, sse2, 8),
  highbd_entry(d63e, 4, 4, sse2, 8),  highbd_entry(d63e, 4, 8, sse2, 8),
  highbd_entry(d63e, 8, 4, sse2, 8),  highbd_entry(d63e, 8, 8, sse2, 8),
  highbd_entry(d63e, 8, 16, sse2, 8),
};

INSTANTIATE_TEST_CASE_P(SSE2_TO_C_8, HighbdIntraPredTest,
                        ::testing::ValuesIn(IntraPredTestVector8));

const IntraPredFunc<HighbdIntraPred> IntraPredTestVector10[] = {
  // highbd_intrapred(dc, sse2, 10),     highbd_intrapred(dc_left, sse2, 10),
  // highbd_intrapred(dc_top, sse2, 10), highbd_intrapred(dc_128, sse2, 10),
  // highbd_intrapred(h, sse2, 10),      highbd_intrapred(v, sse2, 10),
  // highbd_entry(d117, 4, 4, sse2, 10), highbd_entry(d135, 4, 4, sse2, 10),
  // highbd_entry(d153, 4, 4, sse2, 10),
  // highbd_entry(d45e, 4, 4, sse2, 10),
  // highbd_entry(d45e, 4, 8, sse2, 10),
  // highbd_entry(d45e, 8, 4, sse2, 10),
  // highbd_entry(d45e, 8, 8, sse2, 10),
  // highbd_entry(d45e, 8, 16, sse2, 10),
  // highbd_entry(d207e, 4, 4, sse2, 10),   highbd_entry(d207e, 4, 8, sse2, 10),
  // highbd_entry(d207e, 8, 4, sse2, 10),   highbd_entry(d207e, 8, 8, sse2, 10),
  // highbd_entry(d207e, 8, 16, sse2, 10),  highbd_entry(d207e, 16, 8, sse2,
  // 10),
  // highbd_entry(d207e, 16, 16, sse2, 10), highbd_entry(d207e, 16, 32, sse2,
  // 10),
  highbd_entry(d63e, 4, 4, sse2, 10),  highbd_entry(d63e, 4, 8, sse2, 10),
  highbd_entry(d63e, 8, 4, sse2, 10),  highbd_entry(d63e, 8, 8, sse2, 10),
  highbd_entry(d63e, 8, 16, sse2, 10),
};

INSTANTIATE_TEST_CASE_P(SSE2_TO_C_10, HighbdIntraPredTest,
                        ::testing::ValuesIn(IntraPredTestVector10));

const IntraPredFunc<HighbdIntraPred> IntraPredTestVector12[] = {
  // highbd_intrapred(dc, sse2, 12),     highbd_intrapred(dc_left, sse2, 12),
  // highbd_intrapred(dc_top, sse2, 12), highbd_intrapred(dc_128, sse2, 12),
  // highbd_intrapred(h, sse2, 12),      highbd_intrapred(v, sse2, 12),
  // highbd_entry(d117, 4, 4, sse2, 12), highbd_entry(d135, 4, 4, sse2, 12),
  // highbd_entry(d153, 4, 4, sse2, 12),
  // highbd_entry(d45e, 4, 4, sse2, 12),
  // highbd_entry(d45e, 4, 8, sse2, 12), highbd_entry(d45e, 8, 4, sse2, 12),
  // highbd_entry(d45e, 8, 8, sse2, 12), highbd_entry(d45e, 8, 16, sse2, 12),
  // highbd_entry(d207e, 4, 4, sse2, 12),   highbd_entry(d207e, 4, 8, sse2, 12),
  // highbd_entry(d207e, 8, 4, sse2, 12),   highbd_entry(d207e, 8, 8, sse2, 12),
  // highbd_entry(d207e, 8, 16, sse2, 12),  highbd_entry(d207e, 16, 8, sse2,
  // 12),
  // highbd_entry(d207e, 16, 16, sse2, 12), highbd_entry(d207e, 16, 32, sse2,
  // 12),
  highbd_entry(d63e, 4, 4, sse2, 12),  highbd_entry(d63e, 4, 8, sse2, 12),
  highbd_entry(d63e, 8, 4, sse2, 12),  highbd_entry(d63e, 8, 8, sse2, 12),
  highbd_entry(d63e, 8, 16, sse2, 12),
};

INSTANTIATE_TEST_CASE_P(SSE2_TO_C_12, HighbdIntraPredTest,
                        ::testing::ValuesIn(IntraPredTestVector12));

#endif  // HAVE_SSE2

#if HAVE_SSSE3
const IntraPredFunc<HighbdIntraPred> IntraPredTestVectorSsse3_8[] = {
  highbd_entry(d117, 8, 8, ssse3, 8),   highbd_entry(d117, 16, 16, ssse3, 8),
  highbd_entry(d117, 32, 32, ssse3, 8), highbd_entry(d135, 8, 8, ssse3, 8),
  highbd_entry(d135, 16, 16, ssse3, 8), highbd_entry(d135, 32, 32, ssse3, 8),
  highbd_entry(d153, 8, 8, ssse3, 8),   highbd_entry(d153, 16, 16, ssse3, 8),
  highbd_entry(d153, 32, 32, ssse3, 8),
};
INSTANTIATE_TEST_CASE_P(SSSE3_TO_C_8, HighbdIntraPredTest,
                        ::testing::ValuesIn(IntraPredTestVectorSsse3_8));

const IntraPredFunc<HighbdIntraPred> IntraPredTestVectorSsse3_10[] = {
  highbd_entry(d117, 8, 8, ssse3, 10),   highbd_entry(d117, 16, 16, ssse3, 10),
  highbd_entry(d117, 32, 32, ssse3, 10), highbd_entry(d135, 8, 8, ssse3, 10),
  highbd_entry(d135, 16, 16, ssse3, 10), highbd_entry(d135, 32, 32, ssse3, 10),
  highbd_entry(d153, 8, 8, ssse3, 10),   highbd_entry(d153, 16, 16, ssse3, 10),
  highbd_entry(d153, 32, 32, ssse3, 10),
};
INSTANTIATE_TEST_CASE_P(SSSE3_TO_C_10, HighbdIntraPredTest,
                        ::testing::ValuesIn(IntraPredTestVectorSsse3_10));

const IntraPredFunc<HighbdIntraPred> IntraPredTestVectorSsse3_12[] = {
  highbd_entry(d117, 8, 8, ssse3, 12),   highbd_entry(d117, 16, 16, ssse3, 12),
  highbd_entry(d117, 32, 32, ssse3, 12), highbd_entry(d135, 8, 8, ssse3, 12),
  highbd_entry(d135, 16, 16, ssse3, 12), highbd_entry(d135, 32, 32, ssse3, 12),
  highbd_entry(d153, 8, 8, ssse3, 12),   highbd_entry(d153, 16, 16, ssse3, 12),
  highbd_entry(d153, 32, 32, ssse3, 12),
};
INSTANTIATE_TEST_CASE_P(SSSE3_TO_C_12, HighbdIntraPredTest,
                        ::testing::ValuesIn(IntraPredTestVectorSsse3_12));
#endif  // HAVE_SSSE3

#if HAVE_AVX2
const IntraPredFunc<HighbdIntraPred> IntraPredTestVectorAvx2_8[] = {
  highbd_entry(d45e, 16, 8, avx2, 8),   highbd_entry(d45e, 16, 16, avx2, 8),
  highbd_entry(d45e, 16, 32, avx2, 8),  highbd_entry(d45e, 32, 16, avx2, 8),
  highbd_entry(d45e, 32, 32, avx2, 8),  highbd_entry(d207e, 32, 16, avx2, 8),
  highbd_entry(d207e, 32, 32, avx2, 8), highbd_entry(d63e, 16, 8, avx2, 8),
  highbd_entry(d63e, 16, 16, avx2, 8),  highbd_entry(d63e, 16, 32, avx2, 8),
  highbd_entry(d63e, 32, 16, avx2, 8),  highbd_entry(d63e, 32, 32, avx2, 8),
};
INSTANTIATE_TEST_CASE_P(AVX2_TO_C_8, HighbdIntraPredTest,
                        ::testing::ValuesIn(IntraPredTestVectorAvx2_8));

const IntraPredFunc<HighbdIntraPred> IntraPredTestVectorAvx2_10[] = {
  highbd_entry(d45e, 16, 8, avx2, 10),   highbd_entry(d45e, 16, 16, avx2, 10),
  highbd_entry(d45e, 16, 32, avx2, 10),  highbd_entry(d45e, 32, 16, avx2, 10),
  highbd_entry(d45e, 32, 32, avx2, 10),  highbd_entry(d207e, 32, 16, avx2, 10),
  highbd_entry(d207e, 32, 32, avx2, 10), highbd_entry(d63e, 16, 8, avx2, 10),
  highbd_entry(d63e, 16, 16, avx2, 10),  highbd_entry(d63e, 16, 32, avx2, 10),
  highbd_entry(d63e, 32, 16, avx2, 10),  highbd_entry(d63e, 32, 32, avx2, 10),
};
INSTANTIATE_TEST_CASE_P(AVX2_TO_C_10, HighbdIntraPredTest,
                        ::testing::ValuesIn(IntraPredTestVectorAvx2_10));

const IntraPredFunc<HighbdIntraPred> IntraPredTestVectorAvx2_12[] = {
  highbd_entry(d45e, 16, 8, avx2, 12),   highbd_entry(d45e, 16, 16, avx2, 12),
  highbd_entry(d45e, 16, 32, avx2, 12),  highbd_entry(d45e, 32, 16, avx2, 12),
  highbd_entry(d45e, 32, 32, avx2, 12),  highbd_entry(d207e, 32, 16, avx2, 12),
  highbd_entry(d207e, 32, 32, avx2, 12), highbd_entry(d63e, 16, 8, avx2, 12),
  highbd_entry(d63e, 16, 16, avx2, 12),  highbd_entry(d63e, 16, 32, avx2, 12),
  highbd_entry(d63e, 32, 16, avx2, 12),  highbd_entry(d63e, 32, 32, avx2, 12),
};
INSTANTIATE_TEST_CASE_P(AVX2_TO_C_12, HighbdIntraPredTest,
                        ::testing::ValuesIn(IntraPredTestVectorAvx2_12));
#endif  // HAVE_AVX2

// -----------------------------------------------------------------------------
// Low Bit Depth Tests

#define lowbd_entry(type, width, height, opt)                                  \
  IntraPredFunc<IntraPred>(&aom_##type##_predictor_##width##x##height##_##opt, \
                           &aom_##type##_predictor_##width##x##height##_c,     \
                           width, height, 8)

#define lowbd_intrapred(type, opt)                                    \
  lowbd_entry(type, 4, 4, opt), lowbd_entry(type, 4, 8, opt),         \
      lowbd_entry(type, 8, 4, opt), lowbd_entry(type, 8, 8, opt),     \
      lowbd_entry(type, 8, 16, opt), lowbd_entry(type, 16, 8, opt),   \
      lowbd_entry(type, 16, 16, opt), lowbd_entry(type, 16, 32, opt), \
      lowbd_entry(type, 32, 16, opt), lowbd_entry(type, 32, 32, opt)

#if HAVE_SSE2
const IntraPredFunc<IntraPred> LowbdIntraPredTestVector[] = {
  lowbd_intrapred(d63e, sse2),    lowbd_intrapred(d207e, sse2),
  lowbd_intrapred(dc, sse2),      lowbd_intrapred(dc_top, sse2),
  lowbd_intrapred(dc_left, sse2), lowbd_intrapred(dc_128, sse2),
  lowbd_intrapred(v, sse2),       lowbd_intrapred(h, sse2),
};

INSTANTIATE_TEST_CASE_P(SSE2, LowbdIntraPredTest,
                        ::testing::ValuesIn(LowbdIntraPredTestVector));

#endif  // HAVE_SSE2

#if HAVE_SSSE3
const IntraPredFunc<IntraPred> LowbdIntraPredTestVectorSsse3[] = {
  lowbd_entry(d63e, 4, 4, ssse3), lowbd_intrapred(d45e, ssse3),
  lowbd_intrapred(paeth, ssse3), lowbd_intrapred(smooth, ssse3),
};

INSTANTIATE_TEST_CASE_P(SSSE3, LowbdIntraPredTest,
                        ::testing::ValuesIn(LowbdIntraPredTestVectorSsse3));

#endif  // HAVE_SSSE3

#if HAVE_AVX2
const IntraPredFunc<IntraPred> LowbdIntraPredTestVectorAvx2[] = {
  lowbd_entry(dc, 32, 32, avx2),      lowbd_entry(dc_top, 32, 32, avx2),
  lowbd_entry(dc_left, 32, 32, avx2), lowbd_entry(dc_128, 32, 32, avx2),
  lowbd_entry(v, 32, 32, avx2),       lowbd_entry(h, 32, 32, avx2),
  lowbd_entry(dc, 32, 16, avx2),      lowbd_entry(dc_top, 32, 16, avx2),
  lowbd_entry(dc_left, 32, 16, avx2), lowbd_entry(dc_128, 32, 16, avx2),
  lowbd_entry(v, 32, 16, avx2),       lowbd_entry(paeth, 16, 8, avx2),
  lowbd_entry(paeth, 16, 16, avx2),   lowbd_entry(paeth, 16, 32, avx2),
  lowbd_entry(paeth, 32, 16, avx2),   lowbd_entry(paeth, 32, 32, avx2),
};

INSTANTIATE_TEST_CASE_P(AVX2, LowbdIntraPredTest,
                        ::testing::ValuesIn(LowbdIntraPredTestVectorAvx2));

#endif  // HAVE_AVX2

}  // namespace
