diff options
author | Matthew Bentham <matthew.bentham@arm.com> | 2019-04-30 10:17:40 +0100 |
---|---|---|
committer | Matthew Bentham <matthew.bentham@arm.com> | 2019-04-30 12:42:19 +0100 |
commit | d78b891d30b9b3a1aaf29e46c1d008bdc6bcd674 (patch) | |
tree | 1d0877c0f673af1305213454c186604b265fdd27 /src/armnn/test/FlowControl.cpp | |
parent | 386681af17ec143a0ea6f503e579e5cd8a334966 (diff) | |
download | armnn-d78b891d30b9b3a1aaf29e46c1d008bdc6bcd674.tar.gz |
IVGCVSW-3021 Add end-to-end flow control integration test
Currently asserts that the net fails to optimise as that
is the expected behaviour, but it's complete enough to
exercise most of the code in SwitchLayer.cpp and MergeLayer.cpp
Also, fix a bug in SwitchLayer::ValidateTensorShapesFromInputs
found by the new test.
Also, make topological sort slightly more robust to missing connections
as it should not be the job of the sorter to validate the graph.
Change-Id: I30b9e2d4769ab14a6820284871a79a5bb3eef1ef
Signed-off-by: Matthew Bentham <matthew.bentham@arm.com>
Diffstat (limited to 'src/armnn/test/FlowControl.cpp')
-rw-r--r-- | src/armnn/test/FlowControl.cpp | 53 |
1 files changed, 53 insertions, 0 deletions
diff --git a/src/armnn/test/FlowControl.cpp b/src/armnn/test/FlowControl.cpp new file mode 100644 index 0000000000..3bc993b33b --- /dev/null +++ b/src/armnn/test/FlowControl.cpp @@ -0,0 +1,53 @@ +// +// Copyright © 2017 Arm Ltd. All rights reserved. +// SPDX-License-Identifier: MIT +// + +#include <armnn/Descriptors.hpp> +#include <armnn/IRuntime.hpp> +#include <armnn/INetwork.hpp> + +#include <boost/test/unit_test.hpp> + +#include <set> + +BOOST_AUTO_TEST_SUITE(FlowControl) + +BOOST_AUTO_TEST_CASE(ErrorOnLoadNetwork) +{ + using namespace armnn; + + // Create runtime in which test will run + IRuntime::CreationOptions options; + IRuntimePtr runtime(IRuntime::Create(options)); + + // build up the structure of the network + // It's equivalent to something like + // if (0) {} else {} + INetworkPtr net(INetwork::Create()); + + std::vector<uint8_t> falseData = {0}; + ConstTensor falseTensor(armnn::TensorInfo({1}, armnn::DataType::Boolean), falseData); + IConnectableLayer* constLayer = net->AddConstantLayer(falseTensor, "const"); + constLayer->GetOutputSlot(0).SetTensorInfo(armnn::TensorInfo({1}, armnn::DataType::Boolean)); + + IConnectableLayer* input = net->AddInputLayer(0); + + IConnectableLayer* switchLayer = net->AddSwitchLayer("switch"); + IConnectableLayer* mergeLayer = net->AddMergeLayer("merge"); + + IConnectableLayer* output = net->AddOutputLayer(0); + + input->GetOutputSlot(0).Connect(switchLayer->GetInputSlot(0)); + constLayer->GetOutputSlot(0).Connect(switchLayer->GetInputSlot(1)); + switchLayer->GetOutputSlot(0).Connect(mergeLayer->GetInputSlot(0)); + switchLayer->GetOutputSlot(1).Connect(mergeLayer->GetInputSlot(1)); + mergeLayer->GetOutputSlot(0).Connect(output->GetInputSlot(0)); + + // optimize the network + std::vector<BackendId> backends = {Compute::CpuRef}; + IOptimizedNetworkPtr optNet = Optimize(*net, backends, runtime->GetDeviceSpec()); + BOOST_CHECK(!optNet); // Should have failed to optimise, as flow control is not yet implemented +} + +BOOST_AUTO_TEST_SUITE_END() |