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 <mike.kelly@arm.com>
Change-Id: I358d1293232c9464772aa0e39ab3355e3570c823
diff --git a/src/armnn/test/RuntimeTests.cpp b/src/armnn/test/RuntimeTests.cpp
index 12ec8b1..b3a8bbd 100644
--- a/src/armnn/test/RuntimeTests.cpp
+++ b/src/armnn/test/RuntimeTests.cpp
@@ -262,17 +262,21 @@
 
     std::vector<armnn::BackendId> backends = { armnn::Compute::CpuRef };
     std::vector<std::string>      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)