blob: 213d1142480fd8c6354169c8eb5d4264e1521011 [file] [log] [blame]
David Beck32cbb0c2018-10-09 15:46:08 +01001//
2// Copyright © 2017 Arm Ltd. All rights reserved.
3// SPDX-License-Identifier: MIT
4//
David Beck32cbb0c2018-10-09 15:46:08 +01005
David Beck32cbb0c2018-10-09 15:46:08 +01006#include <armnn/Types.hpp>
Matteo Martincighc601aa62019-10-29 15:03:22 +00007#include <armnn/BackendRegistry.hpp>
David Beck32cbb0c2018-10-09 15:46:08 +01008
Matteo Martincighe5b8eb92019-11-28 15:45:42 +00009#include <armnn/backends/IBackendInternal.hpp>
Aron Virginas-Tarc9cc8042018-11-01 16:15:57 +000010
11#include <boost/test/unit_test.hpp>
12
David Beck32cbb0c2018-10-09 15:46:08 +010013namespace
14{
15
16class SwapRegistryStorage : public armnn::BackendRegistry
17{
18public:
19 SwapRegistryStorage() : armnn::BackendRegistry()
20 {
David Beck3e9e1152018-10-17 14:17:50 +010021 Swap(armnn::BackendRegistryInstance(), m_TempStorage);
David Beck32cbb0c2018-10-09 15:46:08 +010022 }
23
24 ~SwapRegistryStorage()
25 {
David Beck3e9e1152018-10-17 14:17:50 +010026 Swap(armnn::BackendRegistryInstance(),m_TempStorage);
David Beck32cbb0c2018-10-09 15:46:08 +010027 }
28
29private:
David Beck3e9e1152018-10-17 14:17:50 +010030 FactoryStorage m_TempStorage;
David Beck32cbb0c2018-10-09 15:46:08 +010031};
32
33}
34
35BOOST_AUTO_TEST_SUITE(BackendRegistryTests)
36
37BOOST_AUTO_TEST_CASE(SwapRegistry)
38{
David Beck3e9e1152018-10-17 14:17:50 +010039 using namespace armnn;
40 auto nFactories = BackendRegistryInstance().Size();
David Beck32cbb0c2018-10-09 15:46:08 +010041 {
42 SwapRegistryStorage helper;
David Beck3e9e1152018-10-17 14:17:50 +010043 BOOST_TEST(BackendRegistryInstance().Size() == 0);
David Beck32cbb0c2018-10-09 15:46:08 +010044 }
David Beck3e9e1152018-10-17 14:17:50 +010045 BOOST_TEST(BackendRegistryInstance().Size() == nFactories);
David Beck32cbb0c2018-10-09 15:46:08 +010046}
47
48BOOST_AUTO_TEST_CASE(TestRegistryHelper)
49{
David Beck3e9e1152018-10-17 14:17:50 +010050 using namespace armnn;
David Beck32cbb0c2018-10-09 15:46:08 +010051 SwapRegistryStorage helper;
52
53 bool called = false;
David Beck3e9e1152018-10-17 14:17:50 +010054
David Beck111b5d92018-11-12 14:59:37 +000055 BackendRegistry::StaticRegistryInitializer factoryHelper(
David Beck3e9e1152018-10-17 14:17:50 +010056 BackendRegistryInstance(),
57 "HelloWorld",
David Beck9efb57d2018-11-05 13:40:33 +000058 [&called]()
David Beck3e9e1152018-10-17 14:17:50 +010059 {
60 called = true;
David Beck29c75de2018-10-23 13:35:58 +010061 return armnn::IBackendInternalUniquePtr(nullptr);
David Beck3e9e1152018-10-17 14:17:50 +010062 }
63 );
David Beck32cbb0c2018-10-09 15:46:08 +010064
65 // sanity check: the factory has not been called yet
66 BOOST_TEST(called == false);
67
David Beck3e9e1152018-10-17 14:17:50 +010068 auto factoryFunction = BackendRegistryInstance().GetFactory("HelloWorld");
David Beck32cbb0c2018-10-09 15:46:08 +010069
70 // sanity check: the factory still not called
71 BOOST_TEST(called == false);
72
David Beck9efb57d2018-11-05 13:40:33 +000073 factoryFunction();
David Beck32cbb0c2018-10-09 15:46:08 +010074 BOOST_TEST(called == true);
David Monahanc1536d62020-02-12 15:52:35 +000075 BackendRegistryInstance().Deregister("HelloWorld");
David Beck32cbb0c2018-10-09 15:46:08 +010076}
77
78BOOST_AUTO_TEST_CASE(TestDirectCallToRegistry)
79{
David Beck3e9e1152018-10-17 14:17:50 +010080 using namespace armnn;
David Beck32cbb0c2018-10-09 15:46:08 +010081 SwapRegistryStorage helper;
82
83 bool called = false;
David Beck3e9e1152018-10-17 14:17:50 +010084 BackendRegistryInstance().Register(
85 "HelloWorld",
David Beck9efb57d2018-11-05 13:40:33 +000086 [&called]()
David Beck3e9e1152018-10-17 14:17:50 +010087 {
88 called = true;
David Beck29c75de2018-10-23 13:35:58 +010089 return armnn::IBackendInternalUniquePtr(nullptr);
David Beck3e9e1152018-10-17 14:17:50 +010090 }
91 );
David Beck32cbb0c2018-10-09 15:46:08 +010092
93 // sanity check: the factory has not been called yet
94 BOOST_TEST(called == false);
95
David Beck3e9e1152018-10-17 14:17:50 +010096 auto factoryFunction = BackendRegistryInstance().GetFactory("HelloWorld");
David Beck32cbb0c2018-10-09 15:46:08 +010097
98 // sanity check: the factory still not called
99 BOOST_TEST(called == false);
100
David Beck9efb57d2018-11-05 13:40:33 +0000101 factoryFunction();
David Beck32cbb0c2018-10-09 15:46:08 +0100102 BOOST_TEST(called == true);
David Monahanc1536d62020-02-12 15:52:35 +0000103 BackendRegistryInstance().Deregister("HelloWorld");
David Beck32cbb0c2018-10-09 15:46:08 +0100104}
105
106BOOST_AUTO_TEST_SUITE_END()