/*
 * 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 "third_party/googletest/src/googletest/include/gtest/gtest.h"

#include "config/av1_rtcd.h"

#include "av1/common/cnn.h"

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

// Best possible pixelwise guarenteed preicison 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

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);
    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));

    av1_find_cnn_output_size(image_width, image_height, cnn_config, out_widths,
                             out_heights, not_used);
    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,  // num_layers
                            0,  // is_residue
                            0,  // ext_width
                            0,  // ext_height
                            0,  // strict_bounds
                            {
                                {
                                    1,                  // in_channels
                                    filter_width,       // filter_width
                                    filter_height,      // filter_height
                                    3,                  // out_channels
                                    1,                  // skip_width
                                    1,                  // skip_height
                                    0,                  // maxpool
                                    nullptr,            // weights
                                    nullptr,            // bias
                                    PADDING_SAME_ZERO,  // pad
                                    NONE,               // activation
                                    0,                  // deconvolve
                                    0,                  // branch
                                    BRANCH_NO_COPY,     // branch_copy_type
                                    BRANCH_NOC,         // branch_combine_type
                                    {},                 // branch_config
                                    {},                 // bn_params
                                    -1,                 // output_num
                                },
                                {
                                    3,                  // in_channels
                                    filter_width,       // filter_width
                                    filter_height,      // filter_height
                                    3,                  // out_channels
                                    1,                  // skip_width
                                    1,                  // skip_height
                                    0,                  // maxpool
                                    nullptr,            // weights
                                    nullptr,            // bias
                                    PADDING_SAME_ZERO,  // pad
                                    NONE,               // activation
                                    0,                  // deconvolve
                                    0,                  // branch
                                    BRANCH_NO_COPY,     // branch_copy_type
                                    BRANCH_NOC,         // branch_combine_type
                                    {},                 // branch_config
                                    {},                 // bn_params
                                    -1,                 // output_num
                                },
                                {
                                    3,                  // in_channels
                                    filter_width,       // filter_width
                                    filter_height,      // filter_height
                                    1,                  // out_channels
                                    1,                  // skip_width
                                    1,                  // skip_height
                                    0,                  // maxpool
                                    nullptr,            // weights
                                    nullptr,            // bias
                                    PADDING_SAME_ZERO,  // pad
                                    NONE,               // activation
                                    0,                  // deconvolve
                                    0,                  // branch
                                    BRANCH_NO_COPY,     // branch_copy_type
                                    BRANCH_NOC,         // branch_combine_type
                                    {},                 // branch_config
                                    {},                 // bn_params
                                    0,                  // output_num
                                },
                            } };

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

  CNN_THREAD_DATA thread_data = { 1, NULL };

  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,  // num_layers
                            0,  // is_residue
                            0,  // ext_width
                            0,  // ext_height
                            0,  // strict_bounds
                            { {
                                1,                  // in_channels
                                filter_width,       // filter_width
                                filter_height,      // filter_height
                                1,                  // out_channels
                                1,                  // skip_width
                                1,                  // skip_height
                                0,                  // maxpool
                                weights,            // 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
                                0,                  // output_num
                            } } };

  CNN_THREAD_DATA thread_data = { 1, NULL };

  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,  // num_layers
                            0,  // is_residue
                            0,  // ext_width
                            0,  // ext_height
                            0,  // strict_bounds
                            {
                                {
                                    1,                  // in_channels
                                    4,                  // filter_width
                                    11,                 // filter_height
                                    1,                  // out_channels
                                    7,                  // skip_width
                                    6,                  // skip_height
                                    0,                  // maxpool
                                    weights,            // weights
                                    bias,               // bias
                                    PADDING_SAME_ZERO,  // pad
                                    NONE,               // activation
                                    0,                  // deconvolve
                                    0,                  // branch
                                    BRANCH_NO_COPY,     // branch_copy_type
                                    BRANCH_NOC,         // branch_combine_type
                                    {},                 // branch_config
                                    {},                 // bn_params
                                    0,                  // output_num
                                },
                            } };

  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, NULL };

  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,  // num_layers
                            0,  // is_residue
                            0,  // ext_width
                            0,  // ext_height
                            0,  // strict_bounds
                            { {
                                1,                  // in_channels
                                3,                  // filter_width
                                3,                  // filter_height
                                1,                  // out_channels
                                stride,             // skip_width
                                stride,             // skip_height
                                1,                  // maxpool
                                weights,            // weights
                                bias,               // bias
                                PADDING_SAME_ZERO,  // pad
                                NONE,               // activation
                                0,                  // deconvolve
                                0,                  // branch
                                BRANCH_NO_COPY,     // branch_copy_type
                                BRANCH_NOC,         // branch_combine_type
                                {},                 // branch_config
                                {},                 // bn_params
                                0,                  // output_num
                            } } };

  CNN_THREAD_DATA thread_data = { 1, NULL };

  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,  // num_layers
                            0,  // is_residue
                            0,  // ext_width
                            0,  // ext_height
                            0,  // strict_bounds
                            { {
                                1,                  // in_channels
                                5,                  // filter_width
                                2,                  // filter_height
                                1,                  // out_channels
                                2,                  // skip_width
                                3,                  // skip_height
                                0,                  // maxpool
                                weights_1,          // weights
                                bias_1,             // bias
                                PADDING_SAME_ZERO,  // pad
                                NONE,               // activation
                                1,                  // deconvolve
                                0,                  // branch
                                BRANCH_NO_COPY,     // branch_copy_type
                                BRANCH_NOC,         // branch_combine_type
                                {},                 // branch_config
                                {},                 // bn_params
                                0,                  // output_num
                            } } };

  CNN_THREAD_DATA thread_data = { 1, NULL };

  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,  // num_layers
                            0,  // is_residue
                            0,  // ext_width
                            0,  // ext_height
                            0,  // strict_bounds
                            { {
                                1,                  // in_channels
                                23,                 // filter_width
                                20,                 // filter_height
                                1,                  // out_channels
                                15,                 // skip_width
                                20,                 // skip_height
                                0,                  // maxpool
                                weights_10x11,      // weights
                                bias_10x11,         // bias
                                PADDING_SAME_ZERO,  // pad
                                NONE,               // activation
                                0,                  // deconvolve
                                0,                  // branch
                                BRANCH_NO_COPY,     // branch_copy_type
                                BRANCH_NOC,         // branch_combine_type
                                {},                 // branch_config
                                {},                 // bn_params
                                0,                  // output_num
                            } } };

  int image_height = 10;
  int image_width = 11;

  CNN_THREAD_DATA thread_data = { 1, NULL };

  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,  // num_layers
                            0,  // is_residue
                            0,  // ext_width
                            0,  // ext_height
                            0,  // strict_bounds
                            { {
                                1,                  // in_channels
                                filter_width,       // filter_width
                                filter_height,      // filter_height
                                1,                  // out_channels
                                1,                  // skip_width
                                1,                  // skip_height
                                0,                  // maxpool
                                weights,            // weights
                                bias,               // bias
                                PADDING_SAME_ZERO,  // pad
                                SOFTSIGN,           // activation
                                0,                  // deconvolve
                                0,                  // branch
                                BRANCH_NO_COPY,     // branch_copy_type
                                BRANCH_NOC,         // branch_combine_type
                                {},                 // branch_config
                                {},                 // bn_params
                                0,                  // output_num
                            } } };

  CNN_THREAD_DATA thread_data = { 1, NULL };

  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,  // num_layers
                            0,  // is_residue
                            0,  // ext_width
                            0,  // ext_height
                            0,  // strict_bounds
                            { {
                                  1,                  // in_channels
                                  filter_width,       // filter_width
                                  filter_height,      // filter_height
                                  channels,           // out_channels
                                  1,                  // skip_width
                                  1,                  // skip_height
                                  0,                  // maxpool
                                  weights,            // weights
                                  bias,               // bias
                                  PADDING_SAME_ZERO,  // pad
                                  NONE,               // activation
                                  0,                  // deconvolve
                                  0,                  // branch
                                  BRANCH_NO_COPY,     // branch_copy_type
                                  BRANCH_NOC,         // branch_combine_type
                                  {},                 // branch_config
                                  {},                 // bn_params
                                  -1,                 // output_num
                              },
                              {
                                  channels,           // in_channels
                                  filter_width,       // filter_width
                                  filter_height,      // filter_height
                                  channels,           // out_channels
                                  1,                  // skip_width
                                  1,                  // skip_height
                                  0,                  // maxpool
                                  nullptr,            // weights
                                  nullptr,            // bias
                                  PADDING_SAME_ZERO,  // pad
                                  NONE,               // activation
                                  0,                  // deconvolve
                                  0,                  // branch
                                  BRANCH_INPUT,       // branch_copy_type
                                  BRANCH_NOC,         // branch_combine_type
                                  {
                                      0x02,  // input_to_branches
                                      0,     // channels_to_copy
                                      0x00,  // branches_to_combine
                                  },
                                  {},  // bn_params
                                  -1,  // output_num
                              },
                              {
                                  channels,           // in_channels
                                  filter_width,       // filter_width
                                  filter_height,      // filter_height
                                  channels,           // out_channels
                                  1,                  // skip_width
                                  1,                  // skip_height
                                  0,                  // maxpool
                                  nullptr,            // weights
                                  nullptr,            // bias
                                  PADDING_SAME_ZERO,  // pad
                                  NONE,               // activation
                                  0,                  // deconvolve
                                  1,                  // branch
                                  BRANCH_NO_COPY,     // branch_copy_type
                                  BRANCH_NOC,         // branch_combine_type
                                  {},                 // branch_config
                                  {},                 // bn_params
                                  -1,                 // output_num
                              },
                              {
                                  channels,           // in_channels
                                  filter_width,       // filter_width
                                  filter_height,      // filter_height
                                  channels,           // out_channels
                                  1,                  // skip_width
                                  1,                  // skip_height
                                  0,                  // maxpool
                                  nullptr,            // weights
                                  nullptr,            // bias
                                  PADDING_SAME_ZERO,  // pad
                                  NONE,               // activation
                                  0,                  // deconvolve
                                  1,                  // branch
                                  BRANCH_NO_COPY,     // branch_copy_type
                                  BRANCH_NOC,         // branch_combine_type
                                  {},                 // branch_config
                                  {},                 // bn_params
                                  -1,                 // output_num
                              },
                              {
                                  channels,           // in_channels
                                  filter_width,       // filter_width
                                  filter_height,      // filter_height
                                  channels,           // out_channels
                                  1,                  // skip_width
                                  1,                  // skip_height
                                  0,                  // maxpool
                                  nullptr,            // weights
                                  nullptr,            // bias
                                  PADDING_SAME_ZERO,  // pad
                                  NONE,               // activation
                                  0,                  // deconvolve
                                  0,                  // branch
                                  BRANCH_NO_COPY,     // branch_copy_type
                                  BRANCH_ADD,         // branch_combine_type
                                  {
                                      0x00,  // input_to_branches
                                      0,     // channels_to_copy
                                      0x02,  // branches_to_combine
                                  },
                                  {},  // bn_params
                                  -1,  // output_num
                              },
                              {
                                  channels,           // in_channels
                                  filter_width,       // filter_width
                                  filter_height,      // filter_height
                                  1,                  // out_channels
                                  1,                  // skip_width
                                  1,                  // skip_height
                                  0,                  // maxpool
                                  nullptr,            // weights
                                  nullptr,            // bias
                                  PADDING_SAME_ZERO,  // pad
                                  NONE,               // activation
                                  0,                  // deconvolve
                                  0,                  // branch
                                  BRANCH_NO_COPY,     // branch_copy_type
                                  BRANCH_NOC,         // branch_combine_type
                                  {},                 // branch_config
                                  {},                 // bn_params
                                  0,                  // output_num
                              } } };

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

  CNN_THREAD_DATA thread_data = { 1, NULL };

  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,  // num_layers
                            0,  // is_residue
                            0,  // ext_width
                            0,  // ext_height
                            0,  // strict_bounds
                            { {
                                  1,                  // in_channels
                                  filter_width,       // filter_width
                                  filter_height,      // filter_height
                                  channels,           // out_channels
                                  1,                  // skip_width
                                  1,                  // skip_height
                                  0,                  // maxpool
                                  weights,            // weights
                                  bias,               // bias
                                  PADDING_SAME_ZERO,  // pad
                                  NONE,               // activation
                                  0,                  // deconvolve
                                  0,                  // branch
                                  BRANCH_NO_COPY,     // branch_copy_type
                                  BRANCH_NOC,         // branch_combine_type
                                  {},                 // branch_config
                                  {},                 // bn_params
                                  -1,                 // output_num
                              },
                              {
                                  channels,           // in_channels
                                  filter_width,       // filter_width
                                  filter_height,      // filter_height
                                  channels,           // out_channels
                                  1,                  // skip_width
                                  1,                  // skip_height
                                  0,                  // maxpool
                                  nullptr,            // weights
                                  nullptr,            // bias
                                  PADDING_SAME_ZERO,  // pad
                                  NONE,               // activation
                                  0,                  // deconvolve
                                  0,                  // branch
                                  BRANCH_INPUT,       // branch_copy_type
                                  BRANCH_NOC,         // branch_combine_type
                                  {
                                      0x02,  // input_to_branches
                                      0,     // channels_to_copy
                                      0x00,  // branches_to_combine
                                  },
                                  {},  // bn_params
                                  -1,  // output_num
                              },
                              {
                                  channels,           // in_channels
                                  filter_width,       // filter_width
                                  filter_height,      // filter_height
                                  channels,           // out_channels
                                  1,                  // skip_width
                                  1,                  // skip_height
                                  0,                  // maxpool
                                  nullptr,            // weights
                                  nullptr,            // bias
                                  PADDING_SAME_ZERO,  // pad
                                  NONE,               // activation
                                  0,                  // deconvolve
                                  1,                  // branch
                                  BRANCH_NO_COPY,     // branch_copy_type
                                  BRANCH_NOC,         // branch_combine_type
                                  {},                 // branch_config
                                  {},                 // bn_params
                                  -1,                 // output_num
                              },
                              {
                                  channels,           // in_channels
                                  filter_width,       // filter_width
                                  filter_height,      // filter_height
                                  channels,           // out_channels
                                  1,                  // skip_width
                                  1,                  // skip_height
                                  0,                  // maxpool
                                  nullptr,            // weights
                                  nullptr,            // bias
                                  PADDING_SAME_ZERO,  // pad
                                  NONE,               // activation
                                  0,                  // deconvolve
                                  1,                  // branch
                                  BRANCH_NO_COPY,     // branch_copy_type
                                  BRANCH_NOC,         // branch_combine_type
                                  {},                 // branch_config
                                  {},                 // bn_params
                                  -1,                 // output_num
                              },
                              {
                                  channels,           // in_channels
                                  filter_width,       // filter_width
                                  filter_height,      // filter_height
                                  channels,           // out_channels
                                  1,                  // skip_width
                                  1,                  // skip_height
                                  0,                  // maxpool
                                  nullptr,            // weights
                                  nullptr,            // bias
                                  PADDING_SAME_ZERO,  // pad
                                  NONE,               // activation
                                  0,                  // deconvolve
                                  0,                  // branch
                                  BRANCH_NO_COPY,     // branch_copy_type
                                  BRANCH_CAT,         // branch_combine_type
                                  {
                                      0x00,  // input_to_branches
                                      0,     // channels_to_copy
                                      0x02,  // branches_to_combine
                                  },
                                  {},  // bn_params
                                  -1,  // output_num
                              },
                              {
                                  channels + channels,  // in_channels
                                  filter_width,         // filter_width
                                  filter_height,        // filter_height
                                  1,                    // out_channels
                                  1,                    // skip_width
                                  1,                    // skip_height
                                  0,                    // maxpool
                                  nullptr,              // weights
                                  nullptr,              // bias
                                  PADDING_SAME_ZERO,    // pad
                                  NONE,                 // activation
                                  0,                    // deconvolve
                                  0,                    // branch
                                  BRANCH_NO_COPY,       // branch_copy_type
                                  BRANCH_NOC,           // branch_combine_type
                                  {},                   // branch_config
                                  {},                   // bn_params
                                  0,                    // output_num
                              } } };

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

  CNN_THREAD_DATA thread_data = { 1, NULL };

  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,  // num_layers
                            0,   // is_residue
                            0,   // ext_width
                            0,   // ext_height
                            0,   // strict_bounds
                            {
                                {
                                    1,                  // in_channels
                                    filter_width,       // filter_width
                                    filter_height,      // filter_height
                                    channels,           // out_channels
                                    1,                  // skip_width
                                    1,                  // skip_height
                                    0,                  // maxpool
                                    weights,            // weights
                                    bias,               // bias
                                    PADDING_SAME_ZERO,  // pad
                                    NONE,               // activation
                                    0,                  // deconvolve
                                    0,                  // branch
                                    BRANCH_NO_COPY,     // branch_copy_type
                                    BRANCH_NOC,         // branch_combine_type
                                    {},                 // branch_config
                                    {},                 // bn_params
                                    -1,                 // output_num
                                },
                                {
                                    channels,           // in_channels
                                    filter_width,       // filter_width
                                    filter_height,      // filter_height
                                    channels,           // out_channels
                                    1,                  // skip_width
                                    1,                  // skip_height
                                    0,                  // maxpool
                                    nullptr,            // weights
                                    nullptr,            // bias
                                    PADDING_SAME_ZERO,  // pad
                                    NONE,               // activation
                                    0,                  // deconvolve
                                    0,                  // branch
                                    BRANCH_INPUT,       // branch_copy_type
                                    BRANCH_NOC,         // branch_combine_type
                                    {
                                        0x06,  // input_to_branches
                                        0,     // channels_to_copy
                                        0x00,  // branches_to_combine
                                    },
                                    {},  // bn_params
                                    -1,  // output_num
                                },
                                {
                                    channels,           // in_channels
                                    filter_width,       // filter_width
                                    filter_height,      // filter_height
                                    channels,           // out_channels
                                    1,                  // skip_width
                                    1,                  // skip_height
                                    0,                  // maxpool
                                    nullptr,            // weights
                                    nullptr,            // bias
                                    PADDING_SAME_ZERO,  // pad
                                    NONE,               // activation
                                    0,                  // deconvolve
                                    2,                  // branch
                                    BRANCH_OUTPUT,      // branch_copy_type
                                    BRANCH_NOC,         // branch_combine_type
                                    {
                                        0x08,  // input_to_branches
                                        0,     // channels_to_copy
                                        0x00,  // branches_to_combine
                                    },
                                    {},  // bn_params
                                    -1,  // output_num
                                },
                                {
                                    channels,           // in_channels
                                    filter_width,       // filter_width
                                    filter_height,      // filter_height
                                    channels,           // out_channels
                                    1,                  // skip_width
                                    1,                  // skip_height
                                    0,                  // maxpool
                                    nullptr,            // weights
                                    nullptr,            // bias
                                    PADDING_SAME_ZERO,  // pad
                                    NONE,               // activation
                                    0,                  // deconvolve
                                    3,                  // branch
                                    BRANCH_NO_COPY,     // branch_copy_type
                                    BRANCH_NOC,         // branch_combine_type
                                    {},                 // branch_config
                                    {},                 // bn_params
                                    -1,                 // output_num
                                },
                                {
                                    channels,           // in_channels
                                    filter_width,       // filter_width
                                    filter_height,      // filter_height
                                    channels,           // out_channels
                                    1,                  // skip_width
                                    1,                  // skip_height
                                    0,                  // maxpool
                                    nullptr,            // weights
                                    nullptr,            // bias
                                    PADDING_SAME_ZERO,  // pad
                                    NONE,               // activation
                                    0,                  // deconvolve
                                    2,                  // branch
                                    BRANCH_NO_COPY,     // branch_copy_type
                                    BRANCH_ADD,         // branch_combine_type
                                    {
                                        0x00,  // input_to_branches
                                        0,     // channels_to_copy
                                        0x08,  // branches_to_combine
                                    },
                                    {},  // bn_params
                                    -1,  // output_num
                                },
                                {
                                    channels,           // in_channels
                                    filter_width,       // filter_width
                                    filter_height,      // filter_height
                                    channels,           // out_channels
                                    1,                  // skip_width
                                    1,                  // skip_height
                                    0,                  // maxpool
                                    nullptr,            // weights
                                    nullptr,            // bias
                                    PADDING_SAME_ZERO,  // pad
                                    NONE,               // activation
                                    0,                  // deconvolve
                                    2,                  // branch
                                    BRANCH_NO_COPY,     // branch_copy_type
                                    BRANCH_NOC,         // branch_combine_type
                                    {},                 // branch_config
                                    {},                 // bn_params
                                    -1,                 // output_num
                                },
                                {
                                    channels,           // in_channels
                                    filter_width,       // filter_width
                                    filter_height,      // filter_height
                                    channels,           // out_channels
                                    1,                  // skip_width
                                    1,                  // skip_height
                                    0,                  // maxpool
                                    nullptr,            // weights
                                    nullptr,            // bias
                                    PADDING_SAME_ZERO,  // pad
                                    NONE,               // activation
                                    0,                  // deconvolve
                                    1,                  // branch
                                    BRANCH_NO_COPY,     // branch_copy_type
                                    BRANCH_NOC,         // branch_combine_type
                                    {},                 // branch_config
                                    {},                 // bn_params
                                    -1,                 // output_num
                                },
                                {
                                    channels,           // in_channels
                                    filter_width,       // filter_width
                                    filter_height,      // filter_height
                                    channels,           // out_channels
                                    1,                  // skip_width
                                    1,                  // skip_height
                                    0,                  // maxpool
                                    nullptr,            // weights
                                    nullptr,            // bias
                                    PADDING_SAME_ZERO,  // pad
                                    NONE,               // activation
                                    0,                  // deconvolve
                                    1,                  // branch
                                    BRANCH_NO_COPY,     // branch_copy_type
                                    BRANCH_ADD,         // branch_combine_type
                                    {
                                        0x00,  // input_to_branches
                                        0,     // channels_to_copy
                                        0x0C,  // branches_to_combine
                                    },
                                    {},  // bn_params
                                    -1,  // output_num
                                },
                                {
                                    channels,           // in_channels
                                    filter_width,       // filter_width
                                    filter_height,      // filter_height
                                    channels,           // out_channels
                                    1,                  // skip_width
                                    1,                  // skip_height
                                    0,                  // maxpool
                                    nullptr,            // weights
                                    nullptr,            // bias
                                    PADDING_SAME_ZERO,  // pad
                                    NONE,               // activation
                                    0,                  // deconvolve
                                    0,                  // branch
                                    BRANCH_NO_COPY,     // branch_copy_type
                                    BRANCH_ADD,         // branch_combine_type
                                    {
                                        0x00,  // input_to_branches
                                        0,     // channels_to_copy
                                        0x02,  // branches_to_combine
                                    },
                                    {},  // bn_params
                                    -1,  // output_num
                                },
                                {
                                    channels,           // in_channels
                                    filter_width,       // filter_width
                                    filter_height,      // filter_height
                                    1,                  // out_channels
                                    1,                  // skip_width
                                    1,                  // skip_height
                                    0,                  // maxpool
                                    nullptr,            // weights
                                    nullptr,            // bias
                                    PADDING_SAME_ZERO,  // pad
                                    NONE,               // activation
                                    0,                  // deconvolve
                                    0,                  // branch
                                    BRANCH_NO_COPY,     // branch_copy_type
                                    BRANCH_NOC,         // branch_combine_type
                                    {},                 // branch_config
                                    {},                 // bn_params
                                    0,                  // output_num
                                },
                            } };

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

  CNN_THREAD_DATA thread_data = { 1, NULL };

  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,  // num_layers
                            0,  // is_residue
                            0,  // ext_width
                            0,  // ext_height
                            0,  // strict_bounds
                            {
                                {
                                    1,                  // in_channels
                                    filter_width,       // filter_width
                                    filter_height,      // filter_height
                                    4,                  // out_channels
                                    1,                  // skip_width
                                    1,                  // skip_height
                                    0,                  // maxpool
                                    nullptr,            // weights
                                    nullptr,            // bias
                                    PADDING_SAME_ZERO,  // pad
                                    NONE,               // activation
                                    0,                  // deconvolve
                                    0,                  // branch
                                    BRANCH_OUTPUT,      // branch_copy_type
                                    BRANCH_NOC,         // branch_combine_type
                                    {
                                        0x02,  // input_to_branches
                                        2,     // channels_to_copy
                                        0x00,  // branches_to_combine
                                    },
                                    {},  // bn_params
                                    -1,  // output_num
                                },
                                {
                                    4,                  // in_channels
                                    filter_width,       // filter_width
                                    filter_height,      // filter_height
                                    2,                  // out_channels
                                    1,                  // skip_width
                                    1,                  // skip_height
                                    0,                  // maxpool
                                    nullptr,            // weights
                                    nullptr,            // bias
                                    PADDING_SAME_ZERO,  // pad
                                    NONE,               // activation
                                    0,                  // deconvolve
                                    0,                  // branch
                                    BRANCH_NO_COPY,     // branch_copy_type
                                    BRANCH_CAT,         // branch_combine_type
                                    {
                                        0x00,  // input_to_branches
                                        0,     // channels_to_copy
                                        0x02,  // branches_to_combine
                                    },
                                    {},  // bn_params
                                    -1,  // output_num
                                },
                                {
                                    4,                  // in_channels
                                    filter_width,       // filter_width
                                    filter_height,      // filter_height
                                    1,                  // out_channels
                                    1,                  // skip_width
                                    1,                  // skip_height
                                    0,                  // maxpool
                                    nullptr,            // weights
                                    nullptr,            // bias
                                    PADDING_SAME_ZERO,  // pad
                                    NONE,               // activation
                                    0,                  // deconvolve
                                    0,                  // branch
                                    BRANCH_NO_COPY,     // branch_copy_type
                                    BRANCH_NOC,         // branch_combine_type
                                    {},                 // branch_config
                                    {},                 // bn_params
                                    0,                  // output_num
                                },
                            } };

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

  CNN_THREAD_DATA thread_data = { 1, NULL };

  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,  // num_layers
                            0,  // is_residue
                            0,  // ext_width
                            0,  // ext_height
                            0,  // strict_bounds
                            {
                                {
                                    1,                  // in_channels
                                    filter_width,       // filter_width
                                    filter_height,      // filter_height
                                    2,                  // out_channels
                                    1,                  // skip_width
                                    1,                  // skip_height
                                    0,                  // maxpool
                                    weights,            // weights
                                    bias,               // bias
                                    PADDING_SAME_ZERO,  // pad
                                    NONE,               // activation
                                    0,                  // deconvolve
                                    0,                  // branch
                                    BRANCH_INPUT,       // branch_copy_type
                                    BRANCH_NOC,         // branch_combine_type
                                    {
                                        0x06,  // input_to_branches
                                        0,     // channels_to_copy
                                        0x00,  // branches_to_combine
                                    },
                                    {},  // bn_params
                                    -1,  // output_num
                                },
                                {
                                    1,                  // in_channels
                                    filter_width,       // filter_width
                                    filter_height,      // filter_height
                                    2,                  // out_channels
                                    1,                  // skip_width
                                    1,                  // skip_height
                                    0,                  // maxpool
                                    weights,            // weights
                                    bias,               // bias
                                    PADDING_SAME_ZERO,  // pad
                                    NONE,               // activation
                                    0,                  // deconvolve
                                    2,                  // branch
                                    BRANCH_NO_COPY,     // branch_copy_type
                                    BRANCH_CAT,         // branch_combine_type
                                    {
                                        0x00,  // input_to_branches
                                        0,     // channels_to_copy
                                        0x03,  // branches_to_combine
                                    },
                                    {},  // bn_params
                                    -1,  // output_num
                                },
                                {
                                    2,                  // in_channels
                                    filter_width,       // filter_width
                                    filter_height,      // filter_height
                                    2,                  // out_channels
                                    1,                  // skip_width
                                    1,                  // skip_height
                                    0,                  // maxpool
                                    weights,            // weights
                                    bias,               // bias
                                    PADDING_SAME_ZERO,  // pad
                                    NONE,               // activation
                                    0,                  // deconvolve
                                    0,                  // branch
                                    BRANCH_NO_COPY,     // branch_copy_type
                                    BRANCH_CAT,         // branch_combine_type
                                    {
                                        0x00,  // input_to_branches
                                        0,     // channels_to_copy
                                        0x04,  // branches_to_combine
                                    },
                                    {},  // bn_params
                                    0,   // output_num
                                },
                            } };

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

  CNN_THREAD_DATA thread_data = { 1, NULL };

  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_gamma
    bn_beta,   // bn_beta
    bn_mean,   // bn_mean
    bn_std,    // bn_std
  };

  CNN_CONFIG cnn_config = {
    1,  // num_layers
    0,  // is_residue
    0,  // ext_width
    0,  // ext_height
    0,  // strict_bounds
    {
        {
            1,               // in_channels
            filter_width,    // filter_width
            filter_height,   // filter_height
            3,               // out_channels
            7,               // skip_width
            7,               // skip_height
            0,               // maxpool
            kernel,          // weights
            bias,            // bias
            PADDING_VALID,   // pad
            RELU,            // activation
            0,               // deconvolve
            0,               // branch
            BRANCH_NO_COPY,  // branch_copy_type
            BRANCH_NOC,      // branch_combine_type
            {},              // branch_config
            bn_params,       // bn_params
            0,               // output_num
        },
    },
  };

  CNN_THREAD_DATA thread_data = { 1, NULL };

  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,  // num_layers
    0,  // is_residue
    0,  // ext_width
    0,  // ext_height
    0,  // strict_bounds
    {
        {
            1,                  // in_channels
            filter_width,       // filter_width
            filter_height,      // filter_height
            4,                  // out_channels
            1,                  // skip_width
            1,                  // skip_height
            0,                  // maxpool
            weights,            // weights
            bias,               // bias
            PADDING_SAME_ZERO,  // pad
            NONE,               // activation
            0,                  // deconvolve
            0,                  // branch
            BRANCH_NO_COPY,     // branch_copy_type
            BRANCH_NOC,         // branch_combine_type
            {},                 // branch_config
            {},                 // bn_params
            0,                  // output_num
        },
    },
  };

  CNN_THREAD_DATA thread_data = { 1, NULL };

  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, NULL };

  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]));
  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_);
}
