//
// Copyright © 2022-2024 Arm Ltd and Contributors. All rights reserved.
// SPDX-License-Identifier: MIT
//

#include "backendsCommon/test/EndToEndTestImpl.hpp"

#include "backendsCommon/test/AdditionEndToEndTestImpl.hpp"
#include "backendsCommon/test/Convolution2dEndToEndTestImpl.hpp"
#include "backendsCommon/test/ConcatEndToEndTestImpl.hpp"
#include "backendsCommon/test/ElementwiseBinaryEndToEndTestImpl.hpp"
#include "backendsCommon/test/ElementwiseUnaryEndToEndTestImpl.hpp"
#include "backendsCommon/test/MultiplicationEndToEndTestImpl.hpp"
#include "backendsCommon/test/Pooling2dEndToEndTestImpl.hpp"
#include "backendsCommon/test/QuantizationEndToEndTestImpl.hpp"
#include "backendsCommon/test/ReshapeEndToEndTestImpl.hpp"
#include "backendsCommon/test/ResizeEndToEndTestImpl.hpp"
#include "backendsCommon/test/SliceEndToEndTestImpl.hpp"
#include "backendsCommon/test/SplitterEndToEndTestImpl.hpp"
#include "backendsCommon/test/SubtractionEndToEndTestImpl.hpp"
#include "backendsCommon/test/TransposeConvolution2dEndToEndTestImpl.hpp"
#include "backendsCommon/test/TransposeEndToEndTestImpl.hpp"

#include <doctest/doctest.h>

