blob: 4afe273de4b974e0b5312b034758c3e8038d3ca8 [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>
7
Aron Virginas-Tarc9cc8042018-11-01 16:15:57 +00008#include <backendsCommon/BackendRegistry.hpp>
9
10#include <boost/test/unit_test.hpp>
11
David Beck32cbb0c2018-10-09 15:46:08 +010012namespace
13{
14
15class SwapRegistryStorage : public armnn::BackendRegistry
16{
17public:
18 SwapRegistryStorage() : armnn::BackendRegistry()
19 {
David Beck3e9e1152018-10-17 14:17:50 +010020 Swap(armnn::BackendRegistryInstance(), m_TempStorage);
David Beck32cbb0c2018-10-09 15:46:08 +010021 }
22
23 ~SwapRegistryStorage()
24 {
David Beck3e9e1152018-10-17 14:17:50 +010025 Swap(armnn::BackendRegistryInstance(),m_TempStorage);
David Beck32cbb0c2018-10-09 15:46:08 +010026 }
27
28private:
David Beck3e9e1152018-10-17 14:17:50 +010029 FactoryStorage m_TempStorage;
David Beck32cbb0c2018-10-09 15:46:08 +010030};
31
32}
33
34BOOST_AUTO_TEST_SUITE(BackendRegistryTests)
35
36BOOST_AUTO_TEST_CASE(SwapRegistry)
37{
David Beck3e9e1152018-10-17 14:17:50 +010038 using namespace armnn;
39 auto nFactories = BackendRegistryInstance().Size();
David Beck32cbb0c2018-10-09 15:46:08 +010040 {
41 SwapRegistryStorage helper;
David Beck3e9e1152018-10-17 14:17:50 +010042 BOOST_TEST(BackendRegistryInstance().Size() == 0);
David Beck32cbb0c2018-10-09 15:46:08 +010043 }
David Beck3e9e1152018-10-17 14:17:50 +010044 BOOST_TEST(BackendRegistryInstance().Size() == nFactories);
David Beck32cbb0c2018-10-09 15:46:08 +010045}
46
47BOOST_AUTO_TEST_CASE(TestRegistryHelper)
48{
David Beck3e9e1152018-10-17 14:17:50 +010049 using namespace armnn;
David Beck32cbb0c2018-10-09 15:46:08 +010050 SwapRegistryStorage helper;
51
52 bool called = false;
David Beck3e9e1152018-10-17 14:17:50 +010053
54 StaticRegistryInitializer<BackendRegistry> factoryHelper(
55 BackendRegistryInstance(),
56 "HelloWorld",
David Beckd4dfa682018-10-24 17:09:46 +010057 [&called](const EmptyInitializer&)
David Beck3e9e1152018-10-17 14:17:50 +010058 {
59 called = true;
David Beck29c75de2018-10-23 13:35:58 +010060 return armnn::IBackendInternalUniquePtr(nullptr);
David Beck3e9e1152018-10-17 14:17:50 +010061 }
62 );
David Beck32cbb0c2018-10-09 15:46:08 +010063
64 // sanity check: the factory has not been called yet
65 BOOST_TEST(called == false);
66
David Beck3e9e1152018-10-17 14:17:50 +010067 auto factoryFunction = BackendRegistryInstance().GetFactory("HelloWorld");
David Beck32cbb0c2018-10-09 15:46:08 +010068
69 // sanity check: the factory still not called
70 BOOST_TEST(called == false);
71
David Beckd4dfa682018-10-24 17:09:46 +010072 factoryFunction(EmptyInitializer());
David Beck32cbb0c2018-10-09 15:46:08 +010073 BOOST_TEST(called == true);
74}
75
76BOOST_AUTO_TEST_CASE(TestDirectCallToRegistry)
77{
David Beck3e9e1152018-10-17 14:17:50 +010078 using namespace armnn;
David Beck32cbb0c2018-10-09 15:46:08 +010079 SwapRegistryStorage helper;
80
81 bool called = false;
David Beck3e9e1152018-10-17 14:17:50 +010082 BackendRegistryInstance().Register(
83 "HelloWorld",
David Beckd4dfa682018-10-24 17:09:46 +010084 [&called](const EmptyInitializer&)
David Beck3e9e1152018-10-17 14:17:50 +010085 {
86 called = true;
David Beck29c75de2018-10-23 13:35:58 +010087 return armnn::IBackendInternalUniquePtr(nullptr);
David Beck3e9e1152018-10-17 14:17:50 +010088 }
89 );
David Beck32cbb0c2018-10-09 15:46:08 +010090
91 // sanity check: the factory has not been called yet
92 BOOST_TEST(called == false);
93
David Beck3e9e1152018-10-17 14:17:50 +010094 auto factoryFunction = BackendRegistryInstance().GetFactory("HelloWorld");
David Beck32cbb0c2018-10-09 15:46:08 +010095
96 // sanity check: the factory still not called
97 BOOST_TEST(called == false);
98
David Beckd4dfa682018-10-24 17:09:46 +010099 factoryFunction(EmptyInitializer());
David Beck32cbb0c2018-10-09 15:46:08 +0100100 BOOST_TEST(called == true);
101}
102
103BOOST_AUTO_TEST_SUITE_END()