From fbdad03c927aa5d30deec6fa1a61eef10f8c265f Mon Sep 17 00:00:00 2001 From: Ferran Balaguer Date: Fri, 28 Dec 2018 18:15:24 +0000 Subject: IVGCVSW-2375 Add ParseAddN function to TfParser * Unit tests in AddN.cpp Change-Id: Ifb2fa1051d5d92c5d9a5ca751abee4e81ebe39c9 --- src/armnnTfParser/test/AddN.cpp | 180 ++++++++++++++++++++++++++++++++++++++++ 1 file changed, 180 insertions(+) create mode 100644 src/armnnTfParser/test/AddN.cpp (limited to 'src/armnnTfParser/test') diff --git a/src/armnnTfParser/test/AddN.cpp b/src/armnnTfParser/test/AddN.cpp new file mode 100644 index 0000000000..19affa85c7 --- /dev/null +++ b/src/armnnTfParser/test/AddN.cpp @@ -0,0 +1,180 @@ +// +// Copyright © 2017 Arm Ltd. All rights reserved. +// SPDX-License-Identifier: MIT +// + +#include +#include + +#include "armnnTfParser/ITfParser.hpp" +#include "ParserPrototxtFixture.hpp" + +#include +#include + + +BOOST_AUTO_TEST_SUITE(TensorflowParser) + +struct AddNFixture : public armnnUtils::ParserPrototxtFixture +{ + AddNFixture(const std::vector inputShapes, unsigned int numberOfInputs) + { + BOOST_ASSERT(inputShapes.size() == numberOfInputs); + m_Prototext = ""; + for (unsigned int i = 0; i < numberOfInputs; i++) + { + m_Prototext.append("node { \n"); + m_Prototext.append(" name: \"input").append(std::to_string(i)).append("\"\n"); + m_Prototext += R"( op: "Placeholder" + attr { + key: "dtype" + value { + type: DT_FLOAT + } + } + attr { + key: "shape" + value { + shape { + } + } + } +} +)"; + } + m_Prototext += R"(node { + name: "output" + op: "AddN" +)"; + for (unsigned int i = 0; i < numberOfInputs; i++) + { + m_Prototext.append(" input: \"input").append(std::to_string(i)).append("\"\n"); + } + m_Prototext += R"( attr { + key: "N" + value { +)"; + m_Prototext.append(" i: ").append(std::to_string(numberOfInputs)).append("\n"); + m_Prototext += R"( } + } + attr { + key: "T" + value { + type: DT_FLOAT + } + } +})"; + + std::map inputs; + for (unsigned int i = 0; i < numberOfInputs; i++) + { + std::string name("input"); + name.append(std::to_string(i)); + inputs.emplace(std::make_pair(name, inputShapes[i])); + } + Setup(inputs, {"output"}); + } + +}; + +// try with 2, 3, 5 and 8 inputs +struct FiveTwoDimInputsFixture : AddNFixture +{ + FiveTwoDimInputsFixture() : AddNFixture({ { 2, 2 }, { 2, 2 }, { 2, 2 }, { 2, 2 }, { 2, 2 } }, 5) {} +}; + + +BOOST_FIXTURE_TEST_CASE(FiveTwoDimInputs, FiveTwoDimInputsFixture) +{ + RunTest<2>({ { "input0", { 1.0, 2.0, 3.0, 4.0 } }, + { "input1", { 1.0, 5.0, 2.0, 2.0 } }, + { "input2", { 1.0, 1.0, 2.0, 2.0 } }, + { "input3", { 3.0, 7.0, 1.0, 2.0 } }, + { "input4", { 8.0, 0.0, -2.0, -3.0 } } }, + { { "output", { 14.0, 15.0, 6.0, 7.0 } } }); +} + +struct TwoTwoDimInputsFixture : AddNFixture +{ + TwoTwoDimInputsFixture() : AddNFixture({ { 2, 2 }, { 2, 2 } }, 2) {} +}; + +BOOST_FIXTURE_TEST_CASE(TwoTwoDimInputs, TwoTwoDimInputsFixture) +{ + RunTest<2>({ { "input0", { 1.0, 2.0, 3.0, 4.0 } }, + { "input1", { 1.0, 5.0, 2.0, 2.0 } } }, + { { "output", { 2.0, 7.0, 5.0, 6.0 } } }); +} + +struct ThreeTwoDimInputsFixture : AddNFixture +{ + ThreeTwoDimInputsFixture() : AddNFixture({ { 2, 2 }, { 2, 2 }, { 2, 2 } }, 3) {} +}; + +BOOST_FIXTURE_TEST_CASE(ThreeTwoDimInputs, ThreeTwoDimInputsFixture) +{ + RunTest<2>({ { "input0", { 1.0, 2.0, 3.0, 4.0 } }, + { "input1", { 1.0, 5.0, 2.0, 2.0 } }, + { "input2", { 1.0, 1.0, 2.0, 2.0 } } }, + { { "output", { 3.0, 8.0, 7.0, 8.0 } } }); +} + +struct EightTwoDimInputsFixture : AddNFixture +{ + EightTwoDimInputsFixture() : AddNFixture({ { 2, 2 }, { 2, 2 }, { 2, 2 }, { 2, 2 }, + { 2, 2 }, { 2, 2 }, { 2, 2 }, { 2, 2 } }, 8) {} +}; + +BOOST_FIXTURE_TEST_CASE(EightTwoDimInputs, EightTwoDimInputsFixture) +{ + RunTest<2>({ { "input0", { 1.0, 2.0, 3.0, 4.0 } }, + { "input1", { 1.0, 5.0, 2.0, 2.0 } }, + { "input2", { 1.0, 1.0, 2.0, 2.0 } }, + { "input3", { 3.0, 7.0, 1.0, 2.0 } }, + { "input4", { 8.0, 0.0, -2.0, -3.0 } }, + { "input5", {-3.0, 2.0, -1.0, -5.0 } }, + { "input6", { 1.0, 6.0, 2.0, 2.0 } }, + { "input7", {-19.0, 7.0, 1.0, -10.0 } } }, + { { "output", {-7.0, 30.0, 8.0, -6.0 } } }); +} + +struct ThreeInputBroadcast1D4D4DInputsFixture : AddNFixture +{ + ThreeInputBroadcast1D4D4DInputsFixture() : AddNFixture({ { 1 }, { 1, 1, 2, 2 }, { 1, 1, 2, 2 } }, 3) {} +}; + +BOOST_FIXTURE_TEST_CASE(ThreeInputBroadcast1D4D4DInputs, ThreeInputBroadcast1D4D4DInputsFixture) +{ + RunTest<4>({ { "input0", { 1.0 } }, + { "input1", { 1.0, 5.0, 2.0, 2.0 } }, + { "input2", { 1.0, 1.0, 2.0, 2.0 } } }, + { { "output", { 3.0, 7.0, 5.0, 5.0 } } }); +} + +struct ThreeInputBroadcast4D1D4DInputsFixture : AddNFixture +{ + ThreeInputBroadcast4D1D4DInputsFixture() : AddNFixture({ { 1, 1, 2, 2 }, { 1 }, { 1, 1, 2, 2 } }, 3) {} +}; + +BOOST_FIXTURE_TEST_CASE(ThreeInputBroadcast4D1D4DInputs, ThreeInputBroadcast4D1D4DInputsFixture) +{ + RunTest<4>({ { "input0", { 1.0, 3.0, 9.0, 4.0 } }, + { "input1", {-2.0 } }, + { "input2", { 1.0, 1.0, 2.0, 2.0 } } }, + { { "output", { 0.0, 2.0, 9.0, 4.0 } } }); +} + +struct ThreeInputBroadcast4D4D1DInputsFixture : AddNFixture +{ + ThreeInputBroadcast4D4D1DInputsFixture() : AddNFixture({ { 1, 1, 2, 2 }, { 1, 1, 2, 2 }, { 1 } }, 3) {} +}; + +BOOST_FIXTURE_TEST_CASE(ThreeInputBroadcast4D4D1DInputs, ThreeInputBroadcast4D4D1DInputsFixture) +{ + RunTest<4>({ { "input0", { 1.0, 5.0, 2.0, 2.0 } }, + { "input1", { 1.0, 1.0, 2.0, 2.0 } }, + { "input2", { 1.0 } } }, + { { "output", { 3.0, 7.0, 5.0, 5.0 } } }); +} + +BOOST_AUTO_TEST_SUITE_END() -- cgit v1.2.1