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

#include "backendsCommon/test/EndToEndTestImpl.hpp"

#include "backendsCommon/test/AdditionEndToEndTestImpl.hpp"
#include "backendsCommon/test/Pooling2dEndToEndTestImpl.hpp"

#include <doctest/doctest.h>

TEST_SUITE("TosaRefEndToEnd")
{
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);
}

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

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

}