Debargha Mukherjee | 47748b5 | 2017-03-24 12:20:49 -0700 | [diff] [blame] | 1 | /* |
| 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 Mukherjee | e23d5c3 | 2017-04-13 15:33:58 -0700 | [diff] [blame] | 18 | #include "./aom_config.h" |
Debargha Mukherjee | 47748b5 | 2017-03-24 12:20:49 -0700 | [diff] [blame] | 19 | #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 Mukherjee | e23d5c3 | 2017-04-13 15:33:58 -0700 | [diff] [blame] | 26 | #define ACCT_STR __func__ |
| 27 | |
Debargha Mukherjee | 47748b5 | 2017-03-24 12:20:49 -0700 | [diff] [blame] | 28 | using libaom_test::ACMRandom; |
| 29 | |
| 30 | namespace { |
| 31 | |
Debargha Mukherjee | 47748b5 | 2017-03-24 12:20:49 -0700 | [diff] [blame] | 32 | // Test for Finite subexponential code with reference |
| 33 | TEST(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 Alaiwan | 2b1ec18 | 2017-12-21 09:38:27 +0100 | [diff] [blame] | 63 | aom_reader_init(&br, bw_buffer, bw.pos); |
Debargha Mukherjee | 47748b5 | 2017-03-24 12:20:49 -0700 | [diff] [blame] | 64 | 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 Mukherjee | e23d5c3 | 2017-04-13 15:33:58 -0700 | [diff] [blame] | 74 | aom_read_primitive_refsubexpfin(&br, range, k, ref, ACCT_STR); |
Debargha Mukherjee | 47748b5 | 2017-03-24 12:20:49 -0700 | [diff] [blame] | 75 | 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 |