From 41f00f1e33926e7b846911d012afb56d63026739 Mon Sep 17 00:00:00 2001 From: David Monahan Date: Mon, 27 May 2019 09:44:52 +0100 Subject: IVGCVSW-3033 Unit test using a MockBackend to validate Optimizer Signed-off-by: David Monahan Change-Id: I5b446905c496001ba3c48ad5090e79e80d060d4e --- .../backendsCommon/test/OptimizationViewsTests.cpp | 70 ++++++++++++++++++++++ 1 file changed, 70 insertions(+) diff --git a/src/backends/backendsCommon/test/OptimizationViewsTests.cpp b/src/backends/backendsCommon/test/OptimizationViewsTests.cpp index 2fdda5e759..594fd450c8 100644 --- a/src/backends/backendsCommon/test/OptimizationViewsTests.cpp +++ b/src/backends/backendsCommon/test/OptimizationViewsTests.cpp @@ -12,9 +12,47 @@ #include #include "CommonTestUtils.hpp" +#include "MockBackend.hpp" using namespace armnn; +void CheckLayers(Graph& graph) +{ + unsigned int m_inputLayerCount = 0, m_outputLayerCount = 0, m_addLayerCount = 0; + for(auto layer : graph) + { + switch(layer->GetType()) + { + case LayerType::Input: + ++m_inputLayerCount; + if (layer->GetGuid() == 0) + { + BOOST_TEST(layer->GetName() == "inLayer0"); + } + else if (layer->GetGuid() == 1) + { + BOOST_TEST(layer->GetName() == "inLayer1"); + } + break; + // The Addition layer should become a PreCompiled Layer after Optimisation + case LayerType::PreCompiled: + ++m_addLayerCount; + BOOST_TEST(layer->GetName() == "pre-compiled"); + break; + case LayerType::Output: + ++m_outputLayerCount; + BOOST_TEST(layer->GetName() == "outLayer"); + break; + default: + //Fail for anything else + BOOST_TEST(false); + } + } + BOOST_TEST(m_inputLayerCount == 2); + BOOST_TEST(m_outputLayerCount == 1); + BOOST_TEST(m_addLayerCount == 1); +} + BOOST_AUTO_TEST_SUITE(OptimizationViewsTestSuite) BOOST_AUTO_TEST_CASE(OptimizedViewsSubgraphLayerCount) @@ -148,4 +186,36 @@ BOOST_AUTO_TEST_CASE(OptimizedViewsSubgraphLayerCountFailValidate) BOOST_CHECK(!view.Validate(*originalSubgraph)); } +BOOST_AUTO_TEST_CASE(OptimizeViewsValidateDeviceMockBackend) +{ + // build up the structure of the network + armnn::INetworkPtr net(armnn::INetwork::Create()); + + armnn::IConnectableLayer* input = net->AddInputLayer(0, "inLayer0"); + armnn::IConnectableLayer* input1 = net->AddInputLayer(1, "inLayer1"); + + armnn::IConnectableLayer* addition = net->AddAdditionLayer("addLayer"); + + armnn::IConnectableLayer* output = net->AddOutputLayer(0, "outLayer"); + + input->GetOutputSlot(0).Connect(addition->GetInputSlot(0)); + input1->GetOutputSlot(0).Connect(addition->GetInputSlot(1)); + addition->GetOutputSlot(0).Connect(output->GetInputSlot(0)); + + input->GetOutputSlot(0).SetTensorInfo(armnn::TensorInfo({ 1, 1, 4, 4 }, armnn::DataType::Float32)); + input1->GetOutputSlot(0).SetTensorInfo(armnn::TensorInfo({ 1, 1, 4, 4 }, armnn::DataType::Float32)); + addition->GetOutputSlot(0).SetTensorInfo(armnn::TensorInfo({ 1, 1, 4, 4 }, armnn::DataType::Float32)); + + armnn::IRuntime::CreationOptions options; + armnn::IRuntimePtr runtime(armnn::IRuntime::Create(options)); + + std::vector backends = { MockBackend().GetIdStatic() }; + armnn::IOptimizedNetworkPtr optNet = armnn::Optimize(*net, backends, runtime->GetDeviceSpec()); + BOOST_CHECK(optNet); + + // Check the optimised graph + OptimizedNetwork* optNetObjPtr = boost::polymorphic_downcast(optNet.get()); + CheckLayers(optNetObjPtr->GetGraph()); +} + BOOST_AUTO_TEST_SUITE_END() \ No newline at end of file -- cgit v1.2.1