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

#include "ComparisonTestHelper.hpp"

#include <armnn_delegate.hpp>

#include <flatbuffers/flatbuffers.h>
#include <tensorflow/lite/interpreter.h>
#include <tensorflow/lite/kernels/register.h>
#include <tensorflow/lite/model.h>
#include <tensorflow/lite/schema/schema_generated.h>
#include <tensorflow/lite/version.h>

#include <doctest/doctest.h>

namespace armnnDelegate
{

void EqualFP32Test(std::vector<armnn::BackendId>& backends)
{
    std::vector<int32_t> input0Shape { 2, 2, 2, 2 };
    std::vector<int32_t> input1Shape { 2, 2, 2, 2 };
    std::vector<int32_t> expectedOutputShape { 2, 2, 2, 2 };

    std::vector<float> input0Values =
    {
        1.f, 1.f, 1.f, 1.f, 5.f, 5.f, 5.f, 5.f,
        3.f, 3.f, 3.f, 3.f, 4.f, 4.f, 4.f, 4.f
    };

    std::vector<float> input1Values =
    {
        1.f, 1.f, 1.f, 1.f, 3.f, 3.f, 3.f, 3.f,
        5.f, 5.f, 5.f, 5.f, 4.f, 4.f, 4.f, 4.f
    };

    std::vector<bool> expectedOutputValues =
    {
        1, 1, 1, 1, 0, 0, 0, 0,
        0, 0, 0, 0, 1, 1, 1, 1
    };


    ComparisonTest<float>(tflite::BuiltinOperator_EQUAL,
                          ::tflite::TensorType_FLOAT32,
                          backends,
                          input0Shape,
                          input1Shape,
                          expectedOutputShape,
                          input0Values,
                          input1Values,
                          expectedOutputValues);
}

void EqualBroadcastTest(std::vector<armnn::BackendId>& backends)
{
    std::vector<int32_t> input0Shape { 1, 2, 2, 3 };
    std::vector<int32_t> input1Shape { 1, 1, 1, 3 };
    std::vector<int32_t> expectedOutputShape { 1, 2, 2, 3 };

    std::vector<float> input0Values
    {
        1.f, 2.f, 3.f,  4.f,  5.f,  6.f,
        7.f, 8.f, 9.f, 10.f, 11.f, 12.f
    };
    std::vector<float> input1Values { 4.f, 5.f, 6.f };
    // Set output data
    std::vector<bool> expectedOutputValues
    {
        0, 0, 0, 1, 1, 1,
        0, 0, 0, 0, 0, 0
    };
    ComparisonTest<float>(tflite::BuiltinOperator_EQUAL,
                          ::tflite::TensorType_FLOAT32,
                          backends,
                          input0Shape,
                          input1Shape,
                          expectedOutputShape,
                          input0Values,
                          input1Values,
                          expectedOutputValues);
}

void EqualInt32Test(std::vector<armnn::BackendId>& backends)
{
    std::vector<int32_t> input0Shape { 1, 2, 2, 1 };
    std::vector<int32_t> input1Shape { 1, 2, 2, 1 };
    std::vector<int32_t> expectedOutputShape { 1, 2, 2, 1 };

    std::vector<int32_t> input0Values = { 1, 5, 6, 4 };

    std::vector<int32_t> input1Values = { 1, 3, 9, 4 };

    std::vector<bool> expectedOutputValues = { 1, 0, 0, 1 };

    ComparisonTest<int32_t>(tflite::BuiltinOperator_EQUAL,
                            ::tflite::TensorType_INT32,
                            backends,
                            input0Shape,
                            input1Shape,
                            expectedOutputShape,
                            input0Values,
                            input1Values,
                            expectedOutputValues);
}

void NotEqualFP32Test(std::vector<armnn::BackendId>& backends)
{
    std::vector<int32_t> input0Shape { 2, 2, 2, 2 };
    std::vector<int32_t> input1Shape { 2, 2, 2, 2 };
    std::vector<int32_t> expectedOutputShape { 2, 2, 2, 2 };

    std::vector<float> input0Values =
    {
        1.f, 1.f, 1.f, 1.f, 5.f, 5.f, 5.f, 5.f,
        3.f, 3.f, 3.f, 3.f, 4.f, 4.f, 4.f, 4.f
    };

    std::vector<float> input1Values =
    {
        1.f, 1.f, 1.f, 1.f, 3.f, 3.f, 3.f, 3.f,
        5.f, 5.f, 5.f, 5.f, 4.f, 4.f, 4.f, 4.f
    };

    std::vector<bool> expectedOutputValues =
    {
        0, 0, 0, 0, 1, 1, 1, 1,
        1, 1, 1, 1, 0, 0, 0, 0
    };

    ComparisonTest<float>(tflite::BuiltinOperator_NOT_EQUAL,
                          ::tflite::TensorType_FLOAT32,
                          backends,
                          input0Shape,
                          input1Shape,
                          expectedOutputShape,
                          input0Values,
                          input1Values,
                          expectedOutputValues);
}

void NotEqualBroadcastTest(std::vector<armnn::BackendId>& backends)
{
    std::vector<int32_t> input0Shape { 1, 2, 2, 3 };
    std::vector<int32_t> input1Shape { 1, 1, 1, 3 };
    std::vector<int32_t> expectedOutputShape { 1, 2, 2, 3 };

    std::vector<float> input0Values
    {
        1.f, 2.f, 3.f,  4.f,  5.f,  6.f,
        7.f, 8.f, 9.f, 10.f, 11.f, 12.f
    };
    std::vector<float> input1Values { 4.f, 5.f, 6.f };
    // Set output data
    std::vector<bool> expectedOutputValues
    {
        1, 1, 1, 0, 0, 0,
        1, 1, 1, 1, 1, 1
    };
    ComparisonTest<float>(tflite::BuiltinOperator_NOT_EQUAL,
                          ::tflite::TensorType_FLOAT32,
                          backends,
                          input0Shape,
                          input1Shape,
                          expectedOutputShape,
                          input0Values,
                          input1Values,
                          expectedOutputValues);
}

void NotEqualInt32Test(std::vector<armnn::BackendId>& backends)
{
    std::vector<int32_t> input0Shape { 1, 2, 2, 1 };
    std::vector<int32_t> input1Shape { 1, 2, 2, 1 };
    std::vector<int32_t> expectedOutputShape { 1, 2, 2, 1 };

    std::vector<int32_t> input0Values = { 1, 5, 6, 4 };

    std::vector<int32_t> input1Values = { 1, 3, 9, 4 };

    std::vector<bool> expectedOutputValues = { 0, 1, 1, 0 };

    ComparisonTest<int32_t>(tflite::BuiltinOperator_NOT_EQUAL,
                            ::tflite::TensorType_INT32,
                            backends,
                            input0Shape,
                            input1Shape,
                            expectedOutputShape,
                            input0Values,
                            input1Values,
                            expectedOutputValues);
}

void GreaterFP32Test(std::vector<armnn::BackendId>& backends)
{
    std::vector<int32_t> input0Shape { 1, 2, 2, 1 };
    std::vector<int32_t> input1Shape { 1, 2, 2, 1 };
    std::vector<int32_t> expectedOutputShape { 1, 2, 2, 1 };

    std::vector<float> input0Values = { 1, 5, 6, 4 };

    std::vector<float> input1Values = { 1, 3, 9, 4 };

    std::vector<bool> expectedOutputValues = { 0, 1, 0, 0 };

    ComparisonTest<float>(tflite::BuiltinOperator_GREATER,
                          ::tflite::TensorType_FLOAT32,
                          backends,
                          input0Shape,
                          input1Shape,
                          expectedOutputShape,
                          input0Values,
                          input1Values,
                          expectedOutputValues);
}

void GreaterBroadcastTest(std::vector<armnn::BackendId>& backends)
{
    std::vector<int32_t> input0Shape { 1, 2, 2, 3 };
    std::vector<int32_t> input1Shape { 1, 1, 1, 3 };
    std::vector<int32_t> expectedOutputShape { 1, 2, 2, 3 };

    std::vector<float> input0Values
    {
        1.f, 2.f, 3.f,  4.f,  5.f,  6.f,
        7.f, 8.f, 9.f, 10.f, 11.f, 12.f
    };
    std::vector<float> input1Values { 4.f, 5.f, 6.f };

    std::vector<bool> expectedOutputValues
    {
        0, 0, 0, 0, 0, 0,
        1, 1, 1, 1, 1, 1
    };
    ComparisonTest<float>(tflite::BuiltinOperator_GREATER,
                          ::tflite::TensorType_FLOAT32,
                          backends,
                          input0Shape,
                          input1Shape,
                          expectedOutputShape,
                          input0Values,
                          input1Values,
                          expectedOutputValues);
}

void GreaterInt32Test(std::vector<armnn::BackendId>& backends)
{
    std::vector<int32_t> input0Shape { 1, 2, 2, 1 };
    std::vector<int32_t> input1Shape { 1, 2, 2, 1 };
    std::vector<int32_t> expectedOutputShape { 1, 2, 2, 1 };

    std::vector<int32_t> input0Values = { 1, 5, 6, 4 };

    std::vector<int32_t> input1Values = { 1, 3, 9, 4 };

    std::vector<bool> expectedOutputValues = { 0, 1, 0, 0 };

    ComparisonTest<int32_t>(tflite::BuiltinOperator_GREATER,
                            ::tflite::TensorType_INT32,
                            backends,
                            input0Shape,
                            input1Shape,
                            expectedOutputShape,
                            input0Values,
                            input1Values,
                            expectedOutputValues);
}

void GreaterEqualFP32Test(std::vector<armnn::BackendId>& backends)
{
    std::vector<int32_t> input0Shape { 1, 2, 2, 1 };
    std::vector<int32_t> input1Shape { 1, 2, 2, 1 };
    std::vector<int32_t> expectedOutputShape { 1, 2, 2, 1 };

    std::vector<float> input0Values = { 1.f, 5.f, 6.f, 4.f };

    std::vector<float> input1Values = { 1.f, 3.f, 9.f, 4.f };

    std::vector<bool> expectedOutputValues = { true, true, false, true };

    ComparisonTest<float>(tflite::BuiltinOperator_GREATER_EQUAL,
                          ::tflite::TensorType_FLOAT32,
                          backends,
                          input0Shape,
                          input1Shape,
                          expectedOutputShape,
                          input0Values,
                          input1Values,
                          expectedOutputValues);
}

void GreaterEqualBroadcastTest(std::vector<armnn::BackendId>& backends)
{
    std::vector<int32_t> input0Shape { 1, 2, 2, 3 };
    std::vector<int32_t> input1Shape { 1, 1, 1, 3 };
    std::vector<int32_t> expectedOutputShape { 1, 2, 2, 3 };

    std::vector<float> input0Values
    {
        1.f, 2.f, 3.f,  4.f,  5.f,  6.f,
        7.f, 8.f, 9.f, 10.f, 11.f, 12.f
    };
    std::vector<float> input1Values { 4.f, 5.f, 6.f };
    // Set output data
    std::vector<bool> expectedOutputValues
    {
        0, 0, 0, 1, 1, 1,
        1, 1, 1, 1, 1, 1
    };

    ComparisonTest<float>(tflite::BuiltinOperator_GREATER_EQUAL,
                          ::tflite::TensorType_FLOAT32,
                          backends,
                          input0Shape,
                          input1Shape,
                          expectedOutputShape,
                          input0Values,
                          input1Values,
                          expectedOutputValues);
}

void GreaterEqualInt32Test(std::vector<armnn::BackendId>& backends)
{
    std::vector<int32_t> input0Shape { 1, 2, 2, 1 };
    std::vector<int32_t> input1Shape { 1, 2, 2, 1 };
    std::vector<int32_t> expectedOutputShape { 1, 2, 2, 1 };

    std::vector<int32_t> input0Values = { 1, 5, 6, 3 };

    std::vector<int32_t> input1Values = { 1, 3, 9, 4 };

    std::vector<bool> expectedOutputValues = { 1, 1, 0, 0 };

    ComparisonTest<int32_t>(tflite::BuiltinOperator_GREATER_EQUAL,
                            ::tflite::TensorType_INT32,
                            backends,
                            input0Shape,
                            input1Shape,
                            expectedOutputShape,
                            input0Values,
                            input1Values,
                            expectedOutputValues);
}

void LessFP32Test(std::vector<armnn::BackendId>& backends)
{
    std::vector<int32_t> input0Shape { 1, 2, 2, 1 };
    std::vector<int32_t> input1Shape { 1, 2, 2, 1 };
    std::vector<int32_t> expectedOutputShape { 1, 2, 2, 1 };

    std::vector<float> input0Values = { 1.f, 5.f, 6.f, 4.f };

    std::vector<float> input1Values = { 1.f, 3.f, 9.f, 4.f };

    std::vector<bool> expectedOutputValues = { false, false, true, false };

    ComparisonTest<float>(tflite::BuiltinOperator_LESS,
                          ::tflite::TensorType_FLOAT32,
                          backends,
                          input0Shape,
                          input1Shape,
                          expectedOutputShape,
                          input0Values,
                          input1Values,
                          expectedOutputValues);
}

void LessBroadcastTest(std::vector<armnn::BackendId>& backends)
{
    std::vector<int32_t> input0Shape { 1, 2, 2, 3 };
    std::vector<int32_t> input1Shape { 1, 1, 1, 3 };
    std::vector<int32_t> expectedOutputShape { 1, 2, 2, 3 };

    std::vector<float> input0Values
    {
        1.f, 2.f, 3.f,  4.f,  5.f,  6.f,
        7.f, 8.f, 9.f, 10.f, 11.f, 12.f
    };
    std::vector<float> input1Values { 4.f, 5.f, 6.f };

    std::vector<bool> expectedOutputValues
    {
        true, true, true, false, false, false,
        false, false, false, false, false, false
    };

    ComparisonTest<float>(tflite::BuiltinOperator_LESS,
                          ::tflite::TensorType_FLOAT32,
                          backends,
                          input0Shape,
                          input1Shape,
                          expectedOutputShape,
                          input0Values,
                          input1Values,
                          expectedOutputValues);
}

void LessInt32Test(std::vector<armnn::BackendId>& backends)
{
    std::vector<int32_t> input0Shape { 1, 2, 2, 1 };
    std::vector<int32_t> input1Shape { 1, 2, 2, 1 };
    std::vector<int32_t> expectedOutputShape { 1, 2, 2, 1 };

    std::vector<int32_t> input0Values = { 1, 5, 6, 3 };

    std::vector<int32_t> input1Values = { 1, 3, 9, 4 };

    std::vector<bool> expectedOutputValues = { false, false, true, true };

    ComparisonTest<int32_t>(tflite::BuiltinOperator_LESS,
                            ::tflite::TensorType_INT32,
                            backends,
                            input0Shape,
                            input1Shape,
                            expectedOutputShape,
                            input0Values,
                            input1Values,
                            expectedOutputValues);
}

void LessEqualFP32Test(std::vector<armnn::BackendId>& backends)
{
    std::vector<int32_t> input0Shape { 1, 2, 2, 1 };
    std::vector<int32_t> input1Shape { 1, 2, 2, 1 };
    std::vector<int32_t> expectedOutputShape { 1, 2, 2, 1 };

    std::vector<float> input0Values = { 1.f, 5.f, 6.f, 4.f };

    std::vector<float> input1Values = { 1.f, 3.f, 9.f, 4.f };

    std::vector<bool> expectedOutputValues = { true, false, true, true };

    ComparisonTest<float>(tflite::BuiltinOperator_LESS_EQUAL,
                          ::tflite::TensorType_FLOAT32,
                          backends,
                          input0Shape,
                          input1Shape,
                          expectedOutputShape,
                          input0Values,
                          input1Values,
                          expectedOutputValues);
}

void LessEqualBroadcastTest(std::vector<armnn::BackendId>& backends)
{
    std::vector<int32_t> input0Shape { 1, 2, 2, 3 };
    std::vector<int32_t> input1Shape { 1, 1, 1, 3 };
    std::vector<int32_t> expectedOutputShape { 1, 2, 2, 3 };

    std::vector<float> input0Values
    {
        1.f, 2.f, 3.f,  4.f,  5.f,  6.f,
        7.f, 8.f, 9.f, 10.f, 11.f, 12.f
    };
    std::vector<float> input1Values { 4.f, 5.f, 6.f };

    std::vector<bool> expectedOutputValues
    {
        true, true, true, true, true, true,
        false, false, false, false, false, false
    };

    ComparisonTest<float>(tflite::BuiltinOperator_LESS_EQUAL,
                          ::tflite::TensorType_FLOAT32,
                          backends,
                          input0Shape,
                          input1Shape,
                          expectedOutputShape,
                          input0Values,
                          input1Values,
                          expectedOutputValues);
}

void LessEqualInt32Test(std::vector<armnn::BackendId>& backends)
{
    std::vector<int32_t> input0Shape { 1, 2, 2, 1 };
    std::vector<int32_t> input1Shape { 1, 2, 2, 1 };
    std::vector<int32_t> expectedOutputShape { 1, 2, 2, 1 };

    std::vector<int32_t> input0Values = { 1, 5, 6, 3 };

    std::vector<int32_t> input1Values = { 1, 3, 9, 4 };

    std::vector<bool> expectedOutputValues = { true, false, true, true };

    ComparisonTest<int32_t>(tflite::BuiltinOperator_LESS_EQUAL,
                            ::tflite::TensorType_INT32,
                            backends,
                            input0Shape,
                            input1Shape,
                            expectedOutputShape,
                            input0Values,
                            input1Values,
                            expectedOutputValues);
}

TEST_SUITE("Comparison_CpuRefTests")
{

TEST_CASE ("EQUAL_FP32_CpuRef_Test")
{
    std::vector<armnn::BackendId> backends = { armnn::Compute::CpuRef };
    EqualFP32Test(backends);
}

TEST_CASE ("EQUAL_Broadcast_CpuRef_Test")
{
    std::vector<armnn::BackendId> backends = { armnn::Compute::CpuRef };
    EqualBroadcastTest(backends);
}

TEST_CASE ("EQUAL_INT32_CpuRef_Test")
{
    std::vector<armnn::BackendId> backends = { armnn::Compute::CpuRef };
    EqualInt32Test(backends);
}

TEST_CASE ("NOT_EQUAL_FP32_CpuRef_Test")
{
    std::vector<armnn::BackendId> backends = { armnn::Compute::CpuRef };
    NotEqualFP32Test(backends);
}

TEST_CASE ("NOT_EQUAL_Broadcast_CpuRef_Test")
{
    std::vector<armnn::BackendId> backends = { armnn::Compute::CpuRef };
    NotEqualBroadcastTest(backends);
}

TEST_CASE ("NOT_EQUAL_INT32_CpuRef_Test")
{
    std::vector<armnn::BackendId> backends = { armnn::Compute::CpuRef };
    NotEqualInt32Test(backends);
}

TEST_CASE ("GREATER_FP32_CpuRef_Test")
{
    std::vector<armnn::BackendId> backends = { armnn::Compute::CpuRef };
    GreaterFP32Test(backends);
}

TEST_CASE ("GREATER_Broadcast_CpuRef_Test")
{
    std::vector<armnn::BackendId> backends = { armnn::Compute::CpuRef };
    GreaterBroadcastTest(backends);
}

TEST_CASE ("GREATER_INT32_CpuRef_Test")
{
    std::vector<armnn::BackendId> backends = { armnn::Compute::CpuRef };
    GreaterInt32Test(backends);
}

TEST_CASE ("GREATER_EQUAL_FP32_CpuRef_Test")
{
    std::vector<armnn::BackendId> backends = { armnn::Compute::CpuRef };
    GreaterEqualFP32Test(backends);
}

TEST_CASE ("GREATER_EQUAL_Broadcast_CpuRef_Test")
{
    std::vector<armnn::BackendId> backends = { armnn::Compute::CpuRef };
    GreaterEqualBroadcastTest(backends);
}

TEST_CASE ("GREATER_EQUAL_INT32_CpuRef_Test")
{
    std::vector<armnn::BackendId> backends = { armnn::Compute::CpuRef };
    GreaterEqualInt32Test(backends);
}

TEST_CASE ("LESS_FP32_CpuRef_Test")
{
    std::vector<armnn::BackendId> backends = { armnn::Compute::CpuRef };
    LessFP32Test(backends);
}

TEST_CASE ("LESS_Broadcast_CpuRef_Test")
{
    std::vector<armnn::BackendId> backends = { armnn::Compute::CpuRef };
    LessBroadcastTest(backends);
}

TEST_CASE ("LESS_INT32_CpuRef_Test")
{
    std::vector<armnn::BackendId> backends = { armnn::Compute::CpuRef };
    LessInt32Test(backends);
}

TEST_CASE ("LESS_EQUAL_FP32_CpuRef_Test")
{
    std::vector<armnn::BackendId> backends = { armnn::Compute::CpuRef };
    LessEqualFP32Test(backends);
}

TEST_CASE ("LESS_EQUAL_Broadcast_CpuRef_Test")
{
    std::vector<armnn::BackendId> backends = { armnn::Compute::CpuRef };
    LessEqualBroadcastTest(backends);
}

TEST_CASE ("LESS_EQUAL_INT32_CpuRef_Test")
{
    std::vector<armnn::BackendId> backends = { armnn::Compute::CpuRef };
    LessEqualInt32Test(backends);
}
} // End TEST_SUITE("Comparison_CpuRefTests")



TEST_SUITE("Comparison_GpuAccTests")
{

TEST_CASE ("EQUAL_FP32_GpuAcc_Test")
{
    std::vector<armnn::BackendId> backends = { armnn::Compute::GpuAcc };
    EqualFP32Test(backends);
}

TEST_CASE ("EQUAL_Broadcast_GpuAcc_Test")
{
    std::vector<armnn::BackendId> backends = { armnn::Compute::GpuAcc };
    EqualBroadcastTest(backends);
}

TEST_CASE ("EQUAL_INT32_GpuAcc_Test")
{
    std::vector<armnn::BackendId> backends = { armnn::Compute::GpuAcc };
    EqualInt32Test(backends);
}

TEST_CASE ("NOT_EQUAL_FP32_GpuAcc_Test")
{
    std::vector<armnn::BackendId> backends = { armnn::Compute::GpuAcc };
    NotEqualFP32Test(backends);
}

TEST_CASE ("NOT_EQUAL_Broadcast_GpuAcc_Test")
{
    std::vector<armnn::BackendId> backends = { armnn::Compute::GpuAcc };
    NotEqualBroadcastTest(backends);
}

TEST_CASE ("NOT_EQUAL_INT32_GpuAcc_Test")
{
    std::vector<armnn::BackendId> backends = { armnn::Compute::GpuAcc };
    NotEqualInt32Test(backends);
}

TEST_CASE ("GREATER_FP32_GpuAcc_Test")
{
    std::vector<armnn::BackendId> backends = { armnn::Compute::GpuAcc,
                                               armnn::Compute::CpuRef };
    GreaterFP32Test(backends);
}

TEST_CASE ("GREATER_Broadcast_GpuAcc_Test")
{
    std::vector<armnn::BackendId> backends = { armnn::Compute::GpuAcc,
                                               armnn::Compute::CpuRef };
    GreaterBroadcastTest(backends);
}

TEST_CASE ("GREATER_INT32_GpuAcc_Test")
{
    std::vector<armnn::BackendId> backends = { armnn::Compute::GpuAcc,
                                               armnn::Compute::CpuRef };
    GreaterInt32Test(backends);
}

TEST_CASE ("GREATER_EQUAL_FP32_GpuAcc_Test")
{
    std::vector<armnn::BackendId> backends = { armnn::Compute::GpuAcc };
    GreaterEqualFP32Test(backends);
}

TEST_CASE ("GREATER_EQUAL_Broadcast_GpuAcc_Test")
{
    std::vector<armnn::BackendId> backends = { armnn::Compute::GpuAcc };
    GreaterEqualBroadcastTest(backends);
}

TEST_CASE ("GREATER_EQUAL_INT32_GpuAcc_Test")
{
    std::vector<armnn::BackendId> backends = { armnn::Compute::GpuAcc };
    GreaterEqualInt32Test(backends);
}

TEST_CASE ("LESS_FP32_GpuAcc_Test")
{
    std::vector<armnn::BackendId> backends = { armnn::Compute::GpuAcc };
    LessFP32Test(backends);
}

TEST_CASE ("LESS_Broadcast_GpuAcc_Test")
{
    std::vector<armnn::BackendId> backends = { armnn::Compute::GpuAcc };
    LessBroadcastTest(backends);
}

TEST_CASE ("LESS_INT32_GpuAcc_Test")
{
    std::vector<armnn::BackendId> backends = { armnn::Compute::GpuAcc };
    LessInt32Test(backends);
}

TEST_CASE ("LESS_EQUAL_FP32_GpuAcc_Test")
{
    std::vector<armnn::BackendId> backends = { armnn::Compute::GpuAcc };
    LessEqualFP32Test(backends);
}

TEST_CASE ("LESS_EQUAL_Broadcast_GpuAcc_Test")
{
    std::vector<armnn::BackendId> backends = { armnn::Compute::GpuAcc };
    LessEqualBroadcastTest(backends);
}

TEST_CASE ("LESS_EQUAL_INT32_GpuAcc_Test")
{
    std::vector<armnn::BackendId> backends = { armnn::Compute::GpuAcc };
    LessEqualInt32Test(backends);
}

} // End TEST_SUITE("Comparison_GpuAccTests")


TEST_SUITE("Comparison_CpuAccTests")
{

TEST_CASE ("EQUAL_FP32_CpuAcc_Test")
{
    std::vector<armnn::BackendId> backends = { armnn::Compute::CpuAcc };
    EqualFP32Test(backends);
}

TEST_CASE ("EQUAL_Broadcast_CpuAcc_Test")
{
    std::vector<armnn::BackendId> backends = { armnn::Compute::CpuAcc };
    EqualBroadcastTest(backends);
}

TEST_CASE ("EQUAL_INT32_CpuAcc_Test")
{
    std::vector<armnn::BackendId> backends = { armnn::Compute::CpuAcc };
    EqualInt32Test(backends);
}

TEST_CASE ("NOT_EQUAL_FP32_CpuAcc_Test")
{
    std::vector<armnn::BackendId> backends = { armnn::Compute::CpuAcc };
    NotEqualFP32Test(backends);
}

TEST_CASE ("NOT_EQUAL_Broadcast_CpuAcc_Test")
{
    std::vector<armnn::BackendId> backends = { armnn::Compute::CpuAcc };
    NotEqualBroadcastTest(backends);
}

TEST_CASE ("NOT_EQUAL_INT32_CpuAcc_Test")
{
    std::vector<armnn::BackendId> backends = { armnn::Compute::CpuAcc };
    NotEqualInt32Test(backends);
}

TEST_CASE ("GREATER_FP32_CpuAcc_Test")
{
    std::vector<armnn::BackendId> backends = { armnn::Compute::CpuAcc };
    GreaterFP32Test(backends);
}

TEST_CASE ("GREATER_Broadcast_CpuAcc_Test")
{
    std::vector<armnn::BackendId> backends = { armnn::Compute::CpuAcc };
    GreaterBroadcastTest(backends);
}

TEST_CASE ("GREATER_INT32_CpuAcc_Test")
{
    std::vector<armnn::BackendId> backends = { armnn::Compute::CpuAcc };
    GreaterInt32Test(backends);
}

TEST_CASE ("GREATER_EQUAL_FP32_CpuAcc_Test")
{
    std::vector<armnn::BackendId> backends = { armnn::Compute::CpuAcc };
    GreaterEqualFP32Test(backends);
}

TEST_CASE ("GREATER_EQUAL_Broadcast_CpuAcc_Test")
{
    std::vector<armnn::BackendId> backends = { armnn::Compute::CpuAcc };
    GreaterEqualBroadcastTest(backends);
}

TEST_CASE ("GREATER_EQUAL_INT32_CpuAcc_Test")
{
    std::vector<armnn::BackendId> backends = { armnn::Compute::CpuAcc };
    GreaterEqualInt32Test(backends);
}

TEST_CASE ("LESS_FP32_CpuAcc_Test")
{
    std::vector<armnn::BackendId> backends = { armnn::Compute::CpuAcc };
    LessFP32Test(backends);
}

TEST_CASE ("LESS_Broadcast_CpuAcc_Test")
{
    std::vector<armnn::BackendId> backends = { armnn::Compute::CpuAcc };
    LessBroadcastTest(backends);
}

TEST_CASE ("LESS_INT32_CpuAcc_Test")
{
    std::vector<armnn::BackendId> backends = { armnn::Compute::CpuAcc };
    LessInt32Test(backends);
}

TEST_CASE ("LESS_EQUAL_FP32_CpuAcc_Test")
{
    std::vector<armnn::BackendId> backends = { armnn::Compute::CpuAcc };
    LessEqualFP32Test(backends);
}

TEST_CASE ("LESS_EQUAL_Broadcast_CpuAcc_Test")
{
    std::vector<armnn::BackendId> backends = { armnn::Compute::CpuAcc };
    LessEqualBroadcastTest(backends);
}

TEST_CASE ("LESS_EQUAL_INT32_CpuAcc_Test")
{
    std::vector<armnn::BackendId> backends = { armnn::Compute::CpuAcc };
    LessEqualInt32Test(backends);
}

} // End TEST_SUITE("Comparison_CpuAccTests")

} // namespace armnnDelegate