/*
 * Copyright (c) 2019, 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 <assert.h>
#include <math.h>
#include <stdio.h>

#include "gtest/gtest.h"

#include "config/av1_rtcd.h"

#include "aom_ports/aom_timer.h"
#include "av1/encoder/cnn.h"
#include "av1/encoder/partition_cnn_weights.h"
#include "test/acm_random.h"
#include "test/function_equivalence_test.h"
#include "test/util.h"

#define SQR(x) ((x) * (x))

// Best possible pixelwise guaranteed precision given each float has at most
// 3 specified decimals.
#define PIXELWISE_FLOAT_TOL 1E-2

#define MSE_FLOAT_TOL 1E-6
#define MSE_INT_TOL 0

// CNN convolve pixelwise error threshold for functional equivalence.
#define CNN_CONVOLVE_PIXELWISE_FLOAT_TOL 1E-3f

namespace {

class CNNTest : public ::testing::Test {
 protected:
  static void RunCNNTest(int image_width, int image_height, const float *input,
                         const float *expected, const CNN_CONFIG *cnn_config,
                         int in_stride, CNN_THREAD_DATA *thread_data,
                         double tolerance) {
    int out_width, out_height, out_channels;
    av1_find_cnn_output_size(image_width, image_height, cnn_config, &out_width,
                             &out_height, &out_channels);

    const int out_size = out_width * out_height;
    const int out_stride = out_width;

    float *output_ =
        (float *)aom_malloc(sizeof(*output_) * out_size * out_channels);
    ASSERT_NE(output_, nullptr);
    float *output[CNN_MAX_CHANNELS] = { nullptr };
    for (int channel = 0; channel < out_channels; ++channel) {
      output[channel] = output_ + (channel * out_size);
    }
    const int num_outputs = 1;
    const int output_chs[1] = { out_channels };
    const int output_strides[1] = { out_stride };
    CNN_MULTI_OUT output_struct = { num_outputs, output_chs, output_strides,
                                    output };

    RunMultiOutCNNTest(&input, image_width, image_height, in_stride, cnn_config,
                       thread_data, &output_struct, &expected, tolerance);

    aom_free(output_);
  }

  static void RunMultiOutCNNTest(const float **input, int image_width,
                                 int image_height, int in_stride,
                                 const CNN_CONFIG *cnn_config,
                                 CNN_THREAD_DATA *thread_data,
                                 CNN_MULTI_OUT *output, const float **expected,
                                 double tolerance) {
    const int num_outputs = output->num_outputs;
    const int *output_chs = output->output_channels;

    int *out_widths = (int *)aom_calloc(num_outputs, sizeof(*out_widths));
    int *out_heights = (int *)aom_calloc(num_outputs, sizeof(*out_heights));
    int *not_used = (int *)aom_calloc(num_outputs, sizeof(*not_used));
    ASSERT_NE(out_widths, nullptr);
    ASSERT_NE(out_heights, nullptr);
    ASSERT_NE(not_used, nullptr);

    av1_find_cnn_output_size(image_width, image_height, cnn_config, out_widths,
                             out_heights, not_used);
    ASSERT_TRUE(av1_cnn_predict(input, image_width, image_height, in_stride,
                                cnn_config, thread_data, output));

    int channel_offset = 0;
    for (int output_idx = 0; output_idx < num_outputs; output_idx++) {
      const float *expected_out = expected[output_idx];
      const int curr_output_chs = output_chs[output_idx];
      const int out_size = out_widths[output_idx] * out_heights[output_idx];

      double mse = 0;
      int expected_ite = 0;
      for (int channel = 0; channel < curr_output_chs; ++channel) {
        const float *buf_out = output->output_buffer[channel_offset];

        for (int i = 0; i < out_size; ++i) {
          EXPECT_NEAR(expected_out[expected_ite], buf_out[i],
                      PIXELWISE_FLOAT_TOL)
              << " output " << output_idx << " channel " << channel << " pixel "
              << expected_ite % out_size << ": " << expected_out[expected_ite]
              << "/" << buf_out[i] << std::endl;
          mse += SQR(expected_out[expected_ite] - buf_out[i]);
          expected_ite++;
        }

        channel_offset++;
      }
      mse /= (out_size * curr_output_chs);
      EXPECT_LE(mse, tolerance) << " output " << output_idx << std::endl;
    }

    aom_free(out_widths);
    aom_free(out_heights);
    aom_free(not_used);
  }

  static void AssignLayerWeightsBiases(CNN_CONFIG *cnn_config, float *weights,
                                       float *bias) {
    size_t weight_offset = 0;
    size_t bias_offset = 0;
    for (int layer = 0; layer < cnn_config->num_layers; ++layer) {
      CNN_LAYER_CONFIG *layer_config = &cnn_config->layer_config[layer];
      layer_config->weights = weights + weight_offset;
      layer_config->bias = bias + bias_offset;
      weight_offset += layer_config->filter_width *
                       layer_config->filter_height * layer_config->in_channels *
                       layer_config->out_channels;
      bias_offset += layer_config->out_channels;

      ASSERT_NE(layer_config->weights, nullptr);
      ASSERT_NE(layer_config->bias, nullptr);
    }
  }
};

}  // namespace

TEST_F(CNNTest, TestMultilayerConvolution) {
  int image_height = 16;
  int image_width = 16;
  int filter_height = 5;
  int filter_width = 4;

  float input[] = {
    -3, 1,  -3, 2,  -2, -2, 2,  -2, 1,  -2, -3, 1,  2,  2,  2,  -2, 0,  1,  -1,
    -3, -1, -1, 1,  0,  -3, 1,  0,  -1, 1,  0,  0,  -3, -3, -3, 0,  2,  1,  -1,
    2,  0,  1,  -3, -1, 2,  2,  1,  -2, 0,  -1, 0,  -2, -2, -1, 1,  0,  0,  0,
    -2, -2, -2, 1,  1,  -2, 1,  1,  -2, -2, 1,  -2, -1, -2, -3, 2,  -3, -1, 1,
    0,  -2, -2, -2, 1,  -2, -2, -1, -1, 2,  2,  2,  -1, 1,  -3, -3, 0,  2,  0,
    2,  1,  -3, -3, 1,  2,  2,  1,  -2, -3, 0,  -3, 0,  -3, -2, 0,  1,  1,  0,
    -3, 2,  -1, 2,  1,  0,  1,  -2, 1,  -1, -1, 2,  0,  -2, -3, 1,  1,  -2, -1,
    -3, -3, -1, 0,  -3, -2, 0,  0,  1,  0,  -3, -2, -1, 1,  0,  2,  1,  0,  -3,
    -2, -3, -3, -1, 0,  -2, 2,  -1, -3, 0,  -1, -1, 2,  0,  -3, -2, -1, 0,  0,
    1,  -2, 1,  2,  1,  2,  2,  -3, 2,  -1, 0,  0,  -1, 0,  2,  2,  -1, 2,  -2,
    1,  1,  -3, -3, 1,  -1, -1, -2, 2,  -2, -2, 2,  -1, -3, 2,  -3, 1,  -1, -1,
    -3, 1,  -1, 1,  0,  -3, -3, 1,  -3, -3, 0,  2,  2,  -2, -1, 2,  0,  2,  1,
    -1, -3, 0,  0,  -1, -1, 1,  0,  2,  0,  -3, 2,  1,  0,  1,  -3, 2,  -3, -3,
    -1, -3, -3, 2,  0,  2,  -2, 1,  -1,
  };

  float weights[] = {
    -2, 2,  -2, 2,  -1, -3, 2,  2,  0,  0,  -3, -1, -2, -3, 1,  -1, 0,  0,  0,
    2,  -2, 2,  -2, -3, 1,  1,  1,  -3, -1, 0,  1,  2,  -2, 0,  -1, -3, -1, -2,
    2,  -3, -3, 1,  -2, -3, 0,  2,  1,  -3, -3, -1, -3, -2, -1, -3, -1, -3, -2,
    -1, -3, -1, -2, -2, -3, 2,  0,  -3, 0,  -3, -3, 1,  -3, -1, 0,  -1, 1,  1,
    -1, 1,  -2, 0,  2,  0,  -3, 1,  -1, -1, 2,  0,  1,  -3, -3, 1,  2,  -3, -3,
    1,  -3, 2,  0,  -3, 1,  2,  2,  -2, -1, -2, 1,  1,  0,  -2, -2, 1,  2,  -1,
    -3, 1,  -2, 2,  -3, -2, -3, 2,  1,  0,  -2, 0,  1,  -3, 2,  -2, -2, 0,  2,
    -3, 2,  0,  0,  1,  -2, 1,  1,  -2, -1, -2, 1,  -2, 0,  -2, -2, 0,  -1, -1,
    -3, -3, -3, 1,  -3, -2, 2,  -1, 2,  0,  2,  -2, 2,  -2, 1,  -3, -3, -1, 0,
    2,  2,  1,  -1, -3, -1, -3, 2,  1,  -2, 0,  -3, -1, -3, -1, 2,  1,  0,  2,
    -1, 1,  0,  1,  2,  -1, -2, 2,  1,  -3, -1, -3, 0,  1,  -2, 0,  -2, -3, 0,
    -2, 2,  2,  0,  0,  2,  -3, 2,  -3, -2, 1,  2,  -3, -3, -1, -3, 0,  -3, -3,
    -2, -2, -2, 0,  0,  1,  0,  0,  -1, 0,  0,  -3, 0,  -3, -1, -2, 1,  -2, -1,
    2,  -2, 0,  0,  1,  0,  -2, -1, 0,  -3, 1,  0,  -1, -3, 1,  -1, 1,  -1, -3,
    1,  0,  1,  1,  -1, 2,  2,  0,  0,  1,  -3, 2,  -2, -2, -3, -2, -1, -2, 2,
    0,  2,  -2, -3, -1, -3, 2,  2,  -1, 2,  2,  -1, 0,  -3, 1,
  };

  float bias[] = {
    1, -1, 0, 1, 1, 1, -2,
  };

  float expected_same[] = {
    -1125, 2926,  6406,  631,   -1244, 97,    -1454, 2526,  1065,  3292,  3464,
    2553,  -330,  532,   1038,  1182,  -402,  3758,  3392,  9854,  4365,  1408,
    4736,  3134,  3838,  2409,  3221,  4350,  6750,  4045,  815,   1188,  2959,
    9802,  9590,  4572,  5740,  4253,  1701,  7974,  7012,  6854,  7093,  3907,
    4539,  3886,  4267,  3505,  465,   7824,  9219,  10026, 7968,  957,   2295,
    5594,  10811, 9641,  5950,  10043, 8783,  3132,  1421,  1110,  4108,  13929,
    10660, -84,   -61,   3932,  -180,  6811,  13393, 15147, 15640, 9337,  6961,
    3808,  1604,  1398,  1047,  6739,  10144, 6517,  4698,  2678,  7389,  2595,
    5248,  12075, 11272, 13951, 8820,  1090,  2199,  2206,  2788,  12116, 6683,
    2612,  -291,  3183,  9414,  12316, 14524, 12333, 13208, 7832,  4664,  4657,
    3534,  1298,  -666,  4250,  7707,  9103,  5760,  688,   9571,  15782, 14203,
    14878, 17339, 14684, 8690,  5671,  875,   1429,  1531,  6173,  2984,  5558,
    2996,  7928,  6733,  16117, 15262, 12757, 7980,  3923,  4795,  5973,  2051,
    455,   -1922, 1816,  5906,  3321,  10908, 10910, 7377,  12204, 12809, 11195,
    7451,  6666,  74,    -1645, -35,   -391,  3813,  7324,  892,   1656,  6095,
    12193, 14648, 12156, 14663, 10251, 10325, 7821,  3925,  323,   697,   442,
    1324,  4669,  7002,  5485,  5171,  5086,  10582, 11053, 9709,  11353, 8543,
    5256,  2873,  235,   -628,  1496,  1878,  -867,  3420,  6865,  5937,  10182,
    13277, 10069, 10789, 5998,  624,   -2082, 4417,  1258,  -1080, -819,  -1430,
    1033,  5220,  6335,  8471,  8980,  11908, 14430, 12584, 8404,  1576,  -803,
    985,   1481,  1367,  -193,  873,   3684,  2288,  6676,  9477,  11155, 9602,
    9707,  10507, 4739,  3174,  -575,  -178,  3002,  1710,  423,   -477,  554,
    3088,  2029,  5113,  5000,  3771,  6090,  5365,  1185,  2855,  399,   -312,
    -1577, 176,   955,
  };

  float expected_replicate[] = {
    13768, 13528, 12999, 6906,  4618,  4043,  2611,  9955,  6685,  4776,  2753,
    1036,  3063,  4544,  5183,  7349,  12451, 12501, 9131,  12753, 8908,  4058,
    6299,  7542,  7115,  3307,  3360,  3543,  9754,  7808,  5991,  9019,  14320,
    14919, 12492, 6871,  7373,  3336,  2085,  10604, 9377,  6882,  5009,  3103,
    6220,  6278,  7588,  10196, 11045, 11563, 11842, 11911, 8279,  2030,  1858,
    6368,  12123, 9909,  6347,  10345, 9365,  4038,  1673,  3051,  16492, 16649,
    12276, 408,   -301,  4122,  -654,  7864,  14038, 15279, 15315, 9744,  8243,
    5298,  746,   380,   9824,  9124,  10895, 6640,  4712,  2669,  6980,  2759,
    5385,  12345, 11336, 13129, 8600,  2370,  3682,  5219,  12407, 13123, 6784,
    2612,  -291,  3183,  9414,  12316, 14524, 12333, 13397, 7543,  3916,  4153,
    4477,  4314,  7983,  8418,  9163,  9103,  5760,  688,   9571,  15782, 14203,
    14878, 17718, 14570, 7940,  6642,  5094,  7133,  9964,  10219, 3224,  5558,
    2996,  7928,  6733,  16117, 15262, 12757, 7958,  4401,  5187,  5476,  5529,
    6055,  2206,  3909,  6015,  3321,  10908, 10910, 7377,  12204, 12809, 11195,
    6967,  6840,  481,   -1600, 274,   1,     10373, 8514,  1123,  2117,  6758,
    12736, 16223, 13585, 15988, 11771, 10600, 7918,  4156,  2840,  3111,  3287,
    6359,  7652,  8813,  6530,  6967,  7789,  13671, 13990, 13247, 13241, 9836,
    5251,  3024,  2313,  1834,  4187,  2637,  -1312, 2139,  7378,  7665,  11933,
    15591, 15314, 15678, 9531,  2820,  -1516, 3400,  1314,  22,    363,   -2896,
    -898,  5906,  7308,  10650, 12975, 16978, 20370, 18817, 12381, 4118,  -861,
    -137,  236,   1802,  1632,  -350,  2334,  3400,  8680,  14064, 18216, 18675,
    21765, 22871, 11491, 4937,  -1555, -11,   1669,  2392,  3265,  -5254, -217,
    5001,  8063,  13444, 18884, 19706, 22794, 21064, 9545,  6689,  -7,    289,
    -2021, 504,   2347,
  };

  float expected_valid[] = {
    2612,  -291,  3183,  9414,  12316, 14524, 12333, 9103,  5760,  688,
    9571,  15782, 14203, 14878, 5558,  2996,  7928,  6733,  16117, 15262,
    12757, 3321,  10908, 10910, 7377,  12204, 12809, 11195,
  };

  CNN_CONFIG cnn_config = { 3,
                            0,
                            0,
                            0,
                            0,
                            {
                                {
                                    1,
                                    filter_width,
                                    filter_height,
                                    3,
                                    1,
                                    1,
                                    0,
                                    nullptr,
                                    nullptr,
                                    PADDING_SAME_ZERO,
                                    NONE,
                                    0,
                                    0,
                                    BRANCH_NO_COPY,
                                    BRANCH_NOC,
                                    {},
                                    {},
                                    -1,
                                },
                                {
                                    3,
                                    filter_width,
                                    filter_height,
                                    3,
                                    1,
                                    1,
                                    0,
                                    nullptr,
                                    nullptr,
                                    PADDING_SAME_ZERO,
                                    NONE,
                                    0,
                                    0,
                                    BRANCH_NO_COPY,
                                    BRANCH_NOC,
                                    {},
                                    {},
                                    -1,
                                },
                                {
                                    3,
                                    filter_width,
                                    filter_height,
                                    1,
                                    1,
                                    1,
                                    0,
                                    nullptr,
                                    nullptr,
                                    PADDING_SAME_ZERO,
                                    NONE,
                                    0,
                                    0,
                                    BRANCH_NO_COPY,
                                    BRANCH_NOC,
                                    {},
                                    {},
                                    0,
                                },
                            } };

  // Weights and biases need to be specified separately because
  // of the offset.
  AssignLayerWeightsBiases(&cnn_config, weights, bias);

  CNN_THREAD_DATA thread_data = { 1, nullptr };

  RunCNNTest(image_width, image_height, input, expected_same, &cnn_config,
             image_width, &thread_data, MSE_INT_TOL);

  for (int i = 0; i < cnn_config.num_layers; ++i) {
    cnn_config.layer_config[i].pad = PADDING_SAME_REPLICATE;
  }

  RunCNNTest(image_width, image_height, input, expected_replicate, &cnn_config,
             image_width, &thread_data, MSE_INT_TOL);

  for (int i = 0; i < cnn_config.num_layers; ++i) {
    cnn_config.layer_config[i].pad = PADDING_VALID;
  }

  RunCNNTest(image_width, image_height, input, expected_valid, &cnn_config,
             image_width, &thread_data, MSE_INT_TOL);
}

TEST_F(CNNTest, TestRELUSingleLayer) {
  int image_width = 8;
  int image_height = 8;
  int filter_height = 5;
  int filter_width = 4;
  float input[] = {
    0, -2, -3, 1,  -1, 2,  -2, 1,  -3, -1, 0,  1,  -2, -3, -2, -2,
    1, -3, 2,  -3, -1, -1, 2,  0,  -2, -3, 0,  -2, -3, 1,  -1, -1,
    2, -2, 0,  -2, -3, -3, 1,  1,  -1, 1,  0,  1,  -3, 0,  2,  2,
    0, -3, 1,  -3, 2,  -2, 1,  -1, -1, -2, -3, -2, -1, -3, -2, -1,
  };
  float expected_same[] = {
    9,  0,  1,  1,  0,  3,  0,  19, 0,  12, 10, 0,  0,  0,  5, 0,
    0,  18, 21, 7,  19, 4,  3,  0,  0,  9,  16, 0,  11, 16, 0, 11,
    12, 2,  0,  11, 0,  16, 6,  0,  8,  22, 13, 10, 12, 0,  0, 0,
    0,  1,  2,  12, 29, 6,  10, 0,  13, 0,  0,  5,  8,  10, 0, 0,
  };
  float expected_replicate[] = {
    18, 17, 12, 2,  0,  0,  5,  11, 0,  17, 22, 6,  0,  0,  17, 0,
    0,  18, 21, 7,  19, 4,  3,  5,  3,  9,  16, 0,  11, 16, 0,  3,
    3,  2,  0,  11, 0,  16, 6,  0,  17, 22, 13, 10, 12, 0,  0,  0,
    0,  4,  1,  10, 30, 7,  10, 0,  23, 8,  0,  13, 15, 19, 8,  10,
  };
  float expected_valid[] = {
    18, 21, 7, 19, 4, 9, 16, 0, 11, 16, 2, 0, 11, 0, 16, 22, 13, 10, 12, 0,
  };
  float weights[] = {
    -2, -3, 1, 2, 2, -2, -3, 0, -3, 2, 2, -3, -3, -2, 0, 1, 2, 0, -1, -1,
  };
  float bias[] = { -3 };

  CNN_CONFIG cnn_config = { 1,
                            0,
                            0,
                            0,
                            0,
                            { {
                                1,
                                filter_width,
                                filter_height,
                                1,
                                1,
                                1,
                                0,
                                weights,
                                bias,
                                PADDING_SAME_ZERO,
                                RELU,
                                0,
                                0,
                                BRANCH_NO_COPY,
                                BRANCH_NOC,
                                {},
                                {},
                                0,
                            } } };

  CNN_THREAD_DATA thread_data = { 1, nullptr };

  RunCNNTest(image_width, image_height, input, expected_same, &cnn_config,
             image_width, &thread_data, MSE_INT_TOL);

  cnn_config.layer_config[0].pad = PADDING_SAME_REPLICATE;

  RunCNNTest(image_width, image_height, input, expected_replicate, &cnn_config,
             image_width, &thread_data, MSE_INT_TOL);

  cnn_config.layer_config[0].pad = PADDING_VALID;

  RunCNNTest(image_width, image_height, input, expected_valid, &cnn_config,
             image_width, &thread_data, MSE_INT_TOL);
}

TEST_F(CNNTest, TestVaryingStridesVaryingDimImages) {
  float weights[] = {
    1,  -5, -3, -4, -1, 1,  2,  -3, 2,  2,  -1, 1,  -5, 1,  1,
    -3, -5, 3,  1,  4,  -2, -5, -2, -3, -5, 0,  -1, -5, 2,  -2,
    -2, 1,  -2, -4, 1,  3,  -2, 2,  0,  -3, 2,  -3, -2, -3,
  };
  float bias[] = { 2 };

  CNN_CONFIG cnn_config = { 1,
                            0,
                            0,
                            0,
                            0,
                            {
                                {
                                    1,
                                    4,
                                    11,
                                    1,
                                    7,
                                    6,
                                    0,
                                    weights,
                                    bias,
                                    PADDING_SAME_ZERO,
                                    NONE,
                                    0,
                                    0,
                                    BRANCH_NO_COPY,
                                    BRANCH_NOC,
                                    {},
                                    {},
                                    0,
                                },
                            } };

  int image_height = 24;
  int image_width = 17;
  float input[] = {
    -1, -3, 4,  4,  -5, 4,  3,  -5, -1, -3, 4,  -4, 2,  -3, 3,  -5, 2,  -1, -5,
    1,  -1, 3,  1,  -3, -3, 4,  0,  2,  -3, -5, -5, -4, 0,  -5, -2, -3, -1, -2,
    2,  -5, 4,  4,  0,  -4, -3, 1,  -3, -5, -4, -4, 1,  -2, -3, 3,  -3, -3, -1,
    -5, -5, -2, 3,  1,  -1, -5, -5, 1,  -4, -2, -1, -2, -4, -4, 2,  -2, 2,  1,
    -2, -4, -1, 1,  -2, -5, 3,  -2, -1, -1, -5, -3, 1,  -2, -2, -3, -1, -2, -4,
    -2, 1,  -4, -1, 4,  3,  -4, 0,  4,  2,  2,  4,  -3, -5, 2,  2,  1,  -1, -4,
    -2, 1,  3,  2,  0,  4,  -1, -3, 2,  1,  -4, 2,  2,  -4, -2, 0,  -2, -1, 4,
    4,  2,  3,  -4, 2,  -4, -5, 4,  -1, -3, -1, 0,  -4, 1,  3,  -1, -3, -5, 3,
    -2, -4, 1,  2,  -2, -3, -3, -5, 1,  -3, -1, 0,  -1, 3,  -4, -1, -5, -5, 1,
    0,  0,  -2, -2, 2,  -2, 0,  0,  2,  0,  -3, 0,  -1, -4, -4, -1, 3,  -4, -4,
    -1, 0,  -5, -3, -2, 4,  -3, -4, -4, 0,  -5, 1,  -2, -3, -3, -4, 4,  3,  4,
    3,  3,  -1, 3,  1,  -3, -2, 3,  3,  0,  2,  -4, -3, 2,  2,  0,  -2, 4,  -2,
    2,  -2, -1, -4, -2, 2,  -4, 3,  -1, 4,  1,  1,  4,  -1, -4, -4, 1,  1,  -2,
    4,  -1, 3,  2,  -3, 4,  3,  1,  4,  0,  -4, 2,  0,  2,  4,  -2, -2, 4,  2,
    -1, -2, 1,  -3, 2,  3,  -5, -3, 4,  4,  2,  -5, -4, -5, -2, -4, 2,  0,  2,
    -5, 4,  -4, -2, -5, 2,  1,  0,  4,  1,  -2, -3, -4, -3, -4, 3,  3,  2,  0,
    -3, 1,  -5, 4,  0,  4,  -1, 3,  -5, -5, -2, -1, -1, 4,  3,  3,  4,  3,  -4,
    4,  -3, -3, -1, -4, -1, -4, -1, -2, 4,  -2, -4, 4,  4,  -3, -4, -1, 1,  2,
    -1, -2, -2, 3,  2,  2,  -3, 0,  -1, 0,  3,  2,  -5, 0,  -4, 0,  0,  2,  -4,
    -1, -1, 0,  -2, 0,  1,  0,  0,  4,  -5, -1, -5, 2,  -1, 0,  2,  -1, 1,  3,
    -3, -5, -2, -3, 4,  -2, -2, -1, -3, -4, -1, -2, -4, 1,  4,  -3, -2, -1, 3,
    -3, -2, 3,  2,  1,  -4, -3, -5, 1,
  };
  float expected_1[] = {
    41, -26, 5, 76, 13, 83, -21, 53, -54, -14, 21, 121,
  };

  CNN_THREAD_DATA thread_data = { 1, nullptr };

  RunCNNTest(image_width, image_height, input, expected_1, &cnn_config,
             image_width, &thread_data, MSE_INT_TOL);

  cnn_config.layer_config[0].skip_width = 6;
  cnn_config.layer_config[0].skip_height = 7;

  float expected_2[] = {
    21, -50, 41, 20, 72, 127, -21, 103, 62, -37, 83, -3,
  };
  RunCNNTest(image_width, image_height, input, expected_2, &cnn_config,
             image_width, &thread_data, MSE_INT_TOL);

  cnn_config.layer_config[0].skip_width = 3;
  cnn_config.layer_config[0].skip_height = 10;

  float expected_3[] = {
    -26, -21, -35, 69, 49,  4,  -51, -43, -56,
    -41, 15,  -44, 40, -62, 63, 38,  27,  47,
  };
  RunCNNTest(image_width, image_height, input, expected_3, &cnn_config,
             image_width, &thread_data, MSE_INT_TOL);

  cnn_config.layer_config[0].skip_width = 10;
  cnn_config.layer_config[0].skip_height = 3;

  float expected_4[] = {
    21, 49, 28, 87, 50, 40, 102, 81, 58, 85, 51, 66, 36, 19, -37, -45,
  };

  RunCNNTest(image_width, image_height, input, expected_4, &cnn_config,
             image_width, &thread_data, MSE_INT_TOL);
}

TEST_F(CNNTest, TestMaxPool) {
  int image_width = 8;
  int image_height = 8;
  int stride = 3;
  float input[] = {
    1,  -4, -4, 8, 0, 7, -5, -2, 8, 2, 2, 8,  5,  -1, -1, 9,
    -3, 0,  -2, 0, 6, 3, -4, 8,  7, 8, 7, -1, 4,  -1, 0,  2,
    -5, -2, 8,  5, 5, 4, 2,  7,  4, 6, 2, 8,  8,  -4, -3, -4,
    -3, -1, 2,  3, 3, 6, -5, 8,  9, 5, 0, -2, -1, 6,  5,  7,
  };

  float expected[] = {
    49, 58, 70, 68, 68, 70, 48, 57, 88,
  };

  float weights[] = {
    3, 1, 3, 4, -1, 5, -2, 1, -4,
  };

  float bias[] = {
    -3,
  };

  CNN_CONFIG cnn_config = { 1,
                            0,
                            0,
                            0,
                            0,
                            { {
                                1,
                                3,
                                3,
                                1,
                                stride,
                                stride,
                                1,
                                weights,
                                bias,
                                PADDING_SAME_ZERO,
                                NONE,
                                0,
                                0,
                                BRANCH_NO_COPY,
                                BRANCH_NOC,
                                {},
                                {},
                                0,
                            } } };

  CNN_THREAD_DATA thread_data = { 1, nullptr };

  RunCNNTest(image_width, image_height, input, expected, &cnn_config,
             image_width, &thread_data, MSE_INT_TOL);
}

TEST_F(CNNTest, TestDeconvolveNonActivationSingleLayerSingleKernel) {
  int image_width = 4;
  int image_height = 7;
  float input[] = {
    9,  6,   181, 9,  218, 30, 80,  108, 68,  216, 70, 128, 179, 228,
    33, 212, 34,  14, 48,  27, 230, 23,  202, 113, 80, 56,  122, 112,
  };

  float expected_1_same[] = {
    15,   -30,  36,   -525,  377, -193, 558, 531,  6,   -24,  -15,  124,
    166,  -561, -356, -754,  -3,  -3,   -3,  -3,   -3,  -3,   -3,   -3,
    433,  -311, 711,  381,   247, -317, 453, 129,  215, -627, -409, -885,
    17,   -255, -55,  -647,  -3,  -3,   -3,  -3,   -3,  -3,   -3,   -3,
    133,  -719, 633,  -225,  785, 191,  463, 79,   65,  9,    77,   -853,
    -365, -949, -15,  -667,  -3,  -3,   -3,  -3,   -3,  -3,   -3,   -3,
    355,  -866, 990,  207,   747, 12,   520, -116, 176, -312, -133, -1370,
    -426, -802, 143,  -771,  -3,  -3,   -3,  -3,   -3,  -3,   -3,   -3,
    65,   -79,  127,  -59,   135, -90,  195, 114,  31,  -91,  -57,  -133,
    17,   -176, -72,  -276,  -3,  -3,   -3,  -3,   -3,  -3,   -3,   -3,
    457,  -302, 733,  58,    470, -475, 829, 490,  227, -670, -440, -790,
    153,  -588, -294, -1150, -3,  -3,   -3,  -3,   -3,  -3,   -3,   -3,
    157,  -251, 349,  -185,  409, -293, 587, 251,  77,  -187, -107, -369,
    7,    -481, -135, -827,  -3,  -3,   -3,  -3,   -3,  -3,   -3,   -3,
  };
  float expected_1_valid[] = {
    -30,  15,   -30,  36,   -525,  377,  -193,  558,  531,  24,   24,   6,
    6,    -24,  -15,  124,  166,   -561, -356,  -754, -21,  -39,  -3,   -3,
    -3,   -3,   -3,   -3,   -3,    -3,   -3,    -3,   -3,   -657, 433,  -311,
    711,  381,  247,  -317, 453,   129,  321,   321,  215,  215,  -627, -409,
    -885, 17,   -255, -55,  -647,  -219, -435,  -3,   -3,   -3,   -3,   -3,
    -3,   -3,   -3,   -3,   -3,    -3,   -207,  133,  -719, 633,  -225, 785,
    191,  463,  79,   381,  381,   65,   65,    9,    77,   -853, -365, -949,
    -15,  -667, -259, -515, -3,    -3,   -3,    -3,   -3,   -3,   -3,   -3,
    -3,   -3,   -3,   -540, 355,   -866, 990,   207,  747,  12,   520,  -116,
    633,  633,  176,  176,  -312,  -133, -1370, -426, -802, 143,  -771, -427,
    -851, -3,   -3,   -3,   -3,    -3,   -3,    -3,   -3,   -3,   -3,   -3,
    -105, 65,   -79,  127,  -59,   135,  -90,   195,  114,  78,   78,   31,
    31,   -91,  -57,  -133, 17,    -176, -72,   -276, -57,  -111, -3,   -3,
    -3,   -3,   -3,   -3,   -3,    -3,   -3,    -3,   -3,   -693, 457,  -302,
    733,  58,   470,  -475, 829,   490,  336,   336,  227,  227,  -670, -440,
    -790, 153,  -588, -294, -1150, -229, -455,  -3,   -3,   -3,   -3,   -3,
    -3,   -3,   -3,   -3,   -3,    -3,   -243,  157,  -251, 349,  -185, 409,
    -293, 587,  251,  333,  333,   77,   77,    -187, -107, -369, 7,    -481,
    -135, -827, -227, -451,
  };
  float weights_1[] = { -3, 2, -1, 3, 3, 1, 1, -3, -2, -4 };
  float bias_1[] = { -3 };

  CNN_CONFIG cnn_config = { 1,
                            0,
                            0,
                            0,
                            0,
                            { {
                                1,
                                5,
                                2,
                                1,
                                2,
                                3,
                                0,
                                weights_1,
                                bias_1,
                                PADDING_SAME_ZERO,
                                NONE,
                                1,
                                0,
                                BRANCH_NO_COPY,
                                BRANCH_NOC,
                                {},
                                {},
                                0,
                            } } };

  CNN_THREAD_DATA thread_data = { 1, nullptr };

  RunCNNTest(image_width, image_height, input, expected_1_same, &cnn_config,
             image_width, &thread_data, MSE_INT_TOL);

  // Change padding to valid
  cnn_config.layer_config[0].pad = PADDING_VALID;

  RunCNNTest(image_width, image_height, input, expected_1_valid, &cnn_config,
             image_width, &thread_data, MSE_INT_TOL);

  float expected_12_same[] = {
    15,  -12,  6,    36,   -9,   -528, 377,  -184, 513,  558,  -12,  24,
    6,   -30,  -15,  -33,  -21,  166,  154,  -546, -356, -718, -30,  -21,
    433, -221, 561,  711,  -33,  -153, 247,  -83,  -87,  453,  -111, 321,
    215, -657, -409, -845, -93,  17,   -43,  -243, -55,  -215, -327, -219,
    133, -71,  -447, 633,  -219, 435,  785,  -73,  -177, 463,  -131, 381,
    65,  -207, 77,   -59,  -651, -365, -797, -213, -15,  -155, -387, -259,
    355, -182, -150, 990,  -231, 582,  747,  -36,  -540, 520,  -215, 633,
    176, -540, -133, -491, -687, -426, -882, -102, 143,  77,   -639, -427,
    65,  -37,  57,   127,  -17,  -105, 135,  -51,  60,   195,  -30,  78,
    31,  -105, -57,  -125, -45,  17,   -11,  -147, -72,  -168, -84,  -57,
    457, -233, 618,  733,  -26,  -540, 470,  -205, 264,  829,  -116, 336,
    227, -693, -440, -900, -72,  153,  107,  -609, -294, -698, -342, -229,
    157, -83,  69,   349,  -59,  -201, 409,  -125, 27,   587,  -115, 333,
    77,  -243, -107, -267, -171, 7,    -105, -369, -135, -379, -339, -227,
  };
  float expected_12_valid[] = {
    -30,  15,   -12,  6,    36,   -9,   -528, 377,  -184, 513,  558,  -12,
    24,   24,   6,    6,    -30,  -15,  -33,  -21,  166,  154,  -546, -356,
    -718, -30,  -21,  -39,  -657, 433,  -221, 561,  711,  -33,  -153, 247,
    -83,  -87,  453,  -111, 321,  321,  215,  215,  -657, -409, -845, -93,
    17,   -43,  -243, -55,  -215, -327, -219, -435, -207, 133,  -71,  -447,
    633,  -219, 435,  785,  -73,  -177, 463,  -131, 381,  381,  65,   65,
    -207, 77,   -59,  -651, -365, -797, -213, -15,  -155, -387, -259, -515,
    -540, 355,  -182, -150, 990,  -231, 582,  747,  -36,  -540, 520,  -215,
    633,  633,  176,  176,  -540, -133, -491, -687, -426, -882, -102, 143,
    77,   -639, -427, -851, -105, 65,   -37,  57,   127,  -17,  -105, 135,
    -51,  60,   195,  -30,  78,   78,   31,   31,   -105, -57,  -125, -45,
    17,   -11,  -147, -72,  -168, -84,  -57,  -111, -693, 457,  -233, 618,
    733,  -26,  -540, 470,  -205, 264,  829,  -116, 336,  336,  227,  227,
    -693, -440, -900, -72,  153,  107,  -609, -294, -698, -342, -229, -455,
    -243, 157,  -83,  69,   349,  -59,  -201, 409,  -125, 27,   587,  -115,
    333,  333,  77,   77,   -243, -107, -267, -171, 7,    -105, -369, -135,
    -379, -339, -227, -451,
  };

  // Change skip_width, skip_height to {2, 3}
  cnn_config.layer_config[0].skip_width = 3;
  cnn_config.layer_config[0].skip_height = 2;
  // Set padding to same
  cnn_config.layer_config[0].pad = PADDING_SAME_ZERO;

  RunCNNTest(image_width, image_height, input, expected_12_same, &cnn_config,
             image_width, &thread_data, MSE_INT_TOL);

  // Change padding to valid
  cnn_config.layer_config[0].pad = PADDING_VALID;
  RunCNNTest(image_width, image_height, input, expected_12_valid, &cnn_config,
             image_width, &thread_data, MSE_INT_TOL);

  cnn_config.layer_config[0].filter_width = 4;
  cnn_config.layer_config[0].filter_height = 3;
  float weights_2[] = { -1, -3, -1, -3, 0, 2, -2, 4, 3, 0, 1, 4 };
  float bias_2[] = { -4 };
  cnn_config.layer_config[0].weights = weights_2;
  cnn_config.layer_config[0].bias = bias_2;

  cnn_config.layer_config[0].skip_width = 5;
  cnn_config.layer_config[0].skip_height = 2;
  float expected_2_same[] = {
    -13,  -31,  -13,  -31,  -4,   -10,  -22,  -10,  -22,  -4,   -185, -547,
    -185, -547, -4,   -13,  -31,  -13,  -31,  -4,   -4,   14,   -22,  32,
    -4,   -4,   8,    -16,  20,   -4,   -4,   358,  -366, 720,  -4,   -4,
    14,   -22,  32,   -4,   -195, -658, -213, -622, -4,   -16,  -94,  -28,
    -70,  -4,   459,  -244, 97,   480,  -4,   -85,  -328, -103, -292, -4,
    -4,   432,  -440, 868,  -4,   -4,   56,   -64,  116,  -4,   -4,   156,
    -164, 316,  -4,   -4,   212,  -220, 428,  -4,   582,  -208, 146,  664,
    -4,   -130, -652, -190, -532, -4,   166,  -214, 6,    106,  -4,   192,
    -388, -24,  44,   -4,   -4,   132,  -140, 268,  -4,   -4,   428,  -436,
    860,  -4,   -4,   136,  -144, 276,  -4,   -4,   252,  -260, 508,  -4,
    21,   -541, -115, -269, -4,   416,  -688, -16,  176,  -4,   173,  -103,
    33,   177,  -4,   168,  -640, -88,  -128, -4,   -4,   354,  -362, 712,
    -4,   -4,   452,  -460, 908,  -4,   -4,   62,   -70,  128,  -4,   -4,
    420,  -428, 844,  -4,   499,  -106, 141,  610,  -4,   666,  -46,  210,
    866,  -4,   47,   -148, -19,  -16,  -4,   605,  -85,  181,  763,  -4,
    -4,   64,   -72,  132,  -4,   -4,   24,   -32,  52,   -4,   -4,   92,
    -100, 188,  -4,   -4,   50,   -58,  104,  -4,   -132, -694, -200, -558,
    -4,   15,   -73,  -13,  -17,  -4,   -62,  -610, -158, -418, -4,   -36,
    -343, -90,  -235, -4,   -4,   456,  -464, 916,  -4,   -4,   42,   -50,
    88,   -4,   -4,   400,  -408, 804,  -4,   -4,   222,  -230, 448,  -4,
    606,  -244, 146,  676,  -4,   9,    -172, -37,  -80,  -4,   480,  -370,
    76,   438,  -4,   223,  -340, -3,   112,  -4,   -4,   156,  -164, 316,
    -4,   -4,   108,  -116, 220,  -4,   -4,   240,  -248, 484,  -4,   -4,
    220,  -228, 444,  -4,
  };
  float expected_2_valid[] = {
    -13,  -31,  -13,  -31,  -4,   -10,  -22,  -10,  -22,  -4,   -185, -547,
    -185, -547, -4,   -13,  -31,  -13,  -31,  -4,   14,   -22,  32,   -4,
    -4,   8,    -16,  20,   -4,   -4,   358,  -366, 720,  -4,   -4,   14,
    -22,  32,   -195, -658, -213, -622, -4,   -16,  -94,  -28,  -70,  -4,
    459,  -244, 97,   480,  -4,   -85,  -328, -103, -292, -4,   432,  -440,
    868,  -4,   -4,   56,   -64,  116,  -4,   -4,   156,  -164, 316,  -4,
    -4,   212,  -220, 428,  582,  -208, 146,  664,  -4,   -130, -652, -190,
    -532, -4,   166,  -214, 6,    106,  -4,   192,  -388, -24,  44,   -4,
    132,  -140, 268,  -4,   -4,   428,  -436, 860,  -4,   -4,   136,  -144,
    276,  -4,   -4,   252,  -260, 508,  21,   -541, -115, -269, -4,   416,
    -688, -16,  176,  -4,   173,  -103, 33,   177,  -4,   168,  -640, -88,
    -128, -4,   354,  -362, 712,  -4,   -4,   452,  -460, 908,  -4,   -4,
    62,   -70,  128,  -4,   -4,   420,  -428, 844,  499,  -106, 141,  610,
    -4,   666,  -46,  210,  866,  -4,   47,   -148, -19,  -16,  -4,   605,
    -85,  181,  763,  -4,   64,   -72,  132,  -4,   -4,   24,   -32,  52,
    -4,   -4,   92,   -100, 188,  -4,   -4,   50,   -58,  104,  -132, -694,
    -200, -558, -4,   15,   -73,  -13,  -17,  -4,   -62,  -610, -158, -418,
    -4,   -36,  -343, -90,  -235, -4,   456,  -464, 916,  -4,   -4,   42,
    -50,  88,   -4,   -4,   400,  -408, 804,  -4,   -4,   222,  -230, 448,
    606,  -244, 146,  676,  -4,   9,    -172, -37,  -80,  -4,   480,  -370,
    76,   438,  -4,   223,  -340, -3,   112,  -4,   156,  -164, 316,  -4,
    -4,   108,  -116, 220,  -4,   -4,   240,  -248, 484,  -4,   -4,   220,
    -228, 444,  236,  -4,   76,   316,  -4,   164,  -4,   52,   220,  -4,
    362,  -4,   118,  484,  -4,   332,  -4,   108,  444,
  };
  // Set padding to same
  cnn_config.layer_config[0].pad = PADDING_SAME_ZERO;

  RunCNNTest(image_width, image_height, input, expected_2_same, &cnn_config,
             image_width, &thread_data, MSE_INT_TOL);

  cnn_config.layer_config[0].pad = PADDING_VALID;

  RunCNNTest(image_width, image_height, input, expected_2_valid, &cnn_config,
             image_width, &thread_data, MSE_INT_TOL);

  cnn_config.layer_config[0].skip_width = 2;
  cnn_config.layer_config[0].skip_height = 5;
  float expected_21_same[] = {
    -31,  -19,  -49,   -191, -565, -194, -574, -13,  14,   -22,  44,   -16,
    382,  -366, 738,   -22,  -4,   23,   32,   545,  20,   204,  720,  5,
    -4,   -4,   -4,    -4,   -4,   -4,   -4,   -4,   -4,   -4,   -4,   -4,
    -4,   -4,   -4,    -4,   -658, -252, -748, -114, -334, -192, -568, -112,
    432,  -440, 928,   -64,  276,  -164, 532,  -220, -4,   304,  868,  266,
    116,  400,  316,   104,  -4,   -4,   -4,   -4,   -4,   -4,   -4,   -4,
    -4,   -4,   -4,    -4,   -4,   -4,   -4,   -4,   -208, -288, -856, -290,
    -862, -202, -598,  -132, 132,  -140, 700,  -436, 1000, -144, 532,  -260,
    -4,   712,  268,   422,  860,  450,  276,  124,  -4,   -4,   -4,   -4,
    -4,   -4,   -4,    -4,   -4,   -4,   -4,   -4,   -4,   -4,   -4,   -4,
    -541, -411, -1225, -265, -787, -249, -739, -216, 354,  -362, 1168, -460,
    974,  -70,  552,   -428, -4,   859,  712,  323,  908,  665,  128,  208,
    -4,   -4,   -4,    -4,   -4,   -4,   -4,   -4,   -4,   -4,   -4,   -4,
    -4,   -4,   -4,    -4,   -106, -52,  -148, -66,  -190, -79,  -229, -31,
    64,   -72,  160,   -32,  148,  -100, 242,  -58,  -4,   72,   132,  154,
    52,   125,  188,   23,   -4,   -4,   -4,   -4,   -4,   -4,   -4,   -4,
    -4,   -4,   -4,    -4,   -4,   -4,   -4,   -4,   -694, -257, -763, -229,
    -679, -319, -949,  -117, 456,  -464, 962,  -50,  492,  -408, 1030, -230,
    -4,   295,  916,   625,  88,   537,  804,  109,  -4,   -4,   -4,   -4,
    -4,   -4,   -4,    -4,   -4,   -4,   -4,   -4,   -4,   -4,   -4,   -4,
    -244, -140, -412,  -182, -538, -238, -706, -116, 156,  -164, 428,  -116,
    464,  -248, 708,   -228, -4,   244,  316,  418,  220,  454,  484,  108,
    -4,   -4,   -4,    -4,   -4,   -4,   -4,   -4,   -4,   -4,   -4,   -4,
    -4,   -4,   -4,    -4,
  };
  float expected_21_valid[] = {
    -13,  -31,  -19,  -49,  -191, -565, -194, -574, -13,  -31,   -4,   14,
    -22,  44,   -16,  382,  -366, 738,  -22,  32,   23,   -4,    23,   32,
    545,  20,   204,  720,  5,    32,   -4,   -4,   -4,   -4,    -4,   -4,
    -4,   -4,   -4,   -4,   -4,   -4,   -4,   -4,   -4,   -4,    -4,   -4,
    -4,   -4,   -222, -658, -252, -748, -114, -334, -192, -568,  -112, -328,
    -4,   432,  -440, 928,  -64,  276,  -164, 532,  -220, 428,   650,  -4,
    304,  868,  266,  116,  400,  316,  104,  428,  -4,   -4,    -4,   -4,
    -4,   -4,   -4,   -4,   -4,   -4,   -4,   -4,   -4,   -4,    -4,   -4,
    -4,   -4,   -4,   -4,   -72,  -208, -288, -856, -290, -862,  -202, -598,
    -132, -388, -4,   132,  -140, 700,  -436, 1000, -144, 532,   -260, 508,
    200,  -4,   712,  268,  422,  860,  450,  276,  124,  508,   -4,   -4,
    -4,   -4,   -4,   -4,   -4,   -4,   -4,   -4,   -4,   -4,    -4,   -4,
    -4,   -4,   -4,   -4,   -4,   -4,   -183, -541, -411, -1225, -265, -787,
    -249, -739, -216, -640, -4,   354,  -362, 1168, -460, 974,   -70,  552,
    -428, 844,  533,  -4,   859,  712,  323,  908,  665,  128,   208,  844,
    -4,   -4,   -4,   -4,   -4,   -4,   -4,   -4,   -4,   -4,    -4,   -4,
    -4,   -4,   -4,   -4,   -4,   -4,   -4,   -4,   -38,  -106,  -52,  -148,
    -66,  -190, -79,  -229, -31,  -85,  -4,   64,   -72,  160,   -32,  148,
    -100, 242,  -58,  104,  98,   -4,   72,   132,  154,  52,    125,  188,
    23,   104,  -4,   -4,   -4,   -4,   -4,   -4,   -4,   -4,    -4,   -4,
    -4,   -4,   -4,   -4,   -4,   -4,   -4,   -4,   -4,   -4,    -234, -694,
    -257, -763, -229, -679, -319, -949, -117, -343, -4,   456,   -464, 962,
    -50,  492,  -408, 1030, -230, 448,  686,  -4,   295,  916,   625,  88,
    537,  804,  109,  448,  -4,   -4,   -4,   -4,   -4,   -4,    -4,   -4,
    -4,   -4,   -4,   -4,   -4,   -4,   -4,   -4,   -4,   -4,    -4,   -4,
    -84,  -244, -140, -412, -182, -538, -238, -706, -116, -340,  -4,   156,
    -164, 428,  -116, 464,  -248, 708,  -228, 444,  236,  -4,    244,  316,
    418,  220,  454,  484,  108,  444,
  };

  cnn_config.layer_config[0].pad = PADDING_SAME_ZERO;

  RunCNNTest(image_width, image_height, input, expected_21_same, &cnn_config,
             image_width, &thread_data, MSE_INT_TOL);

  cnn_config.layer_config[0].pad = PADDING_VALID;

  RunCNNTest(image_width, image_height, input, expected_21_valid, &cnn_config,
             image_width, &thread_data, MSE_INT_TOL);
}

TEST_F(CNNTest, TestLargeKernelsAndStrides) {
  float input_10x11[] = {
    4,  4,  2,  4,  2,  -5, -2, 3, -1, 0,  0,  1,  2,  0,  -5, -2, -5, 1,  -3,
    -1, 4,  -3, 2,  -2, 1,  0,  1, -3, -3, -4, -2, -2, 1,  -4, -1, 4,  1,  -4,
    -4, -4, 3,  2,  -5, 3,  -5, 1, 2,  -4, 1,  -1, 3,  4,  -2, 3,  -3, 3,  0,
    2,  -4, -5, -5, -2, -1, -2, 1, 1,  1,  -2, 4,  -5, 4,  -1, -1, 2,  3,  -4,
    2,  2,  3,  0,  0,  1,  0,  3, 2,  3,  1,  -2, 3,  -4, 3,  2,  4,  -2, 0,
    4,  -4, 1,  -3, -3, -3, -5, 1, -3, -5, 0,  4,  -1, -3, 2,
  };

  float weights_10x11[] = {
    -3, 4,  -4, -3, -5, 1,  -2, 3,  1,  -4, -4, 0,  -1, 0,  3,  1,  -3, -2, 0,
    -1, 1,  3,  -4, -4, -3, -3, -2, 4,  3,  -5, 4,  2,  -3, 4,  -2, -1, 2,  -1,
    -5, 0,  -3, 0,  3,  -5, -5, 3,  -4, -1, -5, 3,  4,  0,  4,  -5, 2,  -1, 2,
    -1, -1, -1, -5, 0,  -4, 3,  -1, 1,  1,  -1, 3,  2,  -5, -4, 0,  -4, 4,  -5,
    -3, 4,  -5, 2,  -5, -4, -4, -1, 3,  3,  0,  2,  -4, 1,  -2, 1,  1,  0,  3,
    -2, 0,  1,  2,  4,  -3, -1, -5, -5, 2,  -4, 1,  1,  2,  -4, -2, -2, 2,  1,
    3,  4,  -5, 1,  -1, -3, -3, -1, -2, -5, 1,  -1, 0,  1,  4,  4,  0,  0,  4,
    -3, -1, -5, -3, 0,  1,  1,  1,  -5, 3,  4,  3,  -5, 3,  -2, -2, 0,  -4, 0,
    0,  -2, 1,  -4, -1, 0,  -5, -2, -2, -5, -3, -3, 1,  1,  -3, 2,  4,  2,  4,
    -4, -3, 3,  1,  1,  3,  -4, 4,  -2, -3, -3, -3, -3, -4, -2, 3,  -5, 2,  4,
    -1, -4, -4, 4,  -2, -1, 3,  -3, -4, -4, -2, 4,  1,  0,  2,  -1, 4,  -3, 1,
    4,  -3, 4,  4,  0,  -4, 3,  -2, -3, 2,  3,  -1, -3, 2,  1,  4,  -2, -3, 1,
    4,  -2, 2,  -2, -5, -2, 1,  4,  -1, -4, 4,  -5, 2,  -5, -4, -1, -2, 3,  1,
    2,  1,  -5, 1,  -5, -4, -1, -2, 2,  -2, -4, -3, -2, -2, 4,  -1, 2,  2,  -4,
    2,  -2, 4,  -4, -2, -2, 1,  -1, 1,  1,  1,  -4, -5, -2, 3,  -4, -1, 3,  -2,
    3,  2,  -5, -4, 0,  3,  -2, -4, -5, 3,  -2, -4, 2,  -2, 1,  -4, 0,  2,  -5,
    1,  -4, -1, -1, 4,  -5, -4, 0,  -5, -4, -3, -5, -4, 0,  2,  0,  -4, 2,  -2,
    1,  1,  -3, 2,  0,  -4, 0,  -4, 1,  0,  -5, -1, -1, -1, -5, 4,  2,  2,  -4,
    3,  -2, -2, 2,  -3, -2, -1, 2,  -4, -5, 2,  -2, -4, -5, -5, -1, 2,  -1, 0,
    -5, -2, -2, -5, 0,  1,  -1, -5, 0,  3,  2,  3,  0,  -3, -2, 0,  -5, -1, -2,
    2,  -4, -1, 2,  2,  -5, 2,  -4, 0,  3,  -3, 1,  0,  0,  1,  -5, -3, 1,  -1,
    0,  -4, -3, 2,  -4, -4, 4,  -1, 0,  1,  2,  -4, -5, 4,  -2, 1,  -4, -4, -3,
    -1, -1, 1,  -1, -4, -1, -4, -3, 2,  -1, -2, -4, 1,  1,  0,  -2, 0,  -4, 3,
    -3, 0,  -4, -1, -4, 2,  -1, -2, -5, -1, -2, -3, 3,  -1, 0,  -3, 0,  1,  -5,
    1,  -5, 0,  1,
  };

  float bias_10x11[] = { 3 };

  float expected_10x11[] = {
    118,
  };

  CNN_CONFIG cnn_config = { 1,
                            0,
                            0,
                            0,
                            0,
                            { {
                                1,
                                23,
                                20,
                                1,
                                15,
                                20,
                                0,
                                weights_10x11,
                                bias_10x11,
                                PADDING_SAME_ZERO,
                                NONE,
                                0,
                                0,
                                BRANCH_NO_COPY,
                                BRANCH_NOC,
                                {},
                                {},
                                0,
                            } } };

  int image_height = 10;
  int image_width = 11;

  CNN_THREAD_DATA thread_data = { 1, nullptr };

  RunCNNTest(image_width, image_height, input_10x11, expected_10x11,
             &cnn_config, image_width, &thread_data, MSE_INT_TOL);

  float input_11x10[] = {
    -2, -2, 3,  -5, -1, -3, 1,  3,  2,  1,  1,  -5, 4,  1,  3,  -5, 3,  -3, -5,
    0,  -1, -3, -3, 1,  1,  -5, -1, -5, -5, -3, 0,  1,  -3, -1, -3, -3, 0,  3,
    4,  -4, -1, 3,  -3, -1, -3, 1,  -3, -2, -1, -4, -3, 2,  -4, 1,  -4, -1, -3,
    -5, -1, 2,  3,  0,  2,  2,  -5, 4,  1,  2,  -1, -4, 4,  -4, -4, 0,  -1, 1,
    -1, 1,  -3, -3, -2, 1,  2,  4,  4,  4,  -3, -3, 0,  1,  0,  1,  4,  1,  3,
    4,  -3, -2, -4, 4,  2,  0,  3,  4,  -1, 2,  -2, 1,  -3, -2,
  };

  float weights_11x10[] = {
    4,  -1, 1,  -1, 2,  4,  3,  3,  -4, 3,  -5, 1,  -1, -1, -2, -2, 0,  2,  -3,
    -2, 3,  -5, -1, 0,  -1, -2, -2, -1, 2,  4,  3,  1,  0,  0,  -3, 3,  -4, -1,
    -5, 4,  -2, -2, 1,  2,  -1, -3, 1,  2,  -5, 1,  -3, 3,  3,  0,  -4, -4, -5,
    -3, -4, -4, 4,  -2, 4,  4,  -2, 2,  -5, -1, -2, -5, -1, 4,  -3, 3,  -2, 0,
    -4, -3, 0,  -1, -2, 4,  2,  0,  -2, -5, -4, 1,  4,  -4, -2, 2,  -2, 1,  1,
    -4, 1,  -4, -4, -2, 4,  2,  -1, -5, -5, 1,  -3, -3, 3,  -3, -5, -3, 4,  -1,
    -1, -3, 0,  -4, 3,  -1, 0,  -2, 0,  -5, -2, -5, 2,  0,  -5, 2,  3,  -2, 2,
    4,  -1, 1,  -3, 2,  3,  2,  0,  -5, -4, -5, 2,  1,  1,  -1, -2, 3,  4,  2,
    -2, 4,  -2, 3,  1,  -4, -3, -1, 4,  4,  -3, -5, -2, 2,  0,  3,  -2, 3,  -1,
    -4, 0,  -2, 0,  3,  4,  -2, -3, -2, 0,  3,  4,  2,  -4, 0,  1,  2,  2,  -1,
    -1, 4,  1,  4,  -2, -1, -1, -5, 1,  -3, 3,  3,  -1, -4, 3,  -5, 0,  0,  -1,
    -4, -1, -2, 4,  -2, 3,  3,  -3, 1,  -1, 2,  -1, 4,  4,  -2, -2, 4,  -2, 0,
    3,  -3, -5, -1, -2, 4,  -4, 2,  -4, 0,  -2, 3,  -3, 2,  2,  -2, -5, -1, 4,
    3,  -2, -1, 3,  3,  -1, 3,  0,  -3, 0,  4,  2,  0,  -1, 4,  1,  1,  2,  1,
    3,  1,  1,  1,  -3, -5, -4, 4,  -4, 2,  0,  0,  -4, 1,  4,  -5, 4,  4,  0,
    1,  0,  -2, -4, -4, -3, 0,  1,  -5, 4,  0,  -3, -2, -4, 2,  4,  1,  -5, 1,
    -4, 1,  0,  -3, -3, 0,  2,  -5, 4,  3,  -2, -5, 3,  1,  -1, 0,  3,  -2, -2,
    3,  -2, -5, 4,  1,  -2, 2,  -1, 0,  4,  0,  -5, 3,  -2, 1,  2,  1,  -5, -3,
    -2, -5, 4,  -4, 0,  3,  2,  -1, -4, -1, 2,  1,  -2, 3,  -1, -4, 2,  0,  -3,
    1,  -1, 2,  -5, -4, -1, -5, 1,  4,  3,  4,  2,  -3, 1,  -5, -1, 3,  0,  -1,
    -4, 3,  4,  -5, 4,  4,  -3, 2,  -3, -1, -3, -5, -3, 2,  -3, -2, 1,  1,  0,
    -5, 3,  2,  1,  -5, 1,  1,  1,  3,  4,  -4, -1, -2, 0,  -5, -3, -5, -2, -4,
    3,  3,  3,  4,  0,  -4, -1, -5, 0,  -3, 1,  4,  4,  -4, 4,  -5, -5, -1, -2,
    -5, 3,  -4, 4,  3,  0,  -3, 2,  -2, 0,  0,  4,  4,  0,  -2, 1,  -1, -3, 2,
    -1, 1,  -3, -5,
  };

  float bias_11x10[] = {
    -5,
  };

  float expected_11x10[] = {
    36,  -84,  95,   45,  18,   46,   77,  -54, -99,  -149, 66,  49,  161, 11,
    39,  61,   -66,  61,  4,    -3,   34,  -44, -23,  31,   64,  29,  47,  72,
    -27, -27,  121,  -3,  100,  1,    30,  -78, -12,  -89,  -59, 8,   -16, 112,
    91,  -102, -26,  -4,  30,   54,   4,   -84, -24,  -58,  27,  -53, -33, 5,
    53,  -26,  63,   50,  -103, -130, -23, 6,   -104, -207, 73,  23,  77,  132,
    38,  32,   -130, -44, -60,  7,    27,  176, 45,   -32,  -2,  99,  -97, 63,
    69,  126,  47,   63,  136,  -57,  5,   16,  -40,  -157, 8,   38,  -44, -10,
    91,  7,    122,  140, 30,   -105, 4,   -1,  113,  64,   180, 141,
  };

  cnn_config.layer_config[0].weights = weights_11x10;
  cnn_config.layer_config[0].bias = bias_11x10;
  cnn_config.layer_config[0].filter_width = 20;
  cnn_config.layer_config[0].filter_height = 23;
  cnn_config.layer_config[0].skip_width = 1;
  cnn_config.layer_config[0].skip_height = 1;
  image_height = 11;
  image_width = 10;

  RunCNNTest(image_width, image_height, input_11x10, expected_11x10,
             &cnn_config, image_width, &thread_data, MSE_INT_TOL);
}

TEST_F(CNNTest, TestSoftsignSingleLayer) {
  int image_width = 8;
  int image_height = 8;
  int filter_height = 5;
  int filter_width = 4;
  float input[] = {
    -0.5220f, 0.8410f,  -0.8990f, -0.0090f, 0.6710f,  -0.9470f, -0.8240f,
    -0.0870f, 0.5380f,  0.4750f,  0.570f,   -0.3760f, -0.6960f, -0.5940f,
    -0.3830f, 0.080f,   -0.0980f, -0.4940f, -0.4030f, 0.9460f,  -0.6020f,
    0.4220f,  0.6190f,  0.6640f,  -0.9210f, -0.1470f, -0.2480f, -0.1120f,
    -0.580f,  -0.0650f, 0.3330f,  0.9860f,  -0.7430f, 0.7610f,  0.4840f,
    0.1030f,  0.9570f,  0.6120f,  -0.5240f, -0.1220f, -0.5850f, -0.270f,
    0.7840f,  -0.9790f, 0.7290f,  -0.30f,   -0.6460f, 0.0780f,  0.4750f,
    -0.0510f, 0.4550f,  0.3850f,  -0.7230f, 0.4460f,  -0.6260f, -0.810f,
    0.8720f,  -0.2120f, -0.580f,  -0.9510f, -0.8430f, -0.1340f, -0.0850f,
    0.9190f,
  };
  float expected_same[] = {
    0.430f,   0.660f,  0.5510f,  -0.610f,  0.450f,  -0.1610f, 0.0520f,  0.3240f,
    0.6820f,  0.3820f, 0.6360f,  0.7480f,  0.3080f, 0.090f,   0.3910f,  0.1730f,
    0.340f,   0.6660f, -0.4990f, 0.4280f,  0.1540f, 0.120f,   0.4670f,  0.6150f,
    -0.3880f, 0.7590f, 0.4190f,  0.7350f,  0.5310f, -0.5160f, -0.1760f, 0.6790f,
    -0.6780f, 0.5470f, 0.5750f,  -0.6420f, 0.7210f, -0.4620f, 0.5430f,  0.770f,
    -0.1990f, 0.3950f, 0.7860f,  -0.4380f, 0.7540f, 0.2640f,  -0.6430f, 0.4510f,
    -0.1260f, 0.1590f, -0.2110f, -0.0560f, 0.6570f, 0.680f,   0.5870f,  0.4720f,
    0.4040f,  0.3630f, 0.670f,   0.2360f,  0.410f,  0.6980f,  -0.5350f, 0.3940f,
  };
  float expected_replicate[] = {
    0.540f,   0.7230f,  -0.3530f, -0.2130f, 0.7440f,  -0.4470f, -0.6260f,
    -0.2050f, 0.7230f,  0.4630f,  0.5920f,  0.7440f,  0.6080f,  0.3130f,
    -0.5670f, -0.4720f, 0.5480f,  0.6660f,  -0.4990f, 0.4280f,  0.1540f,
    0.120f,   0.3390f,  0.6090f,  0.4160f,  0.7590f,  0.4190f,  0.7350f,
    0.5310f,  -0.5160f, -0.490f,  0.4450f,  -0.610f,  0.5470f,  0.5750f,
    -0.6420f, 0.7210f,  -0.4620f, 0.3150f,  0.7370f,  -0.5820f, 0.3950f,
    0.7860f,  -0.4380f, 0.7540f,  0.2640f,  -0.7430f, -0.5340f, -0.6270f,
    0.4430f,  0.4730f,  0.4570f,  0.7450f,  0.630f,   0.2620f,  0.3140f,
    -0.1840f, 0.1810f,  0.7210f,  0.2760f,  0.6430f,  0.6720f,  -0.4390f,
    0.2040f,
  };
  float expected_valid[] = {
    0.6660f,  -0.4990f, 0.4280f,  0.1540f,  0.120f,  0.7590f,  0.4190f,
    0.7350f,  0.5310f,  -0.5160f, 0.5470f,  0.5750f, -0.6420f, 0.7210f,
    -0.4620f, 0.3950f,  0.7860f,  -0.4380f, 0.7540f, 0.2640f,
  };
  float weights[] = {
    0.6210f,  0.3710f,  -0.2770f, -0.7230f, -0.2450f, 0.6770f,  0.3080f,
    -0.9880f, -0.080f,  0.7190f,  -0.6760f, -0.0170f, -0.8970f, 0.8260f,
    0.7390f,  -0.4550f, -0.4260f, -0.6330f, 0.0880f,  -0.9390f,
  };
  float bias[] = {
    0.750f,
  };

  CNN_CONFIG cnn_config = { 1,
                            0,
                            0,
                            0,
                            0,
                            { {
                                1,
                                filter_width,
                                filter_height,
                                1,
                                1,
                                1,
                                0,
                                weights,
                                bias,
                                PADDING_SAME_ZERO,
                                SOFTSIGN,
                                0,
                                0,
                                BRANCH_NO_COPY,
                                BRANCH_NOC,
                                {},
                                {},
                                0,
                            } } };

  CNN_THREAD_DATA thread_data = { 1, nullptr };

  RunCNNTest(image_width, image_height, input, expected_same, &cnn_config,
             image_width, &thread_data, MSE_FLOAT_TOL);

  cnn_config.layer_config[0].pad = PADDING_SAME_REPLICATE;

  RunCNNTest(image_width, image_height, input, expected_replicate, &cnn_config,
             image_width, &thread_data, MSE_FLOAT_TOL);

  cnn_config.layer_config[0].pad = PADDING_VALID;

  RunCNNTest(image_width, image_height, input, expected_valid, &cnn_config,
             image_width, &thread_data, MSE_FLOAT_TOL);
}

TEST_F(CNNTest, TestBranchTensorAdd) {
  int filter_width = 2;
  int filter_height = 3;

  int image_width = 4;
  int image_height = 4;

  float input[] = {
    -3, -2, -2, 0, -1, 3, 2, -2, 1, 3, 4, 0, 2, -5, -4, 0,
  };

  float weights[] = {
    -3, -1, 4,  -1, -3, 3,  3,  0,  2,  0,  3,  2,  4,  4, 4,  -5, 1, -4,
    2,  -4, 1,  -3, 0,  4,  -5, 4,  0,  -4, -3, -1, 0,  0, -2, 0,  0, 2,
    -5, -1, 1,  -3, 3,  4,  3,  0,  1,  -1, 1,  1,  2,  4, -2, -5, 2, -2,
    3,  -2, 4,  -1, 0,  2,  3,  2,  -2, -1, -3, 1,  3,  4, -1, -3, 0, -4,
    4,  2,  -3, -3, -1, 0,  1,  0,  3,  3,  -3, 0,  3,  2, -5, -3, 4, -5,
    3,  -1, -1, -3, 0,  1,  -1, -4, 2,  4,  -1, 4,  -1, 1, 3,  4,  4, 4,
    0,  -1, -3, -3, -3, -3, 2,  -3, -2, 2,  3,  -3,
  };

  float bias[] = {
    3, 4, -1, -1, 2, 1, -2, 1, 4, 1, 3,
  };

  float expected[] = {
    -11502, -4101, -3424, 668,   -17950, -5470, -5504, 626,
    4835,   446,   1779,  -3483, 3679,   -4214, 4578,  -105,
  };

  int channels = 2;

  CNN_CONFIG cnn_config = { 6,
                            0,
                            0,
                            0,
                            0,
                            { {
                                  1,
                                  filter_width,
                                  filter_height,
                                  channels,
                                  1,
                                  1,
                                  0,
                                  weights,
                                  bias,
                                  PADDING_SAME_ZERO,
                                  NONE,
                                  0,
                                  0,
                                  BRANCH_NO_COPY,
                                  BRANCH_NOC,
                                  {},
                                  {},
                                  -1,
                              },
                              {
                                  channels,
                                  filter_width,
                                  filter_height,
                                  channels,
                                  1,
                                  1,
                                  0,
                                  nullptr,
                                  nullptr,
                                  PADDING_SAME_ZERO,
                                  NONE,
                                  0,
                                  0,
                                  BRANCH_INPUT,
                                  BRANCH_NOC,
                                  {
                                      0x02,
                                      0,
                                      0x00,
                                  },
                                  {},
                                  -1,
                              },
                              {
                                  channels,
                                  filter_width,
                                  filter_height,
                                  channels,
                                  1,
                                  1,
                                  0,
                                  nullptr,
                                  nullptr,
                                  PADDING_SAME_ZERO,
                                  NONE,
                                  0,
                                  1,
                                  BRANCH_NO_COPY,
                                  BRANCH_NOC,
                                  {},
                                  {},
                                  -1,
                              },
                              {
                                  channels,
                                  filter_width,
                                  filter_height,
                                  channels,
                                  1,
                                  1,
                                  0,
                                  nullptr,
                                  nullptr,
                                  PADDING_SAME_ZERO,
                                  NONE,
                                  0,
                                  1,
                                  BRANCH_NO_COPY,
                                  BRANCH_NOC,
                                  {},
                                  {},
                                  -1,
                              },
                              {
                                  channels,
                                  filter_width,
                                  filter_height,
                                  channels,
                                  1,
                                  1,
                                  0,
                                  nullptr,
                                  nullptr,
                                  PADDING_SAME_ZERO,
                                  NONE,
                                  0,
                                  0,
                                  BRANCH_NO_COPY,
                                  BRANCH_ADD,
                                  {
                                      0x00,
                                      0,
                                      0x02,
                                  },
                                  {},
                                  -1,
                              },
                              {
                                  channels,
                                  filter_width,
                                  filter_height,
                                  1,
                                  1,
                                  1,
                                  0,
                                  nullptr,
                                  nullptr,
                                  PADDING_SAME_ZERO,
                                  NONE,
                                  0,
                                  0,
                                  BRANCH_NO_COPY,
                                  BRANCH_NOC,
                                  {},
                                  {},
                                  0,
                              } } };

  // Weights and biases need to be specified separately because
  // of the offset.
  AssignLayerWeightsBiases(&cnn_config, weights, bias);

  CNN_THREAD_DATA thread_data = { 1, nullptr };

  RunCNNTest(image_width, image_height, input, expected, &cnn_config,
             image_width, &thread_data, MSE_INT_TOL);
}

TEST_F(CNNTest, TestBranchTensorConcatenation) {
  int filter_width = 2;
  int filter_height = 3;

  int image_width = 4;
  int image_height = 4;

  float input[] = {
    -3, -2, -2, 0, -1, 3, 2, -2, 1, 3, 4, 0, 2, -5, -4, 0,
  };

  float weights[] = {
    3,  0,  2,  0,  2,  3,  1,  -3, 1,  -5, -3, 0,  -4, 4,  0,  -5, 0,  -5, -1,
    -2, -5, 0,  -3, 2,  -4, 2,  0,  2,  -1, 0,  -4, 3,  0,  0,  -1, -5, 2,  -1,
    4,  -4, -2, -3, -3, 3,  4,  -2, -1, -4, -1, 4,  4,  -1, 4,  3,  -4, 2,  -2,
    -4, -3, -2, 3,  -3, -5, -1, 3,  -2, 4,  1,  -4, -3, -5, -5, -3, 4,  -2, -2,
    -1, -5, -5, 0,  -1, -2, -3, 3,  -4, -5, 2,  -3, 1,  0,  -5, 2,  2,  -2, 0,
    2,  2,  -2, 4,  2,  2,  0,  1,  -5, -3, 0,  2,  -2, 1,  2,  -5, 2,  3,  3,
    -1, 3,  0,  -3, 3,  -4, -4, 3,  3,  -4, -2, 2,  -2, 2,  -2, -1, 3,  0,
  };

  float bias[] = {
    -3, -5, 4, -4, -3, -2, 0, 3, -4, 4, -3,
  };

  float expected[] = {
    -33533, -32087, -6741,  -2124, 39979, 41453, 14034, 689,
    -22611, -42203, -14882, -239,  15781, 15963, 9524,  837,
  };

  int channels = 2;

  CNN_CONFIG cnn_config = { 6,
                            0,
                            0,
                            0,
                            0,
                            { {
                                  1,
                                  filter_width,
                                  filter_height,
                                  channels,
                                  1,
                                  1,
                                  0,
                                  weights,
                                  bias,
                                  PADDING_SAME_ZERO,
                                  NONE,
                                  0,
                                  0,
                                  BRANCH_NO_COPY,
                                  BRANCH_NOC,
                                  {},
                                  {},
                                  -1,
                              },
                              {
                                  channels,
                                  filter_width,
                                  filter_height,
                                  channels,
                                  1,
                                  1,
                                  0,
                                  nullptr,
                                  nullptr,
                                  PADDING_SAME_ZERO,
                                  NONE,
                                  0,
                                  0,
                                  BRANCH_INPUT,
                                  BRANCH_NOC,
                                  {
                                      0x02,
                                      0,
                                      0x00,
                                  },
                                  {},
                                  -1,
                              },
                              {
                                  channels,
                                  filter_width,
                                  filter_height,
                                  channels,
                                  1,
                                  1,
                                  0,
                                  nullptr,
                                  nullptr,
                                  PADDING_SAME_ZERO,
                                  NONE,
                                  0,
                                  1,
                                  BRANCH_NO_COPY,
                                  BRANCH_NOC,
                                  {},
                                  {},
                                  -1,
                              },
                              {
                                  channels,
                                  filter_width,
                                  filter_height,
                                  channels,
                                  1,
                                  1,
                                  0,
                                  nullptr,
                                  nullptr,
                                  PADDING_SAME_ZERO,
                                  NONE,
                                  0,
                                  1,
                                  BRANCH_NO_COPY,
                                  BRANCH_NOC,
                                  {},
                                  {},
                                  -1,
                              },
                              {
                                  channels,
                                  filter_width,
                                  filter_height,
                                  channels,
                                  1,
                                  1,
                                  0,
                                  nullptr,
                                  nullptr,
                                  PADDING_SAME_ZERO,
                                  NONE,
                                  0,
                                  0,
                                  BRANCH_NO_COPY,
                                  BRANCH_CAT,
                                  {
                                      0x00,
                                      0,
                                      0x02,
                                  },
                                  {},
                                  -1,
                              },
                              {
                                  channels + channels,
                                  filter_width,
                                  filter_height,
                                  1,
                                  1,
                                  1,
                                  0,
                                  nullptr,
                                  nullptr,
                                  PADDING_SAME_ZERO,
                                  NONE,
                                  0,
                                  0,
                                  BRANCH_NO_COPY,
                                  BRANCH_NOC,
                                  {},
                                  {},
                                  0,
                              } } };

  // Weights and biases need to be specified separately because
  // of the offset.
  AssignLayerWeightsBiases(&cnn_config, weights, bias);

  CNN_THREAD_DATA thread_data = { 1, nullptr };

  RunCNNTest(image_width, image_height, input, expected, &cnn_config,
             image_width, &thread_data, MSE_INT_TOL);
}

// TODO(logangw): Add test to test all combinations of branch_copy_type.

TEST_F(CNNTest, TestBranchCombinations) {
  int filter_width = 2;
  int filter_height = 3;

  int image_width = 4;
  int image_height = 4;

  float input[] = {
    3, 2, -5, -4, 4, -2, -4, -3, 4, 2, -3, 2, -3, 1, -5, -1,
  };

  float weights[] = {
    2,  3,  0,  4,  4,  3,  1,  0,  1,  -5, 4,  -3, 3,  0,  4,  -1, -1, -5,
    2,  1,  -3, -5, 3,  -1, -3, -2, 0,  -2, 3,  0,  -2, -4, -2, -2, 2,  -5,
    4,  -5, 0,  1,  -5, -4, -3, -4, 2,  -2, 1,  0,  3,  -2, -4, 3,  4,  -4,
    -1, -1, -3, -2, -2, -1, 2,  0,  2,  -1, 2,  -4, -4, -1, 2,  0,  3,  -2,
    -2, 3,  -3, 4,  -2, 4,  3,  4,  1,  0,  -2, -3, -5, 1,  -3, 2,  0,  -2,
    -2, -1, -1, -5, -2, -3, -1, 3,  3,  4,  4,  0,  2,  1,  3,  -3, 2,  -5,
    -5, 1,  -5, -1, 3,  3,  2,  -4, -1, 3,  -4, -2, -5, -2, 1,  3,  2,  2,
    -5, -2, -3, -1, -2, -4, -1, -2, 2,  1,  -4, -4, 2,  0,  2,  0,  2,  -3,
    -2, -4, 4,  0,  1,  -3, -5, 4,  -1, 2,  3,  -5, -1, 0,  4,  -1, -1, 3,
    -1, -3, 3,  1,  4,  3,  4,  3,  -4, -5, -1, 3,  3,  -4, 3,  1,  3,  -5,
    3,  4,  -5, 4,  2,  -1, -5, 2,  1,  0,  4,  0,  -3, 2,  0,  2,  -2, 1,
    -1, -2, -1, -5, 4,  3,  3,  -2, 2,  4,  -5, -5, -3, -2, 4,  0,  -4, 1,
  };

  float bias[] = {
    -1, 4, 0, 2, 2, -2, 0, -4, -5, -1, 1, -2, 3, 0, 4, -2, 1, 0, 0,
  };

  float expected[] = {
    149496, 15553,  -24193, -20956, 134094, 86432,  -68283, -6366,
    -53031, 133739, 67407,  -13539, -53205, -58635, -20033, 1979,
  };

  int channels = 2;

  CNN_CONFIG cnn_config = { 10,
                            0,
                            0,
                            0,
                            0,
                            {
                                {
                                    1,
                                    filter_width,
                                    filter_height,
                                    channels,
                                    1,
                                    1,
                                    0,
                                    weights,
                                    bias,
                                    PADDING_SAME_ZERO,
                                    NONE,
                                    0,
                                    0,
                                    BRANCH_NO_COPY,
                                    BRANCH_NOC,
                                    {},
                                    {},
                                    -1,
                                },
                                {
                                    channels,
                                    filter_width,
                                    filter_height,
                                    channels,
                                    1,
                                    1,
                                    0,
                                    nullptr,
                                    nullptr,
                                    PADDING_SAME_ZERO,
                                    NONE,
                                    0,
                                    0,
                                    BRANCH_INPUT,
                                    BRANCH_NOC,
                                    {
                                        0x06,
                                        0,
                                        0x00,
                                    },
                                    {},
                                    -1,
                                },
                                {
                                    channels,
                                    filter_width,
                                    filter_height,
                                    channels,
                                    1,
                                    1,
                                    0,
                                    nullptr,
                                    nullptr,
                                    PADDING_SAME_ZERO,
                                    NONE,
                                    0,
                                    2,
                                    BRANCH_OUTPUT,
                                    BRANCH_NOC,
                                    {
                                        0x08,
                                        0,
                                        0x00,
                                    },
                                    {},
                                    -1,
                                },
                                {
                                    channels,
                                    filter_width,
                                    filter_height,
                                    channels,
                                    1,
                                    1,
                                    0,
                                    nullptr,
                                    nullptr,
                                    PADDING_SAME_ZERO,
                                    NONE,
                                    0,
                                    3,
                                    BRANCH_NO_COPY,
                                    BRANCH_NOC,
                                    {},
                                    {},
                                    -1,
                                },
                                {
                                    channels,
                                    filter_width,
                                    filter_height,
                                    channels,
                                    1,
                                    1,
                                    0,
                                    nullptr,
                                    nullptr,
                                    PADDING_SAME_ZERO,
                                    NONE,
                                    0,
                                    2,
                                    BRANCH_NO_COPY,
                                    BRANCH_ADD,
                                    {
                                        0x00,
                                        0,
                                        0x08,
                                    },
                                    {},
                                    -1,
                                },
                                {
                                    channels,
                                    filter_width,
                                    filter_height,
                                    channels,
                                    1,
                                    1,
                                    0,
                                    nullptr,
                                    nullptr,
                                    PADDING_SAME_ZERO,
                                    NONE,
                                    0,
                                    2,
                                    BRANCH_NO_COPY,
                                    BRANCH_NOC,
                                    {},
                                    {},
                                    -1,
                                },
                                {
                                    channels,
                                    filter_width,
                                    filter_height,
                                    channels,
                                    1,
                                    1,
                                    0,
                                    nullptr,
                                    nullptr,
                                    PADDING_SAME_ZERO,
                                    NONE,
                                    0,
                                    1,
                                    BRANCH_NO_COPY,
                                    BRANCH_NOC,
                                    {},
                                    {},
                                    -1,
                                },
                                {
                                    channels,
                                    filter_width,
                                    filter_height,
                                    channels,
                                    1,
                                    1,
                                    0,
                                    nullptr,
                                    nullptr,
                                    PADDING_SAME_ZERO,
                                    NONE,
                                    0,
                                    1,
                                    BRANCH_NO_COPY,
                                    BRANCH_ADD,
                                    {
                                        0x00,
                                        0,
                                        0x0C,
                                    },
                                    {},
                                    -1,
                                },
                                {
                                    channels,
                                    filter_width,
                                    filter_height,
                                    channels,
                                    1,
                                    1,
                                    0,
                                    nullptr,
                                    nullptr,
                                    PADDING_SAME_ZERO,
                                    NONE,
                                    0,
                                    0,
                                    BRANCH_NO_COPY,
                                    BRANCH_ADD,
                                    {
                                        0x00,
                                        0,
                                        0x02,
                                    },
                                    {},
                                    -1,
                                },
                                {
                                    channels,
                                    filter_width,
                                    filter_height,
                                    1,
                                    1,
                                    1,
                                    0,
                                    nullptr,
                                    nullptr,
                                    PADDING_SAME_ZERO,
                                    NONE,
                                    0,
                                    0,
                                    BRANCH_NO_COPY,
                                    BRANCH_NOC,
                                    {},
                                    {},
                                    0,
                                },
                            } };

  // Weights and biases need to be specified separately because
  // of the offset.
  AssignLayerWeightsBiases(&cnn_config, weights, bias);

  CNN_THREAD_DATA thread_data = { 1, nullptr };

  RunCNNTest(image_width, image_height, input, expected, &cnn_config,
             image_width, &thread_data, MSE_INT_TOL);
}

TEST_F(CNNTest, TestSplittingTensors) {
  int filter_width = 2;
  int filter_height = 3;

  int image_width = 4;
  int image_height = 4;

  float input[] = {
    -1, -1, 2, 1, 3, 2, 4, -3, -4, -2, 2, -3, 1, -3, 4, -2,
  };

  float weights[] = {
    -4, 1,  0,  2,  3,  4,  4,  -4, -5, -3, 2,  2,  -4, -3, 3,  2,
    4,  -4, -3, -4, -4, 1,  -3, -5, -3, 4,  2,  -2, 2,  -1, -4, -1,
    -2, -3, 1,  1,  0,  -5, -1, 3,  3,  -5, -3, 0,  -3, 1,  -3, -1,
    1,  -3, -2, -2, 4,  -2, 0,  1,  2,  2,  -4, 2,  4,  0,  -5, -2,
    4,  4,  -5, 1,  0,  2,  -2, -5, -5, -3, -5, -5, 4,  -3, 0,  0,
    -4, -4, 0,  -5, -4, 0,  0,  -3, -5, -3, -1, 2,  -1, 4,  -1, 2,
  };

  float bias[] = {
    -4, -2, -3, -3, 3, 1, -2,
  };

  float expected[] = {
    530,  -762,  1469, 777,  849,   -771, -1698, 600,
    -658, -1821, 98,   -668, -1798, 30,   887,   -971,
  };

  CNN_CONFIG cnn_config = { 3,
                            0,
                            0,
                            0,
                            0,
                            {
                                {
                                    1,
                                    filter_width,
                                    filter_height,
                                    4,
                                    1,
                                    1,
                                    0,
                                    nullptr,
                                    nullptr,
                                    PADDING_SAME_ZERO,
                                    NONE,
                                    0,
                                    0,
                                    BRANCH_OUTPUT,
                                    BRANCH_NOC,
                                    {
                                        0x02,
                                        2,
                                        0x00,
                                    },
                                    {},
                                    -1,
                                },
                                {
                                    4,
                                    filter_width,
                                    filter_height,
                                    2,
                                    1,
                                    1,
                                    0,
                                    nullptr,
                                    nullptr,
                                    PADDING_SAME_ZERO,
                                    NONE,
                                    0,
                                    0,
                                    BRANCH_NO_COPY,
                                    BRANCH_CAT,
                                    {
                                        0x00,
                                        0,
                                        0x02,
                                    },
                                    {},
                                    -1,
                                },
                                {
                                    4,
                                    filter_width,
                                    filter_height,
                                    1,
                                    1,
                                    1,
                                    0,
                                    nullptr,
                                    nullptr,
                                    PADDING_SAME_ZERO,
                                    NONE,
                                    0,
                                    0,
                                    BRANCH_NO_COPY,
                                    BRANCH_NOC,
                                    {},
                                    {},
                                    0,
                                },
                            } };

  // Weights and biases need to be specified separately because
  // of the offset.
  AssignLayerWeightsBiases(&cnn_config, weights, bias);

  CNN_THREAD_DATA thread_data = { 1, nullptr };

  RunCNNTest(image_width, image_height, input, expected, &cnn_config,
             image_width, &thread_data, MSE_INT_TOL);
}

TEST_F(CNNTest, TestOutputChannelsCount) {
  int filter_width = 1;
  int filter_height = 1;

  int image_width = 2;
  int image_height = 2;

  float input[] = { 0, 0, 0, 0 };

  float weights[] = { 0, 0, 0, 0, 0, 0, 0, 0 };

  float bias[] = { 0, 0, 0, 0, 0, 0 };

  float expected[] = {
    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
  };

  CNN_CONFIG cnn_config = { 3,
                            0,
                            0,
                            0,
                            0,
                            {
                                {
                                    1,
                                    filter_width,
                                    filter_height,
                                    2,
                                    1,
                                    1,
                                    0,
                                    weights,
                                    bias,
                                    PADDING_SAME_ZERO,
                                    NONE,
                                    0,
                                    0,
                                    BRANCH_INPUT,
                                    BRANCH_NOC,
                                    {
                                        0x06,
                                        0,
                                        0x00,
                                    },
                                    {},
                                    -1,
                                },
                                {
                                    1,
                                    filter_width,
                                    filter_height,
                                    2,
                                    1,
                                    1,
                                    0,
                                    weights,
                                    bias,
                                    PADDING_SAME_ZERO,
                                    NONE,
                                    0,
                                    2,
                                    BRANCH_NO_COPY,
                                    BRANCH_CAT,
                                    {
                                        0x00,
                                        0,
                                        0x03,
                                    },
                                    {},
                                    -1,
                                },
                                {
                                    2,
                                    filter_width,
                                    filter_height,
                                    2,
                                    1,
                                    1,
                                    0,
                                    weights,
                                    bias,
                                    PADDING_SAME_ZERO,
                                    NONE,
                                    0,
                                    0,
                                    BRANCH_NO_COPY,
                                    BRANCH_CAT,
                                    {
                                        0x00,
                                        0,
                                        0x04,
                                    },
                                    {},
                                    0,
                                },
                            } };

  // Weights and biases need to be specified separately because
  // of the offset.
  AssignLayerWeightsBiases(&cnn_config, weights, bias);

  CNN_THREAD_DATA thread_data = { 1, nullptr };

  RunCNNTest(image_width, image_height, input, expected, &cnn_config,
             image_width, &thread_data, MSE_FLOAT_TOL);
}

TEST_F(CNNTest, TestBatchNorm) {
  int image_width = 28;
  int image_height = 28;
  int filter_height = 7;
  int filter_width = 7;
  float input[] = {
    0.0f,       0.0f,       0.0f,        0.0f,        0.0f,        0.0f,
    0.0f,       0.0f,       0.0f,        0.0f,        0.0f,        0.0f,
    0.0f,       0.0f,       0.0f,        0.0f,        0.0f,        0.0f,
    0.0f,       0.0f,       0.0f,        0.0f,        0.0f,        0.0f,
    0.0f,       0.0f,       0.0f,        0.0f,        0.0f,        0.0f,
    0.0f,       0.0f,       0.0f,        0.0f,        0.0f,        0.0f,
    0.0f,       0.0f,       0.0f,        0.0f,        0.0f,        0.0f,
    0.0f,       0.0f,       0.0f,        0.0f,        0.0f,        0.0f,
    0.0f,       0.0f,       0.0f,        0.0f,        0.0f,        0.0f,
    0.0f,       0.0f,       0.0f,        0.0f,        0.0f,        0.0f,
    0.0f,       0.0f,       0.0f,        0.0f,        0.0f,        0.0f,
    0.0f,       0.0f,       0.0f,        0.0f,        0.0f,        0.0f,
    0.0f,       0.0f,       0.0f,        0.0f,        0.0f,        0.0f,
    0.0f,       0.0f,       0.0f,        0.0f,        0.0f,        0.0f,
    0.0f,       0.0f,       0.0f,        0.0f,        0.0f,        0.0f,
    0.0f,       0.0f,       0.0f,        0.0f,        0.0f,        0.0f,
    0.0f,       0.0f,       0.0f,        0.0f,        0.0f,        0.0f,
    0.0f,       0.0f,       0.0f,        0.0f,        0.0f,        0.0f,
    0.0f,       0.0f,       0.0f,        0.0f,        0.0f,        0.0f,
    0.0f,       0.0f,       0.0f,        0.0f,        0.0f,        0.0f,
    0.0f,       0.0f,       0.0f,        0.0f,        0.0f,        0.0f,
    0.0f,       0.0f,       0.0f,        0.0f,        0.0f,        0.0f,
    0.0f,       0.0f,       0.0f,        0.0f,        0.0f,        0.0f,
    0.0f,       0.0f,       0.0f,        0.0f,        0.0f,        0.0f,
    0.0f,       0.0f,       0.0f,        0.0f,        0.0f,        0.0f,
    0.0f,       0.0f,       0.0117647f,  0.0705882f,  0.0705882f,  0.0705882f,
    0.494118f,  0.533333f,  0.686275f,   0.101961f,   0.65098f,    1.0f,
    0.968627f,  0.498039f,  0.0f,        0.0f,        0.0f,        0.0f,
    0.0f,       0.0f,       0.0f,        0.0f,        0.0f,        0.0f,
    0.0f,       0.0f,       0.117647f,   0.141176f,   0.368627f,   0.603922f,
    0.666667f,  0.992157f,  0.992157f,   0.992157f,   0.992157f,   0.992157f,
    0.882353f,  0.67451f,   0.992157f,   0.94902f,    0.764706f,   0.25098f,
    0.0f,       0.0f,       0.0f,        0.0f,        0.0f,        0.0f,
    0.0f,       0.0f,       0.0f,        0.0f,        0.0f,        0.192157f,
    0.933333f,  0.992157f,  0.992157f,   0.992157f,   0.992157f,   0.992157f,
    0.992157f,  0.992157f,  0.992157f,   0.984314f,   0.364706f,   0.321569f,
    0.321569f,  0.219608f,  0.152941f,   0.0f,        0.0f,        0.0f,
    0.0f,       0.0f,       0.0f,        0.0f,        0.0f,        0.0f,
    0.0f,       0.0f,       0.0f,        0.0705882f,  0.858824f,   0.992157f,
    0.992157f,  0.992157f,  0.992157f,   0.992157f,   0.776471f,   0.713725f,
    0.968627f,  0.945098f,  0.0f,        0.0f,        0.0f,        0.0f,
    0.0f,       0.0f,       0.0f,        0.0f,        0.0f,        0.0f,
    0.0f,       0.0f,       0.0f,        0.0f,        0.0f,        0.0f,
    0.0f,       0.0f,       0.313725f,   0.611765f,   0.419608f,   0.992157f,
    0.992157f,  0.803922f,  0.0431373f,  0.0f,        0.168627f,   0.603922f,
    0.0f,       0.0f,       0.0f,        0.0f,        0.0f,        0.0f,
    0.0f,       0.0f,       0.0f,        0.0f,        0.0f,        0.0f,
    0.0f,       0.0f,       0.0f,        0.0f,        0.0f,        0.0f,
    0.0f,       0.054902f,  0.00392157f, 0.603922f,   0.992157f,   0.352941f,
    0.0f,       0.0f,       0.0f,        0.0f,        0.0f,        0.0f,
    0.0f,       0.0f,       0.0f,        0.0f,        0.0f,        0.0f,
    0.0f,       0.0f,       0.0f,        0.0f,        0.0f,        0.0f,
    0.0f,       0.0f,       0.0f,        0.0f,        0.0f,        0.0f,
    0.0f,       0.545098f,  0.992157f,   0.745098f,   0.00784314f, 0.0f,
    0.0f,       0.0f,       0.0f,        0.0f,        0.0f,        0.0f,
    0.0f,       0.0f,       0.0f,        0.0f,        0.0f,        0.0f,
    0.0f,       0.0f,       0.0f,        0.0f,        0.0f,        0.0f,
    0.0f,       0.0f,       0.0f,        0.0f,        0.0f,        0.0431373f,
    0.745098f,  0.992157f,  0.27451f,    0.0f,        0.0f,        0.0f,
    0.0f,       0.0f,       0.0f,        0.0f,        0.0f,        0.0f,
    0.0f,       0.0f,       0.0f,        0.0f,        0.0f,        0.0f,
    0.0f,       0.0f,       0.0f,        0.0f,        0.0f,        0.0f,
    0.0f,       0.0f,       0.0f,        0.0f,        0.137255f,   0.945098f,
    0.882353f,  0.627451f,  0.423529f,   0.00392157f, 0.0f,        0.0f,
    0.0f,       0.0f,       0.0f,        0.0f,        0.0f,        0.0f,
    0.0f,       0.0f,       0.0f,        0.0f,        0.0f,        0.0f,
    0.0f,       0.0f,       0.0f,        0.0f,        0.0f,        0.0f,
    0.0f,       0.0f,       0.0f,        0.317647f,   0.941176f,   0.992157f,
    0.992157f,  0.466667f,  0.0980392f,  0.0f,        0.0f,        0.0f,
    0.0f,       0.0f,       0.0f,        0.0f,        0.0f,        0.0f,
    0.0f,       0.0f,       0.0f,        0.0f,        0.0f,        0.0f,
    0.0f,       0.0f,       0.0f,        0.0f,        0.0f,        0.0f,
    0.0f,       0.0f,       0.176471f,   0.729412f,   0.992157f,   0.992157f,
    0.588235f,  0.105882f,  0.0f,        0.0f,        0.0f,        0.0f,
    0.0f,       0.0f,       0.0f,        0.0f,        0.0f,        0.0f,
    0.0f,       0.0f,       0.0f,        0.0f,        0.0f,        0.0f,
    0.0f,       0.0f,       0.0f,        0.0f,        0.0f,        0.0f,
    0.0f,       0.0627451f, 0.364706f,   0.988235f,   0.992157f,   0.733333f,
    0.0f,       0.0f,       0.0f,        0.0f,        0.0f,        0.0f,
    0.0f,       0.0f,       0.0f,        0.0f,        0.0f,        0.0f,
    0.0f,       0.0f,       0.0f,        0.0f,        0.0f,        0.0f,
    0.0f,       0.0f,       0.0f,        0.0f,        0.0f,        0.0f,
    0.0f,       0.976471f,  0.992157f,   0.976471f,   0.25098f,    0.0f,
    0.0f,       0.0f,       0.0f,        0.0f,        0.0f,        0.0f,
    0.0f,       0.0f,       0.0f,        0.0f,        0.0f,        0.0f,
    0.0f,       0.0f,       0.0f,        0.0f,        0.0f,        0.0f,
    0.0f,       0.0f,       0.180392f,   0.509804f,   0.717647f,   0.992157f,
    0.992157f,  0.811765f,  0.00784314f, 0.0f,        0.0f,        0.0f,
    0.0f,       0.0f,       0.0f,        0.0f,        0.0f,        0.0f,
    0.0f,       0.0f,       0.0f,        0.0f,        0.0f,        0.0f,
    0.0f,       0.0f,       0.0f,        0.0f,        0.152941f,   0.580392f,
    0.898039f,  0.992157f,  0.992157f,   0.992157f,   0.980392f,   0.713725f,
    0.0f,       0.0f,       0.0f,        0.0f,        0.0f,        0.0f,
    0.0f,       0.0f,       0.0f,        0.0f,        0.0f,        0.0f,
    0.0f,       0.0f,       0.0f,        0.0f,        0.0f,        0.0f,
    0.0941176f, 0.447059f,  0.866667f,   0.992157f,   0.992157f,   0.992157f,
    0.992157f,  0.788235f,  0.305882f,   0.0f,        0.0f,        0.0f,
    0.0f,       0.0f,       0.0f,        0.0f,        0.0f,        0.0f,
    0.0f,       0.0f,       0.0f,        0.0f,        0.0f,        0.0f,
    0.0f,       0.0f,       0.0901961f,  0.258824f,   0.835294f,   0.992157f,
    0.992157f,  0.992157f,  0.992157f,   0.776471f,   0.317647f,   0.00784314f,
    0.0f,       0.0f,       0.0f,        0.0f,        0.0f,        0.0f,
    0.0f,       0.0f,       0.0f,        0.0f,        0.0f,        0.0f,
    0.0f,       0.0f,       0.0f,        0.0f,        0.0705882f,  0.670588f,
    0.858824f,  0.992157f,  0.992157f,   0.992157f,   0.992157f,   0.764706f,
    0.313725f,  0.0352941f, 0.0f,        0.0f,        0.0f,        0.0f,
    0.0f,       0.0f,       0.0f,        0.0f,        0.0f,        0.0f,
    0.0f,       0.0f,       0.0f,        0.0f,        0.0f,        0.0f,
    0.215686f,  0.67451f,   0.886275f,   0.992157f,   0.992157f,   0.992157f,
    0.992157f,  0.956863f,  0.521569f,   0.0431373f,  0.0f,        0.0f,
    0.0f,       0.0f,       0.0f,        0.0f,        0.0f,        0.0f,
    0.0f,       0.0f,       0.0f,        0.0f,        0.0f,        0.0f,
    0.0f,       0.0f,       0.0f,        0.0f,        0.533333f,   0.992157f,
    0.992157f,  0.992157f,  0.831373f,   0.529412f,   0.517647f,   0.0627451f,
    0.0f,       0.0f,       0.0f,        0.0f,        0.0f,        0.0f,
    0.0f,       0.0f,       0.0f,        0.0f,        0.0f,        0.0f,
    0.0f,       0.0f,       0.0f,        0.0f,        0.0f,        0.0f,
    0.0f,       0.0f,       0.0f,        0.0f,        0.0f,        0.0f,
    0.0f,       0.0f,       0.0f,        0.0f,        0.0f,        0.0f,
    0.0f,       0.0f,       0.0f,        0.0f,        0.0f,        0.0f,
    0.0f,       0.0f,       0.0f,        0.0f,        0.0f,        0.0f,
    0.0f,       0.0f,       0.0f,        0.0f,        0.0f,        0.0f,
    0.0f,       0.0f,       0.0f,        0.0f,        0.0f,        0.0f,
    0.0f,       0.0f,       0.0f,        0.0f,        0.0f,        0.0f,
    0.0f,       0.0f,       0.0f,        0.0f,        0.0f,        0.0f,
    0.0f,       0.0f,       0.0f,        0.0f,        0.0f,        0.0f,
    0.0f,       0.0f,       0.0f,        0.0f,        0.0f,        0.0f,
    0.0f,       0.0f,       0.0f,        0.0f,        0.0f,        0.0f,
    0.0f,       0.0f,       0.0f,        0.0f,        0.0f,        0.0f,
    0.0f,       0.0f,       0.0f,        0.0f,        0.0f,        0.0f,
    0.0f,       0.0f,       0.0f,        0.0f
  };
  float expected[] = {
    -0.836424f, -0.857365f, -1.62739f,  -1.62739f,  -0.836424f, 5.40742f,
    0.920853f,  -0.692567f, -0.836424f, -0.534405f, -1.62739f,  -0.836424f,
    1.32602f,   1.36312f,   0.112766f,  -0.836424f, -0.192962f, 1.56975f,
    2.45777f,   0.944414f,  -0.192962f, -1.5519f,   -1.5519f,   -0.554006f,
    -0.192962f, 1.4231f,    -1.5519f,   -0.192962f, 1.3661f,    -1.5519f,
    -1.5519f,   -0.192962f, -0.843708f, -0.359025f, -0.843708f, -0.843708f,
    -0.843708f, 4.53065f,   0.0429584f, -0.796804f, -0.843708f, 0.3473f,
    -0.843708f, -0.843708f, -0.114439f, 3.14817f,   0.0811934f, -0.843708f
  };
  float kernel[] = {
    0.119643f,    -0.237864f,   0.0462892f,   0.0502297f,   -0.0134528f,
    0.146347f,    0.153133f,    0.0513307f,   0.0752369f,   0.0135557f,
    -0.111434f,   0.0941854f,   0.0788362f,   0.0299412f,   0.111762f,
    0.144066f,    0.00431504f,  -0.0177954f,  0.0738092f,   -0.0344215f,
    0.0832582f,   0.053989f,    -0.112691f,   0.0962145f,   0.0186525f,
    -0.00660205f, -0.111962f,   -0.126801f,   -0.231625f,   0.17309f,
    0.0748875f,   -0.179569f,   -0.00513812f, -0.156579f,   -0.147322f,
    0.184168f,    0.189308f,    -0.200359f,   -0.0156733f,  0.140649f,
    0.0858496f,   -0.0263217f,  -0.0740749f,  -0.112563f,   0.107528f,
    0.0609729f,   -0.221625f,   0.0769944f,   -0.00900815f, -0.00136441f,
    -0.0236521f,  -0.0418025f,  -0.00286299f, 0.12241f,     0.0964093f,
    -0.0150897f,  0.0532171f,   0.0625916f,   0.116939f,    0.118024f,
    0.161918f,    -0.00909767f, 0.100897f,    -0.054563f,   -0.175179f,
    -0.0687892f,  0.00734235f,  0.109833f,    -0.113776f,   0.0595405f,
    -0.170255f,   0.0124815f,   -0.0363301f,  -0.0127038f,  0.0445554f,
    -0.0729894f,  0.107428f,    -0.0341417f,  0.132619f,    0.00984557f,
    -0.00443654f, 0.202929f,    0.0945134f,   0.0148725f,   0.00998574f,
    -0.0226449f,  0.0478197f,   -0.0793442f,  0.0707599f,   -0.084225f,
    0.0865795f,   0.071104f,    -0.047894f,   0.0838322f,   0.0635493f,
    -0.00370265f, -0.157247f,   -0.0289622f,  -0.0590963f,  0.13207f,
    0.00468011f,  -0.0345372f,  0.217939f,    0.18861f,     -0.0290393f,
    -0.0440664f,  0.0126197f,   -0.129132f,   -0.124943f,   0.0968156f,
    -0.0853643f,  -0.182305f,   0.00461618f,  -0.147095f,   -0.230282f,
    0.00856019f,  0.0278893f,   -0.0300229f,  0.0417871f,   0.0804717f,
    -0.0768571f,  -0.0397085f,  -0.0601096f,  0.100901f,    -0.0184926f,
    0.0350673f,   0.0971094f,   -0.0171837f,  -0.289644f,   -0.0899041f,
    0.08998f,     -0.160319f,   -0.0195103f,  0.0392167f,   -0.137864f,
    -0.0136294f,  0.0330886f,   -0.0409244f,  -0.092533f,   -0.0427934f,
    -0.191144f,   -0.0969461f,  0.112035f,    0.138611f,    0.128717f,
    0.191184f,    0.197462f
  };
  float bias[] = { 0.186703f, 0.204358f, -0.0230452f };

  float bn_gamma[] = { 1.32173f, 1.26171f, 1.21966f };
  float bn_beta[] = { -0.232595f, -0.222652f, -0.232209f };
  float bn_mean[] = { 0.329233f, 0.199894f, 0.12389f };
  float bn_std[] = { 0.311986f, 0.189737f, 0.247104f };

  CNN_BATCHNORM_PARAMS bn_params = {
    bn_gamma,
    bn_beta,
    bn_mean,
    bn_std,
  };

  CNN_CONFIG cnn_config = {
    1,
    0,
    0,
    0,
    0,
    {
        {
            1,
            filter_width,
            filter_height,
            3,
            7,
            7,
            0,
            kernel,
            bias,
            PADDING_VALID,
            RELU,
            0,
            0,
            BRANCH_NO_COPY,
            BRANCH_NOC,
            {},
            bn_params,
            0,
        },
    },
  };

  CNN_THREAD_DATA thread_data = { 1, nullptr };

  RunCNNTest(image_width, image_height, input, expected, &cnn_config,
             image_width, &thread_data, MSE_FLOAT_TOL);
}

TEST_F(CNNTest, TestMultithreading) {
  int image_height = 2;
  int image_width = 2;
  int filter_height = 3;
  int filter_width = 3;

  float input[] = {
    -2,
    4,
    1,
    0,
  };

  float weights[] = {
    -4, 2, -2, 0,  -4, 4, -3, -3, -3, -1, 1,  0,  -5, -3, 0, -5, 0, 0,
    -1, 0, 2,  -5, 0,  1, 4,  2,  1,  0,  -2, -1, -5, -3, 2, -2, 1, -5,
  };

  float bias[] = {
    -4,
    -3,
    -2,
    3,
  };

  float expected[] = {
    2, 10, -8, -17, -24, 5, -15, 6, -5, -5, 7, -10, 4, 13, 9, -14,
  };

  CNN_CONFIG cnn_config = {
    1,
    0,
    0,
    0,
    0,
    {
        {
            1,
            filter_width,
            filter_height,
            4,
            1,
            1,
            0,
            weights,
            bias,
            PADDING_SAME_ZERO,
            NONE,
            0,
            0,
            BRANCH_NO_COPY,
            BRANCH_NOC,
            {},
            {},
            0,
        },
    },
  };

  CNN_THREAD_DATA thread_data = { 1, nullptr };

  RunCNNTest(image_width, image_height, input, expected, &cnn_config,
             image_width, &thread_data, MSE_FLOAT_TOL);

  const AVxWorkerInterface *const winterface = aom_get_worker_interface();
  AVxWorker workers[4];

  for (int i = 0; i < 4; ++i) {
    winterface->init(&workers[i]);
  }

  thread_data = { 4, workers };

  RunCNNTest(image_width, image_height, input, expected, &cnn_config,
             image_width, &thread_data, MSE_FLOAT_TOL);

  for (int i = 0; i < 4; ++i) {
    winterface->end(&workers[i]);
  }
}

TEST_F(CNNTest, TestMultiOutput) {
  const int image_dim = 8;
  const int image_ch = 3;
  const int filter_dim = 2;
  const int stride = 2;
  const int num_filters = 2;

  const float input_[] = {
    1.7537929121f,     0.134331551012f,    0.123580039877f,   0.957731845246f,
    0.391006834217f,   1.00699352042f,     -0.778177955829f,  -0.814166433059f,
    -0.656374394915f,  0.321967305228f,    -2.19455719176f,   0.708035038966f,
    0.409148822266f,   -0.318254408902f,   0.152450211189f,   -0.250210793369f,
    0.826811563186f,   1.6804156584f,      0.273626975978f,   0.437936241887f,
    -0.329935520167f,  -0.288761611645f,   0.156937008304f,   0.271054157295f,
    -0.0224828854332f, 1.70110336895f,     -0.989066699309f,  1.30863131729f,
    -0.165813705702f,  0.00380178619265f,  -0.0837342367587f, 0.760954783156f,
    -0.413610373524f,  1.17968204175f,     0.720295719536f,   0.308718974472f,
    -1.10091337671f,   0.693160033687f,    -0.0202862320697f, 1.0221927503f,
    -1.24521801881f,   -0.478501952308f,   -1.71648619442f,   -0.182571723636f,
    0.339292649504f,   2.0806519131f,      0.967974033444f,   0.175248672328f,
    0.0658124561472f,  0.795504169496f,    0.750592557361f,   -1.46631013249f,
    -1.79052846838f,   -1.03672179515f,    -0.841985521653f,  1.20995011489f,
    0.140859718215f,   -0.651552622661f,   0.451065110806f,   1.1189443693f,
    0.100213260593f,   -0.834076868118f,   -1.28734321611f,   1.22064420095f,
    -0.364143084361f,  0.750961509335f,    -0.888689074553f,  -0.8253547106f,
    -1.21800999027f,   -0.966670603566f,   1.37384014741f,    0.47281264834f,
    -0.420416235531f,  0.520163906493f,    0.501296589423f,   1.53418976951f,
    0.715234751485f,   0.644551588907f,    0.0763504863375f,  -0.0018541943723f,
    0.322853189656f,   -0.795099723224f,   -0.125177096675f,  1.4476577471f,
    -0.585888410088f,  -1.44391754955f,    -0.610543221933f,  -0.221859179799f,
    0.252060200774f,   -0.86287169623f,    -0.0350246229157f, 1.0932311997f,
    0.899464648842f,   -0.468806951704f,   -0.300861137168f,  1.15776414206f,
    1.03268544738f,    -0.171579585622f,   -0.179136557119f,  -0.354091003368f,
    -0.612298249394f,  -1.20237379258f,    1.54604109659f,    0.130664370287f,
    0.885225111868f,   1.0362799581f,      0.980561720868f,   -0.619379186999f,
    -1.33818929924f,   -0.237233737961f,   -1.89335425073f,   0.567821011321f,
    0.862420368465f,   -1.37380916821f,    0.352190056666f,   0.611261516274f,
    0.393237747152f,   0.894686247967f,    0.190405182149f,   0.264872662911f,
    -0.0657009133797f, 0.0580512653493f,   -0.401825294366f,  0.4106081318f,
    0.49484512188f,    -0.0751103149442f,  -1.43243736382f,   1.79855656009f,
    -1.1075351975f,    0.000354882733011f, -0.950716438608f,  1.27129831688f,
    1.00495189838f,    0.110358656713f,    1.08315032822f,    -0.972676676218f,
    -0.0757668962831f, 1.88932045165f,     -0.0672638136275f, 0.425913010161f,
    -0.781540372017f,  0.976000248609f,    0.687218504122f,   1.31374513445f,
    -0.932658930672f,  -1.25339468479f,    0.422071294078f,   -0.24189927912f,
    0.216906604642f,   -1.88720997548f,    1.99252872889f,    0.353943735777f,
    0.737434784132f,   -1.17848645017f,    1.70424254896f,    0.775297112968f,
    -0.516392797501f,  0.398130609129f,    0.737248101457f,   0.166282500886f,
    1.24699015468f,    0.47116183125f,     1.19091180182f,    -0.372695424578f,
    0.219773209389f,   -0.829467838962f,   -0.52533122724f,   1.98707754595f,
    0.553692606972f,   -0.933228902369f,   1.55427751643f,    -1.08813399144f,
    -0.325686682094f,  0.205091443796f,    -1.70381666435f,   0.466465327942f,
    1.73126863447f,    -0.939133672634f,   1.48318077459f,    -0.599414038168f,
    -1.1583078687f,    0.518116190201f,    0.133571482458f,   0.84958342672f,
    1.02205000597f,    -0.0772082009087f,  -1.69567503859f,   1.4697939436f,
    1.67813743122f,    -0.627911582938f,   0.131380509137f,   -1.35717850726f,
  };
  const float *input[3] = { input_, &input_[image_dim * image_dim],
                            &input_[2 * image_dim * image_dim] };

  const float bias[] = { 0.0f, 0.0f };

  const float weights_1[] = {
    -0.489547413618f, 0.141916424749f,  -0.279286485585f,  -0.115322211094f,
    0.299572786936f,  0.205289980785f,  -0.536254480088f,  -0.253626313744f,
    -0.422883815849f, -0.169702966298f, -0.540104704793f,  0.495319646763f,
    0.298799079422f,  -0.10054550901f,  -0.306085047056f,  0.171061886165f,
    -0.108058703878f, -0.410734629888f, -0.0640674673049f, -0.386524840979f,
    -0.157203423678f, -0.362138920529f, -0.216206085209f,  0.147502517971f,
  };

  const float weights_2[] = {
    0.207580604357f,  0.480821146263f,  -0.29111909562f,   0.47422567493f,
    0.206892553253f,  -0.235067084092f, 0.354516800602f,   -0.212399370252f,
    -0.419071343731f, -0.050350731631f, -0.0516457320279f, -0.0359310500731f,
    0.567044864811f,  -0.060341127522f, 0.0501464839637f,  -0.437785677916f,
  };

  const float weights_3[] = {
    -0.0690452401448f, -0.356657338763f,   -0.219464031809f, 0.551288365843f,
    0.181372090853f,   -0.00245268542109f, 0.409000696276f,  -0.593209108763f,
    0.587352566749f,   -0.243720660227f,   0.266232713887f,  -0.00439285245097f,
    0.252883228305f,   0.152646192631f,    0.0918944932026f, 0.398853715057f,
  };

  const float weights_4[] = {
    0.207560791573f,   0.194201350401f,   0.227802322443f,  0.206533663345f,
    0.0557331066805f,  0.0224159800424f,  -0.143939197467f, -0.27703361602f,
    0.130643888389f,   -0.269456557461f,  0.186242862864f,  -0.162879944774f,
    -0.145503996718f,  -0.0768822987581f, -0.203127976359f, -0.238119922873f,
    -0.258806479994f,  0.0357957680385f,  -0.1027606976f,   -0.287920082345f,
    0.189047820993f,   0.250711538481f,   -0.272815714175f, -0.0431449742024f,
    0.207261230996f,   -0.0396472677451f, 0.131236557412f,  0.174291832499f,
    -0.251515885765f,  -0.107164007499f,  0.185824534748f,  -0.00561585838161f,
    0.273393799578f,   -0.139563699075f,  -0.263922456031f, -0.118859844081f,
    0.109230982597f,   -0.170170294794f,  0.0123025648515f, -0.0839368964355f,
    -0.0774058234297f, 0.255847138286f,   -0.208430879637f, 0.279170114319f,
    -0.272890330712f,  -0.217725903006f,  -0.295923275459f, -0.17008723953f,
    -0.284281803405f,  0.281406323629f,   0.266910044663f,  -0.209963914338f,
    0.271980962964f,   0.142013581699f,   -0.143896509026f, -0.290509242975f,
    -0.305768180935f,  0.196902832117f,   -0.090424189662f, -0.147460802346f,
    0.217722016651f,   0.12353848977f,    -0.169177363577f, -0.0454230918512f,
  };

  const float expected_0[] = {
    -2.04858441055f,  -2.12883075791f,    -0.045177363807f, 0.763949675768f,
    -0.544361512821f, -1.58123168032f,    1.89319847039f,   0.16859080901f,
    -1.16023321135f,  -0.396988107751f,   1.76637090744f,   -1.40434786514f,
    0.908227575669f,  0.817064817605f,    0.215631134908f,  -0.848605613428f,
    -0.106756747018f, 0.0193027166685f,   0.801345615113f,  -0.395407237598f,
    -1.79983795658f,  -1.73054496242f,    0.0584392594454f, -0.388786095569f,
    -0.237269619354f, 0.000843578271263f, -1.24043512104f,  0.487839445893f,
    -0.394259726605f, 0.559632843424f,    -0.527224052291f, -1.53792340282f,
  };

  const float expected_1[] = {
    0.0f, 0.0f,           0.0f, 0.0f, 0.4057888292f, 0.325309571755f,
    0.0f, 1.22013465602f,
  };

  const float expected_2[] = {
    0.156119444687f,
    0.517385299817f,
  };

  const float expected_3[] = {
    0.224177852984f,
    0.503384419034f,
    0.156119444687f,
    0.517385299817f,
  };

  const float *expected[] = { expected_0, expected_1, expected_2, expected_3 };

  CNN_CONFIG cnn_config = {
    4,  // num_layers
    0,  // is_residue
    0,  // ext_width
    0,  // ext_height
    0,  // strict_bounds
    {
        // layer_config
        {
            image_ch,           // in_channels
            filter_dim,         // filter_width
            filter_dim,         // filter_height
            num_filters,        // out_channels
            stride,             // skip_width
            stride,             // skip_height
            0,                  // max_pool
            weights_1,          // weights
            bias,               // bias
            PADDING_SAME_ZERO,  // pad
            NONE,               // activation
            0,                  // deconvolve
            0,                  // branch
            BRANCH_OUTPUT,      // branch_copy_type
            BRANCH_NOC,         // branch_combine_type
            { 2, 0, 0 },        // branch_config
            {},                 // bn_params
            0,                  // output_num
        },
        {
            num_filters,        // in_channels
            filter_dim,         // filter_width
            filter_dim,         // filter_height
            num_filters,        // out_channels
            stride,             // skip_width
            stride,             // skip_height
            0,                  // max_pool
            weights_2,          // weights
            bias,               // bias
            PADDING_SAME_ZERO,  // pad
            RELU,               // activation
            0,                  // deconvolve
            0,                  // branch
            BRANCH_NO_COPY,     // branch_copy_type
            BRANCH_NOC,         // branch_combine_type
            {},                 // branch_config
            {},                 // bn_params
            1,                  // output_num
        },
        {
            num_filters,        // in_channels
            filter_dim,         // filter_width
            filter_dim,         // filter_height
            num_filters,        // out_channels
            stride,             // skip_width
            stride,             // skip_height
            0,                  // max_pool
            weights_3,          // weights
            bias,               // bias
            PADDING_SAME_ZERO,  // pad
            RELU,               // activation
            0,                  // deconvolve
            0,                  // branch
            BRANCH_NO_COPY,     // branch_copy_type
            BRANCH_NOC,         // branch_combine_type
            {},                 // branch_config
            {},                 // bn_params
            2,                  // output_num
        },
        {
            num_filters,     // in_channels
            2 * filter_dim,  // filter_width
            2 * filter_dim,  // filter_height
            num_filters,     // out_channels
            2 * stride,      // skip_width
            2 * stride,      // skip_height
            0,               // max_pool
            weights_4,       // weights
            bias,            // bias
            PADDING_VALID,   // pad
            RELU,            // activation
            0,               // deconvolve
            1,               // branch
            BRANCH_NO_COPY,  // branch_copy_type
            BRANCH_CAT,      // branch_combine_type
            { 0, 0, 1 },     // branch_config
            {},              // bn_params
            3,               // output_num
        },
    },
  };

  CNN_THREAD_DATA thread_data = { 1, nullptr };

  const int num_outputs = 4;
  const int output_chs[4] = { filter_dim, filter_dim, filter_dim,
                              2 * filter_dim };
  const int output_dims[4] = { 4, 2, 1, 1 };
  const int output_sizes[4] = {
    output_chs[0] * output_dims[0] * output_dims[0],
    output_chs[1] * output_dims[1] * output_dims[1],
    output_chs[2] * output_dims[2] * output_dims[2],
    output_chs[3] * output_dims[3] * output_dims[3],
  };
  float *const output_ = (float *)aom_malloc(
      sizeof(*output_) *
      (output_sizes[0] + output_sizes[1] + output_sizes[2] + output_sizes[3]));
  ASSERT_NE(output_, nullptr);
  float *output[CNN_MAX_CHANNELS] = { nullptr };
  int ch_ite = 0;
  float *output_ite = output_;
  for (int output_idx = 0; output_idx < num_outputs; output_idx++) {
    for (int channel = 0; channel < output_chs[output_idx]; ++channel) {
      output[ch_ite++] = output_ite;
      output_ite += output_dims[output_idx] * output_dims[output_idx];
    }
  }
  CNN_MULTI_OUT output_struct = { num_outputs, output_chs, output_dims,
                                  output };

  RunMultiOutCNNTest(input, image_dim, image_dim, image_dim, &cnn_config,
                     &thread_data, &output_struct, expected, MSE_FLOAT_TOL);

  aom_free(output_);
}

namespace {

typedef void (*CNNConvolveNoMaxpoolPaddingValidFunc)(
    const float **input, int in_width, int in_height, int in_stride,
    const CNN_LAYER_CONFIG *layer_config, float **output, int out_stride,
    int start_idx, int cstep, int channel_step);

typedef libaom_test::FuncParam<CNNConvolveNoMaxpoolPaddingValidFunc>
    CNNConvolveTestFuncs;

class CNNConvolveTest : public ::testing::TestWithParam<CNNConvolveTestFuncs> {
 protected:
  void SetUp() override { params_ = GetParam(); }

  void RunCNNConvolveSetup(int run_times) {
    int in_width = 65;
    int in_height = 65;

    const CNN_CONFIG *cnn_config = &av1_intra_mode_cnn_partition_cnn_config;

    for (int layer = 0; layer < cnn_config->num_layers; ++layer) {
      int out_width = 0, out_height = 0;
      int in_size = in_width * in_height;
      // Get current layer output width and height.
      av1_find_cnn_layer_output_size(in_height, in_width,
                                     &cnn_config->layer_config[layer],
                                     &out_width, &out_height);

      int out_size = out_width * out_height;
      float *input[20], *output_ref[20], *output_mod[20];

      float *input_data =
          (float *)aom_malloc(sizeof(*input_data) * in_size *
                              cnn_config->layer_config[layer].in_channels);
      float *temp_ptr = input_data;
      ASSERT_NE(temp_ptr, nullptr);
      for (int i = 0; i < cnn_config->layer_config[layer].in_channels; ++i) {
        input[i] = temp_ptr;
        for (int j = 0; j < in_size; j++) {
          *(temp_ptr++) = ((float)rng_.Rand31() - (1 << 30)) / (1u << 31);
        }
      }

      float *out_data_ref = (float *)aom_calloc(
          sizeof(*out_data_ref),
          out_size * cnn_config->layer_config[layer].out_channels);
      ASSERT_NE(out_data_ref, nullptr);
      float *out_data_mod = (float *)aom_calloc(
          sizeof(*out_data_mod),
          out_size * cnn_config->layer_config[layer].out_channels);
      ASSERT_NE(out_data_mod, nullptr);
      float *temp_ptr1 = out_data_ref;
      float *temp_ptr2 = out_data_mod;
      for (int i = 0; i < cnn_config->layer_config[layer].out_channels; ++i) {
        output_ref[i] = temp_ptr1;
        output_mod[i] = temp_ptr2;
        temp_ptr1 += out_size;
        temp_ptr2 += out_size;
      }

      RunCNNConvolveTest(input, in_width, in_height, out_size,
                         &cnn_config->layer_config[layer], 0, 1, run_times,
                         layer, output_ref, output_mod, out_width);

      // Set current layer output width and height as next layer input width and
      // height.
      in_width = out_width;
      in_height = out_height;

      aom_free(input_data);
      aom_free(out_data_ref);
      aom_free(out_data_mod);
    }
  }

  void RunCNNConvolveTest(float **input, int in_width, int in_height,
                          int out_size, const CNN_LAYER_CONFIG *layer_config,
                          int start_idx, int step, int run_times, int layer,
                          float **output_ref, float **output_mod,
                          int out_stride) {
    const int cstep = layer_config->in_channels * layer_config->out_channels;
    const int channel_step = AOMMAX(step, 1);
    aom_usec_timer timer;
    aom_usec_timer_start(&timer);
    for (int i = 0; i < run_times; ++i) {
      params_.ref_func((const float **)input, in_width, in_height, in_width,
                       layer_config, output_ref, out_stride, start_idx, cstep,
                       channel_step);
    }
    aom_usec_timer_mark(&timer);
    const double time1 = static_cast<double>(aom_usec_timer_elapsed(&timer));

    aom_usec_timer_start(&timer);
    for (int i = 0; i < run_times; ++i) {
      params_.tst_func((const float **)input, in_width, in_height, in_width,
                       layer_config, output_mod, out_stride, start_idx, cstep,
                       channel_step);
    }
    aom_usec_timer_mark(&timer);
    const double time2 = static_cast<double>(aom_usec_timer_elapsed(&timer));

    if (run_times > 1) {
      printf("layer : %d \n", layer);
      printf("%7.2f/%7.2fns (%3.2f)\n", time1, time2, time1 / time2);
    } else {
      for (int channel = 0; channel < layer_config->out_channels; ++channel) {
        const float *buf_ref = output_ref[channel];
        const float *buf_mod = output_mod[channel];

        for (int i = 0; i < out_size; ++i) {
          if (buf_ref[i] < CNN_CONVOLVE_PIXELWISE_FLOAT_TOL) {
            ASSERT_LE(buf_ref[i], CNN_CONVOLVE_PIXELWISE_FLOAT_TOL)
                << "Reference output was near-zero, test output was not ("
                << buf_mod[i] << ")";
          } else {
            const float error = buf_ref[i] - buf_mod[i];
            const float relative_error = fabsf(error / buf_ref[i]);
            ASSERT_LE(relative_error, CNN_CONVOLVE_PIXELWISE_FLOAT_TOL)
                << " channel " << channel << " pixel " << i << ": "
                << buf_ref[i] << "/" << buf_mod[i] << std::endl;
          }
        }
      }
    }
  }

 private:
  CNNConvolveTestFuncs params_;
  libaom_test::ACMRandom rng_;
};
GTEST_ALLOW_UNINSTANTIATED_PARAMETERIZED_TEST(CNNConvolveTest);

TEST_P(CNNConvolveTest, CheckOutput) { RunCNNConvolveSetup(1); }

TEST_P(CNNConvolveTest, DISABLED_Speed) { RunCNNConvolveSetup(100000); }

#if HAVE_AVX2 && !CONFIG_EXCLUDE_SIMD_MISMATCH
INSTANTIATE_TEST_SUITE_P(AVX2, CNNConvolveTest,
                         ::testing::Values(CNNConvolveTestFuncs(
                             &av1_cnn_convolve_no_maxpool_padding_valid_c,
                             &av1_cnn_convolve_no_maxpool_padding_valid_avx2)));
#endif

#if HAVE_NEON
INSTANTIATE_TEST_SUITE_P(NEON, CNNConvolveTest,
                         ::testing::Values(CNNConvolveTestFuncs(
                             &av1_cnn_convolve_no_maxpool_padding_valid_c,
                             &av1_cnn_convolve_no_maxpool_padding_valid_neon)));
#endif

}  // namespace
