blob: f6f749936f284b66a58b7856ae0bf2eef51f42c2 [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//
5#include <boost/test/unit_test.hpp>
6
7#include <backends/BackendRegistry.hpp>
8#include <armnn/Types.hpp>
9
10namespace
11{
12
13class SwapRegistryStorage : public armnn::BackendRegistry
14{
15public:
16 SwapRegistryStorage() : armnn::BackendRegistry()
17 {
David Beck3e9e1152018-10-17 14:17:50 +010018 Swap(armnn::BackendRegistryInstance(), m_TempStorage);
David Beck32cbb0c2018-10-09 15:46:08 +010019 }
20
21 ~SwapRegistryStorage()
22 {
David Beck3e9e1152018-10-17 14:17:50 +010023 Swap(armnn::BackendRegistryInstance(),m_TempStorage);
David Beck32cbb0c2018-10-09 15:46:08 +010024 }
25
26private:
David Beck3e9e1152018-10-17 14:17:50 +010027 FactoryStorage m_TempStorage;
David Beck32cbb0c2018-10-09 15:46:08 +010028};
29
30}
31
32BOOST_AUTO_TEST_SUITE(BackendRegistryTests)
33
34BOOST_AUTO_TEST_CASE(SwapRegistry)
35{
David Beck3e9e1152018-10-17 14:17:50 +010036 using namespace armnn;
37 auto nFactories = BackendRegistryInstance().Size();
David Beck32cbb0c2018-10-09 15:46:08 +010038 {
39 SwapRegistryStorage helper;
David Beck3e9e1152018-10-17 14:17:50 +010040 BOOST_TEST(BackendRegistryInstance().Size() == 0);
David Beck32cbb0c2018-10-09 15:46:08 +010041 }
David Beck3e9e1152018-10-17 14:17:50 +010042 BOOST_TEST(BackendRegistryInstance().Size() == nFactories);
David Beck32cbb0c2018-10-09 15:46:08 +010043}
44
45BOOST_AUTO_TEST_CASE(TestRegistryHelper)
46{
David Beck3e9e1152018-10-17 14:17:50 +010047 using namespace armnn;
David Beck32cbb0c2018-10-09 15:46:08 +010048 SwapRegistryStorage helper;
49
50 bool called = false;
David Beck3e9e1152018-10-17 14:17:50 +010051
52 StaticRegistryInitializer<BackendRegistry> factoryHelper(
53 BackendRegistryInstance(),
54 "HelloWorld",
55 [&called]()
56 {
57 called = true;
58 return armnn::IBackendUniquePtr(nullptr, nullptr);
59 }
60 );
David Beck32cbb0c2018-10-09 15:46:08 +010061
62 // sanity check: the factory has not been called yet
63 BOOST_TEST(called == false);
64
David Beck3e9e1152018-10-17 14:17:50 +010065 auto factoryFunction = BackendRegistryInstance().GetFactory("HelloWorld");
David Beck32cbb0c2018-10-09 15:46:08 +010066
67 // sanity check: the factory still not called
68 BOOST_TEST(called == false);
69
70 factoryFunction();
71 BOOST_TEST(called == true);
72}
73
74BOOST_AUTO_TEST_CASE(TestDirectCallToRegistry)
75{
David Beck3e9e1152018-10-17 14:17:50 +010076 using namespace armnn;
David Beck32cbb0c2018-10-09 15:46:08 +010077 SwapRegistryStorage helper;
78
79 bool called = false;
David Beck3e9e1152018-10-17 14:17:50 +010080 BackendRegistryInstance().Register(
81 "HelloWorld",
82 [&called]()
83 {
84 called = true;
85 return armnn::IBackendUniquePtr(nullptr, nullptr);
86 }
87 );
David Beck32cbb0c2018-10-09 15:46:08 +010088
89 // sanity check: the factory has not been called yet
90 BOOST_TEST(called == false);
91
David Beck3e9e1152018-10-17 14:17:50 +010092 auto factoryFunction = BackendRegistryInstance().GetFactory("HelloWorld");
David Beck32cbb0c2018-10-09 15:46:08 +010093
94 // sanity check: the factory still not called
95 BOOST_TEST(called == false);
96
97 factoryFunction();
98 BOOST_TEST(called == true);
99}
100
101BOOST_AUTO_TEST_SUITE_END()