blob: 42610ea8877b51bede9a25a15d1e9f51f27074d9 [file] [log] [blame]
Debargha Mukherjee47748b52017-03-24 12:20:49 -07001/*
2 * Copyright (c) 2016, Alliance for Open Media. All rights reserved
3 *
4 * This source code is subject to the terms of the BSD 2 Clause License and
5 * the Alliance for Open Media Patent License 1.0. If the BSD 2 Clause License
6 * was not distributed with this source code in the LICENSE file, you can
7 * obtain it at www.aomedia.org/license/software. If the Alliance for Open
8 * Media Patent License 1.0 was not distributed with this source code in the
9 * PATENTS file, you can obtain it at www.aomedia.org/license/patent.
10*/
11
12#include <math.h>
13#include <stdlib.h>
14#include <string.h>
15
16#include "third_party/googletest/src/googletest/include/gtest/gtest.h"
17
Debargha Mukherjeee23d5c32017-04-13 15:33:58 -070018#include "./aom_config.h"
Debargha Mukherjee47748b52017-03-24 12:20:49 -070019#include "test/acm_random.h"
20#include "aom/aom_integer.h"
21#include "aom_dsp/bitreader.h"
22#include "aom_dsp/bitwriter.h"
23#include "aom_dsp/binary_codes_reader.h"
24#include "aom_dsp/binary_codes_writer.h"
25
Debargha Mukherjeee23d5c32017-04-13 15:33:58 -070026#define ACCT_STR __func__
27
Debargha Mukherjee47748b52017-03-24 12:20:49 -070028using libaom_test::ACMRandom;
29
30namespace {
31
Debargha Mukherjee47748b52017-03-24 12:20:49 -070032// Test for Finite subexponential code with reference
33TEST(AV1, TestPrimitiveRefsubexpfin) {
34 ACMRandom rnd(ACMRandom::DeterministicSeed());
35 const int kBufferSize = 65536;
36 aom_writer bw;
37 uint8_t bw_buffer[kBufferSize];
38 const uint16_t kRanges = 8;
39 const uint16_t kSubexpParams = 6;
40 const uint16_t kReferences = 8;
41 const uint16_t kValues = 16;
42 uint16_t enc_values[kRanges][kSubexpParams][kReferences][kValues][4];
43 const uint16_t range_vals[kRanges] = { 1, 13, 64, 120, 230, 420, 1100, 8000 };
44 aom_start_encode(&bw, bw_buffer);
45 for (int n = 0; n < kRanges; ++n) {
46 const uint16_t range = range_vals[n];
47 for (int k = 0; k < kSubexpParams; ++k) {
48 for (int r = 0; r < kReferences; ++r) {
49 const uint16_t ref = rnd(range);
50 for (int v = 0; v < kValues; ++v) {
51 const uint16_t value = rnd(range);
52 enc_values[n][k][r][v][0] = range;
53 enc_values[n][k][r][v][1] = k;
54 enc_values[n][k][r][v][2] = ref;
55 enc_values[n][k][r][v][3] = value;
56 aom_write_primitive_refsubexpfin(&bw, range, k, ref, value);
57 }
58 }
59 }
60 }
61 aom_stop_encode(&bw);
62 aom_reader br;
Sebastien Alaiwan2b1ec182017-12-21 09:38:27 +010063 aom_reader_init(&br, bw_buffer, bw.pos);
Debargha Mukherjee47748b52017-03-24 12:20:49 -070064 GTEST_ASSERT_GE(aom_reader_tell(&br), 0u);
65 GTEST_ASSERT_LE(aom_reader_tell(&br), 1u);
66 for (int n = 0; n < kRanges; ++n) {
67 for (int k = 0; k < kSubexpParams; ++k) {
68 for (int r = 0; r < kReferences; ++r) {
69 for (int v = 0; v < kValues; ++v) {
70 const uint16_t range = enc_values[n][k][r][v][0];
71 assert(k == enc_values[n][k][r][v][1]);
72 const uint16_t ref = enc_values[n][k][r][v][2];
73 const uint16_t value =
Debargha Mukherjeee23d5c32017-04-13 15:33:58 -070074 aom_read_primitive_refsubexpfin(&br, range, k, ref, ACCT_STR);
Debargha Mukherjee47748b52017-03-24 12:20:49 -070075 GTEST_ASSERT_EQ(value, enc_values[n][k][r][v][3]);
76 }
77 }
78 }
79 }
80}
81// TODO(debargha): Adds tests for other primitives
82} // namespace