TEST_SUITE("TosaRefEndToEnd")
{
static std::vector<BackendId> tosaDefaultBackends = { "TosaRef" };

// Addition
TEST_CASE("TosaRefAdditionEndtoEndTestFloat32")
{
    AdditionEndToEnd<DataType::Float32>(tosaDefaultBackends);
}

TEST_CASE("TosaRefAdditionEndtoEndTestInt32")
{
    AdditionEndToEnd<DataType::Signed32>(tosaDefaultBackends);
}

TEST_CASE("TosaRefAdditionEndtoEndTestFloat16")
{
    AdditionEndToEndFloat16<DataType::Float16>(tosaDefaultBackends);
}

// Concat
TEST_CASE("TosaRefConcatEndToEndDim0TestFloat32")
{
    ConcatDim0EndToEnd<armnn::DataType::Float32>(tosaDefaultBackends);
}

TEST_CASE("TosaRefConcatEndToEndDim0TestInt32")
{
    ConcatDim0EndToEnd<armnn::DataType::Signed32>(tosaDefaultBackends);
}

TEST_CASE("TosaRefConcatEndToEndDim1TestFloat32")
{
    ConcatDim1EndToEnd<armnn::DataType::Float32>(tosaDefaultBackends);
}

TEST_CASE("TosaRefConcatEndToEndDim1TestInt32")
{
    ConcatDim1EndToEnd<armnn::DataType::Signed32>(tosaDefaultBackends);
}

TEST_CASE("TosaRefConcatEndToEndDim2TestFloat32")
{
    ConcatDim2EndToEnd<armnn::DataType::Float32>(tosaDefaultBackends);
}

TEST_CASE("TosaRefConcatEndToEndDim2TestInt32")
{
    ConcatDim2EndToEnd<armnn::DataType::Signed32>(tosaDefaultBackends);
}

TEST_CASE("TosaRefConcatEndToEndDim3TestFloat32")
{
    ConcatDim3EndToEnd<armnn::DataType::Float32>(tosaDefaultBackends);
}

TEST_CASE("TosaRefConcatEndToEndDim3TestInt32")
{
    ConcatDim3EndToEnd<armnn::DataType::Signed32>(tosaDefaultBackends);
}

// Conv2d
TEST_CASE("TosaRefConv2dEndtoEndTestFloat32")
{
    Convolution2dEndToEnd<armnn::DataType::Float32>(tosaDefaultBackends, armnn::DataLayout::NHWC);
}

TEST_CASE("TosaRefConv2dWithoutBiasEndtoEndTestFloat32")
{
    Convolution2dEndToEnd<armnn::DataType::Float32>(tosaDefaultBackends, armnn::DataLayout::NHWC, false);
}

TEST_CASE("TosaRefConv2dEndtoEndTestInt8")
{
    Convolution2dEndToEnd<armnn::DataType::QSymmS8,
                          armnn::DataType::QSymmS8,
                          armnn::DataType::Signed32>(tosaDefaultBackends, armnn::DataLayout::NHWC);
}

TEST_CASE("TosaRefConv2dWithoutBiasEndtoEndTestInt8")
{
    Convolution2dEndToEnd<armnn::DataType::QSymmS8,
                          armnn::DataType::QSymmS8,
                          armnn::DataType::Signed32>(tosaDefaultBackends, armnn::DataLayout::NHWC, false);
}

// Maximum
TEST_CASE("TosaRefMaximumEndtoEndTestInt8")
{
    ElementwiseBinarySimpleNoReshapeEndToEnd<DataType::Signed32>(tosaDefaultBackends,
                                                                 armnn::BinaryOperation::Maximum);
}

// Pooling
// Average Pool 2D
TEST_CASE("TosaRefAvgPool2DEndtoEndTestFloat32")
{
    AvgPool2dEndToEnd<DataType::Float32>(tosaDefaultBackends);
}

TEST_CASE("TosaRefAvgPool2DEndtoEndTestFloat16")
{
    AvgPool2dEndToEndFloat16<DataType::Float16>(tosaDefaultBackends);
}

TEST_CASE("TosaRefAvgPool2DIgnoreValueEndtoEndTestFloat32")
{
    AvgPool2dEndToEnd<DataType::Float32>(tosaDefaultBackends, PaddingMethod::IgnoreValue);
}

// Max Pool 2D
TEST_CASE("TosaRefMaxPool2DEndtoEndTestFloat32")
{
    MaxPool2dEndToEnd<DataType::Float32>(tosaDefaultBackends);
}

TEST_CASE("TosaRefMaxPool2DEndtoEndTestFloat16")
{
    MaxPool2dEndToEndFloat16<DataType::Float16>(tosaDefaultBackends);
}

TEST_CASE("TosaRefMaxPool2DIgnoreValueEndtoEndTestFloat32")
{
    MaxPool2dEndToEnd<DataType::Float32>(tosaDefaultBackends, PaddingMethod::IgnoreValue);
}

TEST_CASE("TosaRefMaxPool2DTwoLayerEndtoEndTestFloat32")
{
    MaxPool2dTwoLayerEndToEnd<DataType::Float32>(tosaDefaultBackends);
}

TEST_CASE("TosaRefMaxPool2DThreeLayerEndtoEndTestFloat32")
{
    MaxPool2dThreeLayerEndToEnd<DataType::Float32>(tosaDefaultBackends);
}

// Quantization
TEST_CASE("TosaRefQuantizeFromFloat32ToInt8")
{
    QuantizationEndToEndFloat32<DataType::QAsymmS8>(tosaDefaultBackends);
}

TEST_CASE("TosaRefQuantizeFromFloat32ToInt16")
{
    QuantizationEndToEndFloat32<DataType::QSymmS16>(tosaDefaultBackends);
}

TEST_CASE("TosaRefQuantizeFromFloat32ToInt32")
{
    QuantizationEndToEndFloat32<DataType::Signed32>(tosaDefaultBackends);
}

TEST_CASE("TosaRefQuantizeFromFloat16ToInt8")
{
    QuantizationEndToEndFloat16<DataType::QAsymmS8>(tosaDefaultBackends);
}

TEST_CASE("TosaRefQuantizeFromFloat16ToInt16")
{
    QuantizationEndToEndFloat16<DataType::QSymmS16>(tosaDefaultBackends);
}

TEST_CASE("TosaRefQuantizeFromFloat16ToInt32")
{
    QuantizationEndToEndFloat16<DataType::Signed32>(tosaDefaultBackends);
}

// Reshape
TEST_CASE("TosaRefReshapeEndtoEndTestFloat32")
{
    ReshapeEndToEnd<DataType::Float32>(tosaDefaultBackends);
}

TEST_CASE("TosaRefReshapeEndtoEndTestInt32")
{
    ReshapeEndToEnd<DataType::Signed32>(tosaDefaultBackends);
}

TEST_CASE("TosaRefReshapeEndtoEndTestFloat16")
{
    ReshapeEndToEndFloat16<DataType::Float16>(tosaDefaultBackends);
}

TEST_CASE("TosaRefRsqrtEndtoEndTestFloat32")
{
    ElementwiseUnarySimpleEndToEnd<armnn::DataType::Float32>(tosaDefaultBackends,
                                                             UnaryOperation::Rsqrt);
}

// Resize
TEST_CASE("TosaRefResizeNearestNeighborEndToEndFloat32AlignCornersNhwcTest")
{
    ResizeNearestNeighborEndToEnd<armnn::DataType::Float32>(tosaDefaultBackends, armnn::DataLayout::NHWC, true, false);
}

TEST_CASE("TosaRefResizeNearestNeighborEndToEndFloat32HalfPixelNhwcTest")
{
    ResizeNearestNeighborEndToEnd<armnn::DataType::Float32>(tosaDefaultBackends, armnn::DataLayout::NHWC, false, true);
}

TEST_CASE("TosaRefResizeNearestNeighborEndToEndFloat16AlignCornersNhwcTest")
{
    ResizeNearestNeighborEndToEnd<armnn::DataType::Float16>(tosaDefaultBackends, armnn::DataLayout::NHWC, true, false);
}

TEST_CASE("TosaRefResizeNearestNeighborEndToEndFloat16HalfPixelNhwcTest")
{
    ResizeNearestNeighborEndToEnd<armnn::DataType::Float16>(tosaDefaultBackends, armnn::DataLayout::NHWC, false, true);
}

TEST_CASE("TosaRefResizeNearestNeighborEndToEndInt8AlignCornersNhwcTest")
{
    ResizeNearestNeighborEndToEnd<armnn::DataType::QSymmS8>(tosaDefaultBackends, armnn::DataLayout::NHWC, true, false);
}

TEST_CASE("TosaRefResizeNearestNeighborEndToEndInt8HalfPixelNhwcTest")
{
    ResizeNearestNeighborEndToEnd<armnn::DataType::QSymmS8>(tosaDefaultBackends, armnn::DataLayout::NHWC, false, true);
}

TEST_CASE("TosaRefResizeNearestNeighborEndToEndInt16AlignCornersNhwcTest")
{
    ResizeNearestNeighborEndToEnd<armnn::DataType::QSymmS16>(tosaDefaultBackends, armnn::DataLayout::NHWC, true, false);
}

TEST_CASE("TosaRefResizeNearestNeighborEndToEndInt16HalfPixelNhwcTest")
{
    ResizeNearestNeighborEndToEnd<armnn::DataType::QSymmS16>(tosaDefaultBackends, armnn::DataLayout::NHWC, false, true);
}

// Slice
TEST_CASE("TosaRefSliceEndtoEndTestFloat32")
{
    SliceEndToEnd<DataType::Float32>(tosaDefaultBackends);
}

TEST_CASE("TosaRefSliceEndtoEndTestInt32")
{
    SliceEndToEnd<DataType::Signed32>(tosaDefaultBackends);
}

TEST_CASE("TosaRefSliceEndtoEndTestFloat16")
{
    SliceEndToEndFloat16<DataType::Float16>(tosaDefaultBackends);
}

// Split
TEST_CASE("TosaRefSplit1dEndtoEndTestBoolean")
{
    Splitter1dEndToEnd<DataType::Boolean>(tosaDefaultBackends);
}

TEST_CASE("TosaRefSplit1dEndtoEndTestInt8")
{
    Splitter1dEndToEnd<DataType::QSymmS8>(tosaDefaultBackends);
}

TEST_CASE("TosaRefSplit1dEndtoEndTestSigned16")
{
    Splitter1dEndToEnd<DataType::QSymmS16>(tosaDefaultBackends);
}

TEST_CASE("TosaRefSplit1dEndtoEndTestInt32")
{
    Splitter1dEndToEnd<DataType::Signed32>(tosaDefaultBackends);
}

TEST_CASE("TosaRefSplit1dEndtoEndTestFloat16")
{
    Splitter1dEndToEndFloat16<DataType::Float16>(tosaDefaultBackends);
}

TEST_CASE("TosaRefSplit1dEndToEndFloat32")
{
    Splitter1dEndToEnd<DataType::Float32>(tosaDefaultBackends);
}

TEST_CASE("TosaRefSplit2dDim0EndtoEndTestFloat32")
{
    Splitter2dDim0EndToEnd<DataType::Float32>(tosaDefaultBackends);
}

TEST_CASE("TosaRefSplit2dDim1EndtoEndTestFloat32")
{
    Splitter2dDim1EndToEnd<DataType::Float32>(tosaDefaultBackends);
}

TEST_CASE("TosaRefSplit3dDim0EndtoEndTestFloat32")
{
    Splitter3dDim0EndToEnd<DataType::Float32>(tosaDefaultBackends);
}

TEST_CASE("TosaRefSplit3dDim1EndtoEndTestFloat32")
{
    Splitter3dDim1EndToEnd<DataType::Float32>(tosaDefaultBackends);
}

TEST_CASE("TosaRefSplit3dDim1EndtoEndTestFloat16")
{
    Splitter3dDim1EndToEndFloat16<DataType::Float16>(tosaDefaultBackends);
}

TEST_CASE("TosaRefSplit3dDim1EndtoEndTestBoolean")
{
    Splitter3dDim1EndToEnd<DataType::Boolean>(tosaDefaultBackends);
}

TEST_CASE("TosaRefSplit3dDim1EndtoEndTestInt8")
{
    Splitter3dDim1EndToEnd<DataType::QSymmS8>(tosaDefaultBackends);
}

TEST_CASE("TosaRefSplit3dDim1EndtoEndTestSigned16")
{
    Splitter3dDim1EndToEnd<DataType::QSymmS16>(tosaDefaultBackends);
}

TEST_CASE("TosaRefSplit3dDim1EndtoEndTestInt32")
{
    Splitter3dDim1EndToEnd<DataType::Signed32>(tosaDefaultBackends);
}

TEST_CASE("TosaRefSplit3dDim2EndtoEndTestInt8")
{
    Splitter3dDim2EndToEnd<DataType::QAsymmS8>(tosaDefaultBackends);
}

TEST_CASE("TosaRefSplit4dDim0EndtoEndTestInt8")
{
    Splitter4dDim0EndToEnd<DataType::QSymmS8>(tosaDefaultBackends);
}

TEST_CASE("TosaRefSplit4dDim1EndtoEndTestInt8")
{
    Splitter4dDim1EndToEnd<DataType::QSymmS8>(tosaDefaultBackends);
}

TEST_CASE("TosaRefSplit4dDim2EndtoEndTestBoolean")
{
    Splitter4dDim2EndToEnd<DataType::Boolean>(tosaDefaultBackends);
}

TEST_CASE("TosaRefSplit4dDim2EndtoEndTestInt8")
{
    Splitter4dDim2EndToEnd<DataType::QSymmS8>(tosaDefaultBackends);
}

TEST_CASE("TosaRefSplit4dDim2EndtoEndTestInt16")
{
    Splitter4dDim2EndToEnd<DataType::QSymmS16>(tosaDefaultBackends);
}

TEST_CASE("TosaRefSplit4dDim2EndtoEndTestInt32")
{
    Splitter4dDim2EndToEnd<DataType::Signed32>(tosaDefaultBackends);
}

TEST_CASE("TosaRefSplit4dDim2EndtoEndTestFloat16")
{
    Splitter4dDim2EndToEndFloat16<DataType::Float16>(tosaDefaultBackends);
}

TEST_CASE("TosaRefSplit4dDim3EndtoEndTestInt8")
{
    Splitter4dDim3EndToEnd<DataType::QSymmS8>(tosaDefaultBackends);
}

// Subtraction
TEST_CASE("TosaRefSubtractionEndtoEndTestFloat32")
{
    SubtractionEndToEnd<DataType::Float32>(tosaDefaultBackends);
}

TEST_CASE("TosaRefSubtractionEndtoEndTestInt32")
{
    SubtractionEndToEnd<DataType::Signed32>(tosaDefaultBackends);
}

TEST_CASE("TosaRefSubtractionEndtoEndTestFloat16")
{
    SubtractionEndToEndFloat16<DataType::Float16>(tosaDefaultBackends);
}

TEST_CASE("TosaRefMultiplicationEndtoEndTestFloat32")
{
    MultiplicationEndToEnd<DataType::Float32>(tosaDefaultBackends);
}

TEST_CASE("TosaRefMultiplicationEndtoEndTestInt32")
{
    MultiplicationEndToEnd<DataType::Signed32>(tosaDefaultBackends);
}

TEST_CASE("TosaRefMultiplicationEndtoEndTestFloat16")
{
    MultiplicationEndToEndFloat16<DataType::Float16>(tosaDefaultBackends);
}

// TransposeConvolution2d
TEST_CASE("TosaRefTransposeConvolution2dEndToEndFloatNhwcTest")
{
    TransposeConvolution2dEndToEnd<armnn::DataType::Float32, armnn::DataType::Float32>(
        tosaDefaultBackends, armnn::DataLayout::NHWC);
}

TEST_CASE("TosaRefSimpleTransposeConvolution2dEndToEndFloatNhwcTest")
{
    SimpleTransposeConvolution2dEndToEnd<armnn::DataType::Float32, armnn::DataType::Float32>(
        tosaDefaultBackends, armnn::DataLayout::NHWC);
}

// Transpose
TEST_CASE("TosaRefTransposeEndtoEndTestFloat32")
{
    TransposeEndToEnd<armnn::DataType::Float32>(tosaDefaultBackends);
}

}