blob: 283caafaf9069c3b770da0fd07f9bfabd5f7a92f [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>
David Beck1b61be52018-11-08 09:19:14 +00009#include <backendsCommon/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);
75}
76
77BOOST_AUTO_TEST_CASE(TestDirectCallToRegistry)
78{
David Beck3e9e1152018-10-17 14:17:50 +010079 using namespace armnn;
David Beck32cbb0c2018-10-09 15:46:08 +010080 SwapRegistryStorage helper;
81
82 bool called = false;
David Beck3e9e1152018-10-17 14:17:50 +010083 BackendRegistryInstance().Register(
84 "HelloWorld",
David Beck9efb57d2018-11-05 13:40:33 +000085 [&called]()
David Beck3e9e1152018-10-17 14:17:50 +010086 {
87 called = true;
David Beck29c75de2018-10-23 13:35:58 +010088 return armnn::IBackendInternalUniquePtr(nullptr);
David Beck3e9e1152018-10-17 14:17:50 +010089 }
90 );
David Beck32cbb0c2018-10-09 15:46:08 +010091
92 // sanity check: the factory has not been called yet
93 BOOST_TEST(called == false);
94
David Beck3e9e1152018-10-17 14:17:50 +010095 auto factoryFunction = BackendRegistryInstance().GetFactory("HelloWorld");
David Beck32cbb0c2018-10-09 15:46:08 +010096
97 // sanity check: the factory still not called
98 BOOST_TEST(called == false);
99
David Beck9efb57d2018-11-05 13:40:33 +0000100 factoryFunction();
David Beck32cbb0c2018-10-09 15:46:08 +0100101 BOOST_TEST(called == true);
102}
103
104BOOST_AUTO_TEST_SUITE_END()