//
// Copyright © 2017 Arm Ltd. All rights reserved.
// SPDX-License-Identifier: MIT
//

#include <boost/test/unit_test.hpp>
#include "ParserFlatbuffersFixture.hpp"
#include "../TfLiteParser.hpp"

#include <string>
#include <iostream>

using armnnTfLiteParser::TfLiteParser;

BOOST_AUTO_TEST_SUITE(TensorflowLiteParser)

struct ResizeBilinearFixture : public ParserFlatbuffersFixture
{
    explicit ResizeBilinearFixture(const std::string & inputShape,
                                   const std::string & outputShape,
                                   const std::string & sizeShape,
                                   const std::string & sizeData)
    {
        m_JsonString = R"(
            {
                "version": 3,
                "operator_codes": [ { "builtin_code": "RESIZE_BILINEAR" } ],
                "subgraphs": [ {
                    "tensors": [
                        {
                            "shape": )" + sizeShape + R"( ,
                            "type": "INT32",
                            "buffer": 0,
                            "name": "sizeTensor",
                            "quantization": {
                                "min": [ 0.0 ],
                                "max": [ 255.0 ],
                                "scale": [ 1.0 ],
                                "zero_point": [ 0 ],
                            }
                        },
                        {
                            "shape": )" + inputShape + R"(,
                            "type": "FLOAT32",
                            "buffer": 1,
                            "name": "InputTensor",
                            "quantization": {
                                "min": [ 0.0 ],
                                "max": [ 255.0 ],
                                "scale": [ 1.0 ],
                                "zero_point": [ 0 ],
                            }
                        },
                        {
                            "shape": )" + outputShape + R"( ,
                            "type": "FLOAT32",
                            "buffer": 2,
                            "name": "OutputTensor",
                            "quantization": {
                                "min": [ 0.0 ],
                                "max": [ 255.0 ],
                                "scale": [ 1.0 ],
                                "zero_point": [ 0 ],
                            }
                        }
                    ],
                "inputs": [ 1 ],
                "outputs": [ 2 ],
                "operators": [
                    {
                        "opcode_index": 0,
                        "inputs": [ 1, 0 ],
                        "outputs": [ 2 ],
                        "builtin_options_type": "ResizeBilinearOptions",
                        "builtin_options": {
                        },
                        "custom_options_format": "FLEXBUFFERS"
                    }
                ],
              } ],
              "buffers" : [
                  { "data": )" + sizeData + R"(, },
                  { },
                  { },
              ]
            }
      )";
      Setup();
    }
};


struct SimpleResizeBilinearFixture : ResizeBilinearFixture
{
    SimpleResizeBilinearFixture()
        : ResizeBilinearFixture("[ 1, 3, 3, 1 ]",         // inputShape
                                "[ 1, 5, 5, 1 ]",         // outputShape
                                "[ 2 ]",                  // sizeShape
                                "[  5,0,0,0, 5,0,0,0 ]")  // sizeData
    {}
};

BOOST_FIXTURE_TEST_CASE(ParseResizeBilinear, SimpleResizeBilinearFixture)
{
    RunTest<4, armnn::DataType::Float32>(
                0,
                {{"InputTensor", { 0.0f, 1.0f, 2.0f,
                                   3.0f, 4.0f, 5.0f,
                                   6.0f, 7.0f, 8.0f }}},
                {{"OutputTensor", { 0.0f, 0.6f, 1.2f, 1.8f, 2.0f,
                                    1.8f, 2.4f, 3.0f, 3.6f, 3.8f,
                                    3.6f, 4.2f, 4.8f, 5.4f, 5.6f,
                                    5.4f, 6.0f, 6.6f, 7.2f, 7.4f,
                                    6.0f, 6.6f, 7.2f, 7.8f, 8.0f }}}
                );
}

BOOST_AUTO_TEST_SUITE_END()
