From 3a613cc9103484249ffcd7c63a7ae57783b1ea18 Mon Sep 17 00:00:00 2001 From: Mike Kelly Date: Tue, 29 Sep 2020 20:50:35 +0100 Subject: Refactored Optimize(...) function to throw exceptions instead of returning null * INetwork::Optimize(...) states that the function should throw an exception if it fails but the implementation in Network.cpp returned null in some scenarios instead. This has led to some confusion amongst users. Signed-off-by: Mike Kelly Change-Id: I358d1293232c9464772aa0e39ab3355e3570c823 --- src/armnn/test/EndToEndTest.cpp | 14 ++++++++++++-- src/armnn/test/FlowControl.cpp | 14 ++++++++++++-- src/armnn/test/RuntimeTests.cpp | 18 +++++++++++------- 3 files changed, 35 insertions(+), 11 deletions(-) (limited to 'src/armnn/test') diff --git a/src/armnn/test/EndToEndTest.cpp b/src/armnn/test/EndToEndTest.cpp index a8192a6480..56ff454703 100644 --- a/src/armnn/test/EndToEndTest.cpp +++ b/src/armnn/test/EndToEndTest.cpp @@ -42,8 +42,18 @@ BOOST_AUTO_TEST_CASE(ErrorOnLoadNetwork) // optimize the network std::vector backends = {Compute::CpuAcc}; - IOptimizedNetworkPtr optNet = Optimize(*net, backends, runtime->GetDeviceSpec()); - BOOST_CHECK(!optNet); + std::vector errMessages; + + try + { + Optimize(*net, backends, runtime->GetDeviceSpec(), OptimizerOptions(), errMessages); + BOOST_FAIL("Should have thrown an exception."); + } + catch (const InvalidArgumentException& e) + { + // Different exceptions are thrown on different backends + } + BOOST_CHECK(errMessages.size() > 0); } BOOST_AUTO_TEST_SUITE_END() diff --git a/src/armnn/test/FlowControl.cpp b/src/armnn/test/FlowControl.cpp index 6198ca8a24..b0667a3778 100644 --- a/src/armnn/test/FlowControl.cpp +++ b/src/armnn/test/FlowControl.cpp @@ -51,8 +51,18 @@ BOOST_AUTO_TEST_CASE(ErrorOnLoadNetwork) // optimize the network std::vector 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 + std::vector errMessages; + + try + { + Optimize(*net, backends, runtime->GetDeviceSpec(), OptimizerOptions(), errMessages); + BOOST_FAIL("Should have thrown an exception."); + } + catch (const InvalidArgumentException& e) + { + // Different exceptions are thrown on different backends + } + BOOST_TEST(errMessages.size() > 1); } BOOST_AUTO_TEST_SUITE_END() diff --git a/src/armnn/test/RuntimeTests.cpp b/src/armnn/test/RuntimeTests.cpp index 12ec8b1ece..b3a8bbd6a6 100644 --- a/src/armnn/test/RuntimeTests.cpp +++ b/src/armnn/test/RuntimeTests.cpp @@ -262,17 +262,21 @@ BOOST_AUTO_TEST_CASE(IVGCVSW_1929_QuantizedSoftmaxIssue) std::vector backends = { armnn::Compute::CpuRef }; std::vector errMessages; - armnn::IOptimizedNetworkPtr optNet = Optimize(*net, + + try + { + armnn::IOptimizedNetworkPtr optNet = Optimize(*net, backends, runtime->GetDeviceSpec(), OptimizerOptions(), errMessages); - - BOOST_TEST(errMessages.size() == 1); - BOOST_TEST(errMessages[0] == - "ERROR: output 0 of layer Softmax (softmax) is of type " - "Quantized 8 bit but its scale parameter has not been set"); - BOOST_TEST(!optNet); + BOOST_FAIL("An exception should have been thrown"); + } + catch (const InvalidArgumentException& e) + { + // Different exceptions are thrown on different backends + } + BOOST_CHECK(errMessages.size() > 0); } BOOST_AUTO_TEST_CASE(RuntimeBackendOptions) -- cgit v1.2.1