// // Copyright © 2019 Arm Ltd. All rights reserved. // SPDX-License-Identifier: MIT // #include "ParserFlatbuffersSerializeFixture.hpp" #include #include #include #include TEST_SUITE("Deserializer_Comparison") { #define DECLARE_SIMPLE_COMPARISON_FIXTURE(operation, dataType) \ struct Simple##operation##dataType##Fixture : public SimpleComparisonFixture \ { \ Simple##operation##dataType##Fixture() \ : SimpleComparisonFixture(#dataType, #operation) {} \ }; #define DECLARE_SIMPLE_COMPARISON_TEST_CASE(operation, dataType) \ DECLARE_SIMPLE_COMPARISON_FIXTURE(operation, dataType) \ TEST_CASE_FIXTURE(Simple##operation##dataType##Fixture, #operation#dataType) \ { \ using T = armnn::ResolveType; \ constexpr float qScale = 1.f; \ constexpr int32_t qOffset = 0; \ RunTest<4, armnn::DataType::dataType, armnn::DataType::Boolean>( \ 0, \ {{ "InputLayer0", armnnUtils::QuantizedVector(s_TestData.m_InputData0, qScale, qOffset) }, \ { "InputLayer1", armnnUtils::QuantizedVector(s_TestData.m_InputData1, qScale, qOffset) }}, \ {{ "OutputLayer", s_TestData.m_Output##operation }}); \ } struct ComparisonFixture : public ParserFlatbuffersSerializeFixture { explicit ComparisonFixture(const std::string& inputShape0, const std::string& inputShape1, const std::string& outputShape, const std::string& inputDataType, const std::string& comparisonOperation) { m_JsonString = R"( { inputIds: [0, 1], outputIds: [3], layers: [ { layer_type: "InputLayer", layer: { base: { layerBindingId: 0, base: { index: 0, layerName: "InputLayer0", layerType: "Input", inputSlots: [{ index: 0, connection: { sourceLayerIndex:0, outputSlotIndex:0 }, }], outputSlots: [{ index: 0, tensorInfo: { dimensions: )" + inputShape0 + R"(, dataType: )" + inputDataType + R"( }, }], }, } }, }, { layer_type: "InputLayer", layer: { base: { layerBindingId: 1, base: { index:1, layerName: "InputLayer1", layerType: "Input", inputSlots: [{ index: 0, connection: { sourceLayerIndex:0, outputSlotIndex:0 }, }], outputSlots: [{ index: 0, tensorInfo: { dimensions: )" + inputShape1 + R"(, dataType: )" + inputDataType + R"( }, }], }, } }, }, { layer_type: "ComparisonLayer", layer: { base: { index:2, layerName: "ComparisonLayer", layerType: "Comparison", inputSlots: [{ index: 0, connection: { sourceLayerIndex:0, outputSlotIndex:0 }, }, { index: 1, connection: { sourceLayerIndex:1, outputSlotIndex:0 }, }], outputSlots: [{ index: 0, tensorInfo: { dimensions: )" + outputShape + R"(, dataType: Boolean }, }], }, descriptor: { operation: )" + comparisonOperation + R"( } }, }, { layer_type: "OutputLayer", layer: { base:{ layerBindingId: 0, base: { index: 3, layerName: "OutputLayer", layerType: "Output", inputSlots: [{ index: 0, connection: { sourceLayerIndex:2, outputSlotIndex:0 }, }], outputSlots: [{ index: 0, tensorInfo: { dimensions: )" + outputShape + R"(, dataType: Boolean }, }], } } }, } ] } )"; Setup(); } }; struct SimpleComparisonTestData { SimpleComparisonTestData() { m_InputData0 = { 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 }; m_InputData1 = { 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 }; m_OutputEqual = { 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1 }; m_OutputGreater = { 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0 }; m_OutputGreaterOrEqual = { 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 1, 1, 1, 1 }; m_OutputLess = { 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0 }; m_OutputLessOrEqual = { 1, 1, 1, 1, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1 }; m_OutputNotEqual = { 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0 }; } std::vector m_InputData0; std::vector m_InputData1; std::vector m_OutputEqual; std::vector m_OutputGreater; std::vector m_OutputGreaterOrEqual; std::vector m_OutputLess; std::vector m_OutputLessOrEqual; std::vector m_OutputNotEqual; }; struct SimpleComparisonFixture : public ComparisonFixture { SimpleComparisonFixture(const std::string& inputDataType, const std::string& comparisonOperation) : ComparisonFixture("[ 2, 2, 2, 2 ]", // inputShape0 "[ 2, 2, 2, 2 ]", // inputShape1 "[ 2, 2, 2, 2 ]", // outputShape, inputDataType, comparisonOperation) {} static SimpleComparisonTestData s_TestData; }; SimpleComparisonTestData SimpleComparisonFixture::s_TestData; DECLARE_SIMPLE_COMPARISON_TEST_CASE(Equal, Float32) DECLARE_SIMPLE_COMPARISON_TEST_CASE(Greater, Float32) DECLARE_SIMPLE_COMPARISON_TEST_CASE(GreaterOrEqual, Float32) DECLARE_SIMPLE_COMPARISON_TEST_CASE(Less, Float32) DECLARE_SIMPLE_COMPARISON_TEST_CASE(LessOrEqual, Float32) DECLARE_SIMPLE_COMPARISON_TEST_CASE(NotEqual, Float32) DECLARE_SIMPLE_COMPARISON_TEST_CASE(Equal, QAsymmU8) DECLARE_SIMPLE_COMPARISON_TEST_CASE(Greater, QAsymmU8) DECLARE_SIMPLE_COMPARISON_TEST_CASE(GreaterOrEqual, QAsymmU8) DECLARE_SIMPLE_COMPARISON_TEST_CASE(Less, QAsymmU8) DECLARE_SIMPLE_COMPARISON_TEST_CASE(LessOrEqual, QAsymmU8) DECLARE_SIMPLE_COMPARISON_TEST_CASE(NotEqual, QAsymmU8) }