IVGCVSW-6317 Cleaning up BackendRegistry following negative tests.

* Deregister backends in BackendHintTest.
* Deregister backend in ThrowBackendUnavailableException
* Clean up dynamic backends when an exception is thrown from
  RuntimeImpl::RuntimeImpl.
* Use CHECK_THROWS_AS_MESSAGE syntax in ClCustomAllocatorTests.

Signed-off-by: Colm Donelan <Colm.Donelan@arm.com>
Change-Id: I0e6e5413dd074b5fcfc9515c85cb8d40a4a0b73c
diff --git a/src/backends/cl/test/ClCustomAllocatorTests.cpp b/src/backends/cl/test/ClCustomAllocatorTests.cpp
index a9b9e41..e614f4c 100644
--- a/src/backends/cl/test/ClCustomAllocatorTests.cpp
+++ b/src/backends/cl/test/ClCustomAllocatorTests.cpp
@@ -181,7 +181,6 @@
     auto customAllocator = std::make_shared<SampleClBackendCustomAllocator>();
     options.m_CustomAllocatorMap = {{"CpuAcc", std::move(customAllocator)}};
     IRuntimePtr run = IRuntime::Create(options);
-
     TensorInfo inputTensorInfo(TensorShape({1, 1}), DataType::Float32);
     INetworkPtr myNetwork = CreateTestNetwork(inputTensorInfo);
 
@@ -191,16 +190,9 @@
     IOptimizedNetworkPtr optNet(nullptr, nullptr);
     std::vector<std::string> errMessages;
 
-    try
-    {
-        optNet = Optimize(*myNetwork, {"CpuAcc"}, run->GetDeviceSpec(), optOptions, errMessages);
-        FAIL("Should have thrown an exception as GetAvailablePreferredBackends() should be empty in Optimize().");
-    }
-    catch (const armnn::InvalidArgumentException& e)
-    {
-        // Different exceptions are thrown on different backends
-    }
-    CHECK(errMessages.size() > 0);
+    CHECK_THROWS_AS_MESSAGE(Optimize(*myNetwork, {"CpuAcc"}, run->GetDeviceSpec(), optOptions, errMessages),
+                            armnn::InvalidArgumentException,
+                            "Expected an exception as GetAvailablePreferredBackends() should be empty in Optimize().");
 
     auto& backendRegistry = armnn::BackendRegistryInstance();
     backendRegistry.DeregisterAllocator(NeonBackend::GetIdStatic());
@@ -208,4 +200,18 @@
 
 #endif
 
+TEST_CASE("ClCustomAllocatorGpuAccNullptrTest")
+{
+    using namespace armnn;
+
+    // Create ArmNN runtime
+    IRuntime::CreationOptions options; // default options
+    auto customAllocator = std::make_shared<SampleClBackendCustomAllocator>();
+    options.m_CustomAllocatorMap = {{"GpuAcc", nullptr}};
+
+    CHECK_THROWS_AS_MESSAGE(IRuntimePtr run = IRuntime::Create(options),
+                            armnn::Exception,
+                            "Expected exception in RuntimeImpl::RuntimeImpl() as allocator was nullptr.");
+}
+
 } // test suite ClCustomAllocatorTests
\ No newline at end of file