aboutsummaryrefslogtreecommitdiff
path: root/21.02/_dynamic_backend_tests_8hpp_source.xhtml
blob: 564d013cbc48b41f1a7f5b01731ec97c219504c2 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
<!-- Copyright (c) 2020 ARM Limited. -->
<!--                                 -->
<!-- SPDX-License-Identifier: MIT    -->
<!--                                 -->
<!-- HTML header for doxygen 1.8.13-->
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
<meta http-equiv="X-UA-Compatible" content="IE=9"/>
<meta name="generator" content="Doxygen 1.8.13"/>
<meta name="robots" content="NOINDEX, NOFOLLOW" />
<meta name="viewport" content="width=device-width, initial-scale=1"/>
<title>ArmNN: src/backends/backendsCommon/test/DynamicBackendTests.hpp Source File</title>
<link href="tabs.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="jquery.js"></script>
<script type="text/javascript" src="dynsections.js"></script>
<link href="navtree.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="resize.js"></script>
<script type="text/javascript" src="navtreedata.js"></script>
<script type="text/javascript" src="navtree.js"></script>
<script type="text/javascript">
  $(document).ready(initResizable);
</script>
<link href="search/search.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="search/searchdata.js"></script>
<script type="text/javascript" src="search/search.js"></script>
<script type="text/x-mathjax-config">
  MathJax.Hub.Config({
    extensions: ["tex2jax.js"],
    jax: ["input/TeX","output/HTML-CSS"],
});
</script><script type="text/javascript" src="http://cdn.mathjax.org/mathjax/latest/MathJax.js"></script>
<link href="doxygen.css" rel="stylesheet" type="text/css" />
<link href="stylesheet.css" rel="stylesheet" type="text/css"/>
</head>
<body>
<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
<div id="titlearea">
<table cellspacing="0" cellpadding="0">
 <tbody>
 <tr style="height: 56px;">
  <img alt="ArmNN" src="Arm_NN_horizontal_blue.png" style="max-width: 10rem; margin-top: .5rem; margin-left 10px"/>
  <td style="padding-left: 0.5em;">
   <div id="projectname">
   &#160;<span id="projectnumber">21.02</span>
   </div>
  </td>
 </tr>
 </tbody>
</table>
</div>
<!-- end header part -->
<!-- Generated by Doxygen 1.8.13 -->
<script type="text/javascript">
var searchBox = new SearchBox("searchBox", "search",false,'Search');
</script>
<script type="text/javascript" src="menudata.js"></script>
<script type="text/javascript" src="menu.js"></script>
<script type="text/javascript">
$(function() {
  initMenu('',true,false,'search.php','Search');
  $(document).ready(function() { init_search(); });
});
</script>
<div id="main-nav"></div>
</div><!-- top -->
<div id="side-nav" class="ui-resizable side-nav-resizable">
  <div id="nav-tree">
    <div id="nav-tree-contents">
      <div id="nav-sync" class="sync"></div>
    </div>
  </div>
  <div id="splitbar" style="-moz-user-select:none;" 
       class="ui-resizable-handle">
  </div>
</div>
<script type="text/javascript">
$(document).ready(function(){initNavTree('_dynamic_backend_tests_8hpp_source.xhtml','');});
</script>
<div id="doc-content">
<!-- window showing the filter options -->
<div id="MSearchSelectWindow"
     onmouseover="return searchBox.OnSearchSelectShow()"
     onmouseout="return searchBox.OnSearchSelectHide()"
     onkeydown="return searchBox.OnSearchSelectKey(event)">
</div>

<!-- iframe showing the search results (closed by default) -->
<div id="MSearchResultsWindow">
<iframe src="javascript:void(0)" frameborder="0" 
        name="MSearchResults" id="MSearchResults">
</iframe>
</div>

<div class="header">
  <div class="headertitle">
<div class="title">DynamicBackendTests.hpp</div>  </div>
</div><!--header-->
<div class="contents">
<a href="_dynamic_backend_tests_8hpp.xhtml">Go to the documentation of this file.</a><div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno">    1</span>&#160;<span class="comment">//</span></div><div class="line"><a name="l00002"></a><span class="lineno">    2</span>&#160;<span class="comment">// Copyright © 2017 Arm Ltd. All rights reserved.</span></div><div class="line"><a name="l00003"></a><span class="lineno">    3</span>&#160;<span class="comment">// SPDX-License-Identifier: MIT</span></div><div class="line"><a name="l00004"></a><span class="lineno">    4</span>&#160;<span class="comment">//</span></div><div class="line"><a name="l00005"></a><span class="lineno">    5</span>&#160;</div><div class="line"><a name="l00006"></a><span class="lineno">    6</span>&#160;<span class="preprocessor">#pragma once</span></div><div class="line"><a name="l00007"></a><span class="lineno">    7</span>&#160;</div><div class="line"><a name="l00008"></a><span class="lineno">    8</span>&#160;<span class="preprocessor">#include &lt;<a class="code" href="_backend_registry_8hpp.xhtml">armnn/BackendRegistry.hpp</a>&gt;</span></div><div class="line"><a name="l00009"></a><span class="lineno">    9</span>&#160;<span class="preprocessor">#include &lt;<a class="code" href="include_2armnn_2backends_2_dynamic_backend_8hpp.xhtml">armnn/backends/DynamicBackend.hpp</a>&gt;</span></div><div class="line"><a name="l00010"></a><span class="lineno">   10</span>&#160;<span class="preprocessor">#include &lt;<a class="code" href="_i_layer_support_8hpp.xhtml">armnn/ILayerSupport.hpp</a>&gt;</span></div><div class="line"><a name="l00011"></a><span class="lineno">   11</span>&#160;<span class="preprocessor">#include &lt;<a class="code" href="_polymorphic_downcast_8hpp.xhtml">armnn/utility/PolymorphicDowncast.hpp</a>&gt;</span></div><div class="line"><a name="l00012"></a><span class="lineno">   12</span>&#160;<span class="preprocessor">#include &lt;<a class="code" href="_cpu_tensor_handle_8hpp.xhtml">backendsCommon/CpuTensorHandle.hpp</a>&gt;</span></div><div class="line"><a name="l00013"></a><span class="lineno">   13</span>&#160;<span class="preprocessor">#include &lt;<a class="code" href="_dynamic_backend_utils_8hpp.xhtml">backendsCommon/DynamicBackendUtils.hpp</a>&gt;</span></div><div class="line"><a name="l00014"></a><span class="lineno">   14</span>&#160;<span class="preprocessor">#include &lt;<a class="code" href="_filesystem_8hpp.xhtml">Filesystem.hpp</a>&gt;</span></div><div class="line"><a name="l00015"></a><span class="lineno">   15</span>&#160;<span class="preprocessor">#include &lt;<a class="code" href="_ref_convolution2d_workload_8hpp.xhtml">reference/workloads/RefConvolution2dWorkload.hpp</a>&gt;</span></div><div class="line"><a name="l00016"></a><span class="lineno">   16</span>&#160;<span class="preprocessor">#include &lt;<a class="code" href="_runtime_8hpp.xhtml">Runtime.hpp</a>&gt;</span></div><div class="line"><a name="l00017"></a><span class="lineno">   17</span>&#160;</div><div class="line"><a name="l00018"></a><span class="lineno">   18</span>&#160;<span class="preprocessor">#include &lt;string&gt;</span></div><div class="line"><a name="l00019"></a><span class="lineno">   19</span>&#160;<span class="preprocessor">#include &lt;memory&gt;</span></div><div class="line"><a name="l00020"></a><span class="lineno">   20</span>&#160;</div><div class="line"><a name="l00021"></a><span class="lineno">   21</span>&#160;<span class="preprocessor">#include &lt;boost/test/unit_test.hpp&gt;</span></div><div class="line"><a name="l00022"></a><span class="lineno">   22</span>&#160;</div><div class="line"><a name="l00023"></a><span class="lineno">   23</span>&#160;<span class="preprocessor">#if !defined(DYNAMIC_BACKEND_BUILD_DIR)</span></div><div class="line"><a name="l00024"></a><span class="lineno"><a class="line" href="_dynamic_backend_tests_8hpp.xhtml#a5f525e18ac7373a2250d958dd6cdf94e">   24</a></span>&#160;<span class="preprocessor">#define DYNAMIC_BACKEND_BUILD_DIR fs::path(&quot;./&quot;)</span></div><div class="line"><a name="l00025"></a><span class="lineno">   25</span>&#160;<span class="preprocessor">#endif</span></div><div class="line"><a name="l00026"></a><span class="lineno">   26</span>&#160;</div><div class="line"><a name="l00027"></a><span class="lineno">   27</span>&#160;<span class="keyword">static</span> std::string g_TestDirCLI                             = <span class="stringliteral">&quot;--dynamic-backend-build-dir&quot;</span>;</div><div class="line"><a name="l00028"></a><span class="lineno">   28</span>&#160;<span class="keyword">static</span> std::string g_TestBaseDir                            = <span class="stringliteral">&quot;src/backends/backendsCommon/test/&quot;</span>;</div><div class="line"><a name="l00029"></a><span class="lineno">   29</span>&#160;</div><div class="line"><a name="l00030"></a><span class="lineno">   30</span>&#160;<span class="keyword">static</span> std::string g_TestSharedObjectSubDir                 = <span class="stringliteral">&quot;testSharedObject/&quot;</span>;</div><div class="line"><a name="l00031"></a><span class="lineno">   31</span>&#160;<span class="keyword">static</span> std::string g_TestDynamicBackendSubDir               = <span class="stringliteral">&quot;testDynamicBackend/&quot;</span>;</div><div class="line"><a name="l00032"></a><span class="lineno">   32</span>&#160;</div><div class="line"><a name="l00033"></a><span class="lineno">   33</span>&#160;<span class="keyword">static</span> std::string g_TestSharedObjectFileName               = <span class="stringliteral">&quot;libTestSharedObject.so&quot;</span>;</div><div class="line"><a name="l00034"></a><span class="lineno">   34</span>&#160;<span class="keyword">static</span> std::string g_TestNoSharedObjectFileName             = <span class="stringliteral">&quot;libNoSharedObject.txt&quot;</span>;</div><div class="line"><a name="l00035"></a><span class="lineno">   35</span>&#160;</div><div class="line"><a name="l00036"></a><span class="lineno">   36</span>&#160;<span class="keyword">static</span> std::string g_TestValidTestDynamicBackendFileName    = <span class="stringliteral">&quot;libValidTestDynamicBackend.so&quot;</span>;</div><div class="line"><a name="l00037"></a><span class="lineno">   37</span>&#160;<span class="keyword">static</span> std::string g_TestInvalidTestDynamicBackend1FileName = <span class="stringliteral">&quot;libInvalidTestDynamicBackend1.so&quot;</span>;</div><div class="line"><a name="l00038"></a><span class="lineno">   38</span>&#160;<span class="keyword">static</span> std::string g_TestInvalidTestDynamicBackend2FileName = <span class="stringliteral">&quot;libInvalidTestDynamicBackend2.so&quot;</span>;</div><div class="line"><a name="l00039"></a><span class="lineno">   39</span>&#160;<span class="keyword">static</span> std::string g_TestInvalidTestDynamicBackend3FileName = <span class="stringliteral">&quot;libInvalidTestDynamicBackend3.so&quot;</span>;</div><div class="line"><a name="l00040"></a><span class="lineno">   40</span>&#160;<span class="keyword">static</span> std::string g_TestInvalidTestDynamicBackend4FileName = <span class="stringliteral">&quot;libInvalidTestDynamicBackend4.so&quot;</span>;</div><div class="line"><a name="l00041"></a><span class="lineno">   41</span>&#160;<span class="keyword">static</span> std::string g_TestInvalidTestDynamicBackend5FileName = <span class="stringliteral">&quot;libInvalidTestDynamicBackend5.so&quot;</span>;</div><div class="line"><a name="l00042"></a><span class="lineno">   42</span>&#160;<span class="keyword">static</span> std::string g_TestInvalidTestDynamicBackend6FileName = <span class="stringliteral">&quot;libInvalidTestDynamicBackend6.so&quot;</span>;</div><div class="line"><a name="l00043"></a><span class="lineno">   43</span>&#160;<span class="keyword">static</span> std::string g_TestInvalidTestDynamicBackend7FileName = <span class="stringliteral">&quot;libInvalidTestDynamicBackend7.so&quot;</span>;</div><div class="line"><a name="l00044"></a><span class="lineno">   44</span>&#160;</div><div class="line"><a name="l00045"></a><span class="lineno">   45</span>&#160;<span class="keyword">static</span> std::string g_TestValidBackend2FileName              = <span class="stringliteral">&quot;Arm_TestValid2_backend.so&quot;</span>;</div><div class="line"><a name="l00046"></a><span class="lineno">   46</span>&#160;<span class="keyword">static</span> std::string g_TestValidBackend3FileName              = <span class="stringliteral">&quot;Arm_TestValid3_backend.so&quot;</span>;</div><div class="line"><a name="l00047"></a><span class="lineno">   47</span>&#160;<span class="keyword">static</span> std::string g_TestValidBackend4FileName              = <span class="stringliteral">&quot;Arm_TestValid4_backend.so&quot;</span>;</div><div class="line"><a name="l00048"></a><span class="lineno">   48</span>&#160;<span class="keyword">static</span> std::string g_TestValidBackend5FileName              = <span class="stringliteral">&quot;Arm_TestValid5_backend.so&quot;</span>;</div><div class="line"><a name="l00049"></a><span class="lineno">   49</span>&#160;<span class="keyword">static</span> std::string g_TestInvalidBackend8FileName            = <span class="stringliteral">&quot;Arm_TestInvalid8_backend.so&quot;</span>;</div><div class="line"><a name="l00050"></a><span class="lineno">   50</span>&#160;<span class="keyword">static</span> std::string g_TestInvalidBackend9FileName            = <span class="stringliteral">&quot;Arm_TestInvalid9_backend.so&quot;</span>;</div><div class="line"><a name="l00051"></a><span class="lineno">   51</span>&#160;<span class="keyword">static</span> std::string g_TestInvalidBackend10FileName           = <span class="stringliteral">&quot;Arm_TestInvalid10_backend.so&quot;</span>;</div><div class="line"><a name="l00052"></a><span class="lineno">   52</span>&#160;<span class="keyword">static</span> std::string g_TestInvalidBackend11FileName           = <span class="stringliteral">&quot;Arm_TestInvalid11_backend.so&quot;</span>;</div><div class="line"><a name="l00053"></a><span class="lineno">   53</span>&#160;</div><div class="line"><a name="l00054"></a><span class="lineno">   54</span>&#160;<span class="keyword">static</span> std::string g_TestDynamicBackendsSubDir1  = <span class="stringliteral">&quot;backendsTestPath1/&quot;</span>;</div><div class="line"><a name="l00055"></a><span class="lineno">   55</span>&#160;<span class="keyword">static</span> std::string g_TestDynamicBackendsSubDir2  = <span class="stringliteral">&quot;backendsTestPath2/&quot;</span>;</div><div class="line"><a name="l00056"></a><span class="lineno">   56</span>&#160;<span class="keyword">static</span> std::string g_TestDynamicBackendsSubDir3  = <span class="stringliteral">&quot;backendsTestPath3/&quot;</span>;</div><div class="line"><a name="l00057"></a><span class="lineno">   57</span>&#160;<span class="keyword">static</span> std::string g_TestDynamicBackendsSubDir4  = <span class="stringliteral">&quot;backendsTestPath4/&quot;</span>;</div><div class="line"><a name="l00058"></a><span class="lineno">   58</span>&#160;<span class="keyword">static</span> std::string g_TestDynamicBackendsSubDir5  = <span class="stringliteral">&quot;backendsTestPath5/&quot;</span>;</div><div class="line"><a name="l00059"></a><span class="lineno">   59</span>&#160;<span class="keyword">static</span> std::string g_TestDynamicBackendsSubDir6  = <span class="stringliteral">&quot;backendsTestPath6/&quot;</span>;</div><div class="line"><a name="l00060"></a><span class="lineno">   60</span>&#160;<span class="keyword">static</span> std::string g_TestDynamicBackendsSubDir7  = <span class="stringliteral">&quot;backendsTestPath7/&quot;</span>;</div><div class="line"><a name="l00061"></a><span class="lineno">   61</span>&#160;<span class="keyword">static</span> std::string g_TestDynamicBackendsSubDir8  = <span class="stringliteral">&quot;backendsTestPath8/&quot;</span>;</div><div class="line"><a name="l00062"></a><span class="lineno">   62</span>&#160;<span class="keyword">static</span> std::string g_TestDynamicBackendsSubDir9  = <span class="stringliteral">&quot;backendsTestPath9/&quot;</span>;</div><div class="line"><a name="l00063"></a><span class="lineno">   63</span>&#160;</div><div class="line"><a name="l00064"></a><span class="lineno">   64</span>&#160;<span class="keyword">static</span> std::string g_DynamicBackendsBaseDir                 = <span class="stringliteral">&quot;src/backends/dynamic&quot;</span>;</div><div class="line"><a name="l00065"></a><span class="lineno">   65</span>&#160;<span class="keyword">static</span> std::string g_ReferenceDynamicBackendSubDir          = <span class="stringliteral">&quot;reference/&quot;</span>;</div><div class="line"><a name="l00066"></a><span class="lineno">   66</span>&#160;<span class="keyword">static</span> std::string g_ReferenceBackendFileName               = <span class="stringliteral">&quot;Arm_CpuRef_backend.so&quot;</span>;</div><div class="line"><a name="l00067"></a><span class="lineno">   67</span>&#160;</div><div class="line"><a name="l00068"></a><span class="lineno">   68</span>&#160;<span class="comment">// DynamicBackendUtils wrapper class used for testing (allows to directly invoke the protected methods)</span></div><div class="line"><a name="l00069"></a><span class="lineno"><a class="line" href="class_test_dynamic_backend_utils.xhtml">   69</a></span>&#160;<span class="keyword">class </span><a class="code" href="class_test_dynamic_backend_utils.xhtml">TestDynamicBackendUtils</a> : <span class="keyword">public</span> <a class="code" href="classarmnn_1_1_dynamic_backend_utils.xhtml">armnn::DynamicBackendUtils</a></div><div class="line"><a name="l00070"></a><span class="lineno">   70</span>&#160;{</div><div class="line"><a name="l00071"></a><span class="lineno">   71</span>&#160;<span class="keyword">public</span>:</div><div class="line"><a name="l00072"></a><span class="lineno"><a class="line" href="class_test_dynamic_backend_utils.xhtml#a8e34f3a7d4d581864eb93474b8446405">   72</a></span>&#160;    <span class="keyword">static</span> <span class="keywordtype">bool</span> <a class="code" href="class_test_dynamic_backend_utils.xhtml#a8e34f3a7d4d581864eb93474b8446405">IsBackendCompatibleTest</a>(<span class="keyword">const</span> <a class="code" href="structarmnn_1_1_backend_version.xhtml">armnn::BackendVersion</a>&amp; backendApiVersion,</div><div class="line"><a name="l00073"></a><span class="lineno">   73</span>&#160;                                        <span class="keyword">const</span> <a class="code" href="structarmnn_1_1_backend_version.xhtml">armnn::BackendVersion</a>&amp; backendVersion)</div><div class="line"><a name="l00074"></a><span class="lineno">   74</span>&#160;    {</div><div class="line"><a name="l00075"></a><span class="lineno">   75</span>&#160;        <span class="keywordflow">return</span> <a class="code" href="classarmnn_1_1_dynamic_backend_utils.xhtml#aafeb709b667b8554e43d2212b7d46e48">IsBackendCompatibleImpl</a>(backendApiVersion, backendVersion);</div><div class="line"><a name="l00076"></a><span class="lineno">   76</span>&#160;    }</div><div class="line"><a name="l00077"></a><span class="lineno">   77</span>&#160;</div><div class="line"><a name="l00078"></a><span class="lineno"><a class="line" href="class_test_dynamic_backend_utils.xhtml#ae905a2c700ca7d4b71fd64fe01e5580d">   78</a></span>&#160;    <span class="keyword">static</span> std::vector&lt;std::string&gt; <a class="code" href="class_test_dynamic_backend_utils.xhtml#ae905a2c700ca7d4b71fd64fe01e5580d">GetBackendPathsImplTest</a>(<span class="keyword">const</span> std::string&amp; path)</div><div class="line"><a name="l00079"></a><span class="lineno">   79</span>&#160;    {</div><div class="line"><a name="l00080"></a><span class="lineno">   80</span>&#160;        <span class="keywordflow">return</span> <a class="code" href="classarmnn_1_1_dynamic_backend_utils.xhtml#a5d8cade961d9ea50a19a382c974d1ce5">GetBackendPathsImpl</a>(path);</div><div class="line"><a name="l00081"></a><span class="lineno">   81</span>&#160;    }</div><div class="line"><a name="l00082"></a><span class="lineno">   82</span>&#160;</div><div class="line"><a name="l00083"></a><span class="lineno"><a class="line" href="class_test_dynamic_backend_utils.xhtml#a304e5c5c5afc70590df8927e144fbaa5">   83</a></span>&#160;    <span class="keyword">static</span> <a class="code" href="namespacearmnn.xhtml#a1854d9cda81304325664363c1fd0fb27">armnn::BackendIdSet</a> <a class="code" href="class_test_dynamic_backend_utils.xhtml#a304e5c5c5afc70590df8927e144fbaa5">RegisterDynamicBackendsImplTest</a>(</div><div class="line"><a name="l00084"></a><span class="lineno">   84</span>&#160;            <a class="code" href="classarmnn_1_1_backend_registry.xhtml">armnn::BackendRegistry</a>&amp; backendRegistry,</div><div class="line"><a name="l00085"></a><span class="lineno">   85</span>&#160;            <span class="keyword">const</span> std::vector&lt;armnn::DynamicBackendPtr&gt;&amp; dynamicBackends)</div><div class="line"><a name="l00086"></a><span class="lineno">   86</span>&#160;    {</div><div class="line"><a name="l00087"></a><span class="lineno">   87</span>&#160;        <span class="keywordflow">return</span> <a class="code" href="classarmnn_1_1_dynamic_backend_utils.xhtml#adb6f50f10cdce40bd5493d42930b58cb">RegisterDynamicBackendsImpl</a>(backendRegistry, dynamicBackends);</div><div class="line"><a name="l00088"></a><span class="lineno">   88</span>&#160;    }</div><div class="line"><a name="l00089"></a><span class="lineno">   89</span>&#160;};</div><div class="line"><a name="l00090"></a><span class="lineno">   90</span>&#160;</div><div class="line"><a name="l00091"></a><span class="lineno">   91</span>&#160;<span class="comment">// BackendRegistry wrapper class used for testing (swaps the underlying factory storage)</span></div><div class="line"><a name="l00092"></a><span class="lineno"><a class="line" href="class_test_backend_registry.xhtml">   92</a></span>&#160;<span class="keyword">class </span><a class="code" href="class_test_backend_registry.xhtml">TestBackendRegistry</a> : <span class="keyword">public</span> <a class="code" href="classarmnn_1_1_backend_registry.xhtml">armnn::BackendRegistry</a></div><div class="line"><a name="l00093"></a><span class="lineno">   93</span>&#160;{</div><div class="line"><a name="l00094"></a><span class="lineno">   94</span>&#160;<span class="keyword">public</span>:</div><div class="line"><a name="l00095"></a><span class="lineno"><a class="line" href="class_test_backend_registry.xhtml#acc225f0ce5d9703b1b36b2886993aa8e">   95</a></span>&#160;    <a class="code" href="class_test_backend_registry.xhtml#acc225f0ce5d9703b1b36b2886993aa8e">TestBackendRegistry</a>() : <a class="code" href="namespacearmnn.xhtml">armnn</a>::BackendRegistry()</div><div class="line"><a name="l00096"></a><span class="lineno">   96</span>&#160;    {</div><div class="line"><a name="l00097"></a><span class="lineno">   97</span>&#160;        Swap(<a class="code" href="namespacearmnn.xhtml#ac2807505b850738bc8a1991ce669dd47">armnn::BackendRegistryInstance</a>(), m_TempStorage);</div><div class="line"><a name="l00098"></a><span class="lineno">   98</span>&#160;    }</div><div class="line"><a name="l00099"></a><span class="lineno">   99</span>&#160;</div><div class="line"><a name="l00100"></a><span class="lineno"><a class="line" href="class_test_backend_registry.xhtml#ac93c278f2b24eed88af3d58eb6a08242">  100</a></span>&#160;    <a class="code" href="class_test_backend_registry.xhtml#ac93c278f2b24eed88af3d58eb6a08242">~TestBackendRegistry</a>()</div><div class="line"><a name="l00101"></a><span class="lineno">  101</span>&#160;    {</div><div class="line"><a name="l00102"></a><span class="lineno">  102</span>&#160;        Swap(<a class="code" href="namespacearmnn.xhtml#ac2807505b850738bc8a1991ce669dd47">armnn::BackendRegistryInstance</a>(), m_TempStorage);</div><div class="line"><a name="l00103"></a><span class="lineno">  103</span>&#160;    }</div><div class="line"><a name="l00104"></a><span class="lineno">  104</span>&#160;</div><div class="line"><a name="l00105"></a><span class="lineno">  105</span>&#160;<span class="keyword">private</span>:</div><div class="line"><a name="l00106"></a><span class="lineno">  106</span>&#160;    <a class="code" href="classarmnn_1_1_backend_registry.xhtml#a20fb10b59fccc99291e7fe993cd814bb">FactoryStorage</a> m_TempStorage;</div><div class="line"><a name="l00107"></a><span class="lineno">  107</span>&#160;};</div><div class="line"><a name="l00108"></a><span class="lineno">  108</span>&#160;</div><div class="line"><a name="l00109"></a><span class="lineno"><a class="line" href="_dynamic_backend_tests_8hpp.xhtml#a1ccc02805f5cdcbc45c6c548b5e4c29a">  109</a></span>&#160;std::string <a class="code" href="_dynamic_backend_tests_8hpp.xhtml#a1ccc02805f5cdcbc45c6c548b5e4c29a">GetBasePath</a>(<span class="keyword">const</span> std::string&amp; basePath)</div><div class="line"><a name="l00110"></a><span class="lineno">  110</span>&#160;{</div><div class="line"><a name="l00111"></a><span class="lineno">  111</span>&#160;    <span class="keyword">using namespace </span>fs;</div><div class="line"><a name="l00112"></a><span class="lineno">  112</span>&#160;    <span class="comment">// What we&#39;re looking for here is the location of the UnitTests executable.</span></div><div class="line"><a name="l00113"></a><span class="lineno">  113</span>&#160;    <span class="comment">// In the normal build environment there are a series of files and</span></div><div class="line"><a name="l00114"></a><span class="lineno">  114</span>&#160;    <span class="comment">// directories created by cmake. If the executable has been relocated they</span></div><div class="line"><a name="l00115"></a><span class="lineno">  115</span>&#160;    <span class="comment">// may not be there. The search hierarchy is:</span></div><div class="line"><a name="l00116"></a><span class="lineno">  116</span>&#160;    <span class="comment">// * User specified --dynamic-backend-build-dir</span></div><div class="line"><a name="l00117"></a><span class="lineno">  117</span>&#160;    <span class="comment">// * Compile time value of DYNAMIC_BACKEND_BUILD_DIR.</span></div><div class="line"><a name="l00118"></a><span class="lineno">  118</span>&#160;    <span class="comment">// * Arg0 location.</span></div><div class="line"><a name="l00119"></a><span class="lineno">  119</span>&#160;    <span class="comment">// * Fall back value of current directory.</span></div><div class="line"><a name="l00120"></a><span class="lineno">  120</span>&#160;    path programLocation = <a class="code" href="_dynamic_backend_tests_8hpp.xhtml#a5f525e18ac7373a2250d958dd6cdf94e">DYNAMIC_BACKEND_BUILD_DIR</a>;</div><div class="line"><a name="l00121"></a><span class="lineno">  121</span>&#160;    <span class="comment">// Look for the specific argument --dynamic-backend-build-dir?</span></div><div class="line"><a name="l00122"></a><span class="lineno">  122</span>&#160;    <span class="keywordflow">if</span> (boost::unit_test::framework::master_test_suite().argc == 3)</div><div class="line"><a name="l00123"></a><span class="lineno">  123</span>&#160;    {</div><div class="line"><a name="l00124"></a><span class="lineno">  124</span>&#160;        <span class="comment">// Boost custom arguments begin after a &#39;--&#39; on the command line.</span></div><div class="line"><a name="l00125"></a><span class="lineno">  125</span>&#160;        <span class="keywordflow">if</span> (g_TestDirCLI.compare(boost::unit_test::framework::master_test_suite().argv[1]) == 0)</div><div class="line"><a name="l00126"></a><span class="lineno">  126</span>&#160;        {</div><div class="line"><a name="l00127"></a><span class="lineno">  127</span>&#160;            <span class="comment">// Then the next argument is the path.</span></div><div class="line"><a name="l00128"></a><span class="lineno">  128</span>&#160;            programLocation = boost::unit_test::framework::master_test_suite().argv[2];</div><div class="line"><a name="l00129"></a><span class="lineno">  129</span>&#160;        }</div><div class="line"><a name="l00130"></a><span class="lineno">  130</span>&#160;    }</div><div class="line"><a name="l00131"></a><span class="lineno">  131</span>&#160;    <span class="keywordflow">else</span></div><div class="line"><a name="l00132"></a><span class="lineno">  132</span>&#160;    {</div><div class="line"><a name="l00133"></a><span class="lineno">  133</span>&#160;        <span class="comment">// Start by checking if DYNAMIC_BACKEND_BUILD_DIR value exist.</span></div><div class="line"><a name="l00134"></a><span class="lineno">  134</span>&#160;        <span class="keywordflow">if</span> (!exists(programLocation))</div><div class="line"><a name="l00135"></a><span class="lineno">  135</span>&#160;        {</div><div class="line"><a name="l00136"></a><span class="lineno">  136</span>&#160;            <span class="comment">// That doesn&#39;t exist try looking at arg[0].</span></div><div class="line"><a name="l00137"></a><span class="lineno">  137</span>&#160;            path arg0Path(boost::unit_test::framework::master_test_suite().argv[0]);</div><div class="line"><a name="l00138"></a><span class="lineno">  138</span>&#160;            arg0Path.remove_filename();</div><div class="line"><a name="l00139"></a><span class="lineno">  139</span>&#160;            path arg0SharedObjectPath(arg0Path);</div><div class="line"><a name="l00140"></a><span class="lineno">  140</span>&#160;            arg0SharedObjectPath.append(basePath);</div><div class="line"><a name="l00141"></a><span class="lineno">  141</span>&#160;            <span class="keywordflow">if</span> (exists(arg0SharedObjectPath))</div><div class="line"><a name="l00142"></a><span class="lineno">  142</span>&#160;            {</div><div class="line"><a name="l00143"></a><span class="lineno">  143</span>&#160;                <span class="comment">// Yeah arg0 worked.</span></div><div class="line"><a name="l00144"></a><span class="lineno">  144</span>&#160;                programLocation = arg0Path;</div><div class="line"><a name="l00145"></a><span class="lineno">  145</span>&#160;            }</div><div class="line"><a name="l00146"></a><span class="lineno">  146</span>&#160;        }</div><div class="line"><a name="l00147"></a><span class="lineno">  147</span>&#160;    }</div><div class="line"><a name="l00148"></a><span class="lineno">  148</span>&#160;    <span class="comment">// This is the base path from the build where the test libraries were built.</span></div><div class="line"><a name="l00149"></a><span class="lineno">  149</span>&#160;    path sharedObjectPath = programLocation.append(basePath);</div><div class="line"><a name="l00150"></a><span class="lineno">  150</span>&#160;    BOOST_REQUIRE_MESSAGE(exists(sharedObjectPath), <span class="stringliteral">&quot;Base path for shared objects does not exist: &quot;</span> +</div><div class="line"><a name="l00151"></a><span class="lineno">  151</span>&#160;                          sharedObjectPath.string() + <span class="stringliteral">&quot;\nTo specify the root of this base path on the &quot;</span> +</div><div class="line"><a name="l00152"></a><span class="lineno">  152</span>&#160;                          <span class="stringliteral">&quot;command line add: \&#39;-- --dynamic-backend-build-dir &lt;path&gt;\&#39;&quot;</span>);</div><div class="line"><a name="l00153"></a><span class="lineno">  153</span>&#160;    <span class="keywordflow">return</span> sharedObjectPath.string();</div><div class="line"><a name="l00154"></a><span class="lineno">  154</span>&#160;}</div><div class="line"><a name="l00155"></a><span class="lineno">  155</span>&#160;</div><div class="line"><a name="l00156"></a><span class="lineno"><a class="line" href="_dynamic_backend_tests_8hpp.xhtml#aaa09188eec988bf3318fbcff3d07dd97">  156</a></span>&#160;std::string <a class="code" href="_dynamic_backend_tests_8hpp.xhtml#aaa09188eec988bf3318fbcff3d07dd97">GetTestDirectoryBasePath</a>()</div><div class="line"><a name="l00157"></a><span class="lineno">  157</span>&#160;{</div><div class="line"><a name="l00158"></a><span class="lineno">  158</span>&#160;    <span class="keywordflow">return</span> <a class="code" href="_dynamic_backend_tests_8hpp.xhtml#a1ccc02805f5cdcbc45c6c548b5e4c29a">GetBasePath</a>(g_TestBaseDir);</div><div class="line"><a name="l00159"></a><span class="lineno">  159</span>&#160;}</div><div class="line"><a name="l00160"></a><span class="lineno">  160</span>&#160;</div><div class="line"><a name="l00161"></a><span class="lineno"><a class="line" href="_dynamic_backend_tests_8hpp.xhtml#a232b6171adb0f163b616059ba9ddab07">  161</a></span>&#160;std::string <a class="code" href="_dynamic_backend_tests_8hpp.xhtml#a232b6171adb0f163b616059ba9ddab07">GetDynamicBackendsBasePath</a>()</div><div class="line"><a name="l00162"></a><span class="lineno">  162</span>&#160;{</div><div class="line"><a name="l00163"></a><span class="lineno">  163</span>&#160;    <span class="keywordflow">return</span> <a class="code" href="_dynamic_backend_tests_8hpp.xhtml#a1ccc02805f5cdcbc45c6c548b5e4c29a">GetBasePath</a>(g_DynamicBackendsBaseDir);</div><div class="line"><a name="l00164"></a><span class="lineno">  164</span>&#160;}</div><div class="line"><a name="l00165"></a><span class="lineno">  165</span>&#160;</div><div class="line"><a name="l00166"></a><span class="lineno"><a class="line" href="_dynamic_backend_tests_8hpp.xhtml#aa21b882f38be6940c5c0515db9b69508">  166</a></span>&#160;std::string <a class="code" href="_dynamic_backend_tests_8hpp.xhtml#aa21b882f38be6940c5c0515db9b69508">GetTestSubDirectory</a>(<span class="keyword">const</span> std::string&amp; subdir)</div><div class="line"><a name="l00167"></a><span class="lineno">  167</span>&#160;{</div><div class="line"><a name="l00168"></a><span class="lineno">  168</span>&#160;    <span class="keyword">using namespace </span>fs;</div><div class="line"><a name="l00169"></a><span class="lineno">  169</span>&#160;</div><div class="line"><a name="l00170"></a><span class="lineno">  170</span>&#160;    std::string testDynamicBackendsBaseDir = <a class="code" href="_dynamic_backend_tests_8hpp.xhtml#aaa09188eec988bf3318fbcff3d07dd97">GetTestDirectoryBasePath</a>();</div><div class="line"><a name="l00171"></a><span class="lineno">  171</span>&#160;    path testDynamicBackendsBasePath(testDynamicBackendsBaseDir);</div><div class="line"><a name="l00172"></a><span class="lineno">  172</span>&#160;    path testDynamicBackendsSubDir = testDynamicBackendsBasePath.append(subdir);</div><div class="line"><a name="l00173"></a><span class="lineno">  173</span>&#160;    <span class="comment">// Do not check that the sub-directory exists because for testing reasons we may use non-existing paths</span></div><div class="line"><a name="l00174"></a><span class="lineno">  174</span>&#160;</div><div class="line"><a name="l00175"></a><span class="lineno">  175</span>&#160;    <span class="keywordflow">return</span> testDynamicBackendsSubDir.string();</div><div class="line"><a name="l00176"></a><span class="lineno">  176</span>&#160;}</div><div class="line"><a name="l00177"></a><span class="lineno">  177</span>&#160;</div><div class="line"><a name="l00178"></a><span class="lineno"><a class="line" href="_dynamic_backend_tests_8hpp.xhtml#a1851a4032b9e6fa980ecaf990960c9b1">  178</a></span>&#160;std::string <a class="code" href="_dynamic_backend_tests_8hpp.xhtml#aa21b882f38be6940c5c0515db9b69508">GetTestSubDirectory</a>(<span class="keyword">const</span> std::string&amp; basePath, <span class="keyword">const</span> std::string&amp; subdir)</div><div class="line"><a name="l00179"></a><span class="lineno">  179</span>&#160;{</div><div class="line"><a name="l00180"></a><span class="lineno">  180</span>&#160;    <span class="keyword">using namespace </span>fs;</div><div class="line"><a name="l00181"></a><span class="lineno">  181</span>&#160;</div><div class="line"><a name="l00182"></a><span class="lineno">  182</span>&#160;    path testDynamicBackendsBasePath(basePath);</div><div class="line"><a name="l00183"></a><span class="lineno">  183</span>&#160;    path testDynamicBackendsSubDir = testDynamicBackendsBasePath.append(subdir);</div><div class="line"><a name="l00184"></a><span class="lineno">  184</span>&#160;    <span class="comment">// Do not check that the sub-directory exists because for testing reasons we may use non-existing paths</span></div><div class="line"><a name="l00185"></a><span class="lineno">  185</span>&#160;</div><div class="line"><a name="l00186"></a><span class="lineno">  186</span>&#160;    <span class="keywordflow">return</span> testDynamicBackendsSubDir.string();</div><div class="line"><a name="l00187"></a><span class="lineno">  187</span>&#160;}</div><div class="line"><a name="l00188"></a><span class="lineno">  188</span>&#160;</div><div class="line"><a name="l00189"></a><span class="lineno"><a class="line" href="_dynamic_backend_tests_8hpp.xhtml#ad01ee94919c8ecfba3b9e4fe89ed6bbe">  189</a></span>&#160;std::string <a class="code" href="_dynamic_backend_tests_8hpp.xhtml#ad01ee94919c8ecfba3b9e4fe89ed6bbe">GetTestFilePath</a>(<span class="keyword">const</span> std::string&amp; directory, <span class="keyword">const</span> std::string&amp; fileName)</div><div class="line"><a name="l00190"></a><span class="lineno">  190</span>&#160;{</div><div class="line"><a name="l00191"></a><span class="lineno">  191</span>&#160;    <span class="keyword">using namespace </span>fs;</div><div class="line"><a name="l00192"></a><span class="lineno">  192</span>&#160;</div><div class="line"><a name="l00193"></a><span class="lineno">  193</span>&#160;    path directoryPath(directory);</div><div class="line"><a name="l00194"></a><span class="lineno">  194</span>&#160;    path fileNamePath = directoryPath.append(fileName);</div><div class="line"><a name="l00195"></a><span class="lineno">  195</span>&#160;    BOOST_CHECK(exists(fileNamePath));</div><div class="line"><a name="l00196"></a><span class="lineno">  196</span>&#160;</div><div class="line"><a name="l00197"></a><span class="lineno">  197</span>&#160;    <span class="keywordflow">return</span> fileNamePath.string();</div><div class="line"><a name="l00198"></a><span class="lineno">  198</span>&#160;}</div><div class="line"><a name="l00199"></a><span class="lineno">  199</span>&#160;</div><div class="line"><a name="l00200"></a><span class="lineno"><a class="line" href="_dynamic_backend_tests_8hpp.xhtml#a3c082270ab18262a66e97eb1d6922991">  200</a></span>&#160;<span class="keywordtype">void</span> <a class="code" href="_dynamic_backend_tests_8hpp.xhtml#a3c082270ab18262a66e97eb1d6922991">OpenCloseHandleTestImpl</a>()</div><div class="line"><a name="l00201"></a><span class="lineno">  201</span>&#160;{</div><div class="line"><a name="l00202"></a><span class="lineno">  202</span>&#160;    <span class="keyword">using namespace </span><a class="code" href="namespacearmnn.xhtml">armnn</a>;</div><div class="line"><a name="l00203"></a><span class="lineno">  203</span>&#160;</div><div class="line"><a name="l00204"></a><span class="lineno">  204</span>&#160;    std::string testSubDirectory = <a class="code" href="_dynamic_backend_tests_8hpp.xhtml#aa21b882f38be6940c5c0515db9b69508">GetTestSubDirectory</a>(g_TestSharedObjectSubDir);</div><div class="line"><a name="l00205"></a><span class="lineno">  205</span>&#160;    std::string sharedObjectFilePath = <a class="code" href="_dynamic_backend_tests_8hpp.xhtml#ad01ee94919c8ecfba3b9e4fe89ed6bbe">GetTestFilePath</a>(testSubDirectory, g_TestSharedObjectFileName);</div><div class="line"><a name="l00206"></a><span class="lineno">  206</span>&#160;</div><div class="line"><a name="l00207"></a><span class="lineno">  207</span>&#160;    <span class="keywordtype">void</span>* sharedObjectHandle = <span class="keyword">nullptr</span>;</div><div class="line"><a name="l00208"></a><span class="lineno">  208</span>&#160;    BOOST_CHECK_NO_THROW(sharedObjectHandle = DynamicBackendUtils::OpenHandle(sharedObjectFilePath));</div><div class="line"><a name="l00209"></a><span class="lineno">  209</span>&#160;    BOOST_TEST((sharedObjectHandle != <span class="keyword">nullptr</span>));</div><div class="line"><a name="l00210"></a><span class="lineno">  210</span>&#160;</div><div class="line"><a name="l00211"></a><span class="lineno">  211</span>&#160;    DynamicBackendUtils::CloseHandle(sharedObjectHandle);</div><div class="line"><a name="l00212"></a><span class="lineno">  212</span>&#160;}</div><div class="line"><a name="l00213"></a><span class="lineno">  213</span>&#160;</div><div class="line"><a name="l00214"></a><span class="lineno"><a class="line" href="_dynamic_backend_tests_8hpp.xhtml#aec7460101cf2fd4f798d287654783143">  214</a></span>&#160;<span class="keywordtype">void</span> <a class="code" href="_dynamic_backend_tests_8hpp.xhtml#aec7460101cf2fd4f798d287654783143">CloseInvalidHandleTestImpl</a>()</div><div class="line"><a name="l00215"></a><span class="lineno">  215</span>&#160;{</div><div class="line"><a name="l00216"></a><span class="lineno">  216</span>&#160;    <span class="keyword">using namespace </span><a class="code" href="namespacearmnn.xhtml">armnn</a>;</div><div class="line"><a name="l00217"></a><span class="lineno">  217</span>&#160;</div><div class="line"><a name="l00218"></a><span class="lineno">  218</span>&#160;    <span class="comment">// This calls must silently handle invalid handles and complete successfully (no segfaults, etc.)</span></div><div class="line"><a name="l00219"></a><span class="lineno">  219</span>&#160;    DynamicBackendUtils::CloseHandle(<span class="keyword">nullptr</span>);</div><div class="line"><a name="l00220"></a><span class="lineno">  220</span>&#160;}</div><div class="line"><a name="l00221"></a><span class="lineno">  221</span>&#160;</div><div class="line"><a name="l00222"></a><span class="lineno"><a class="line" href="_dynamic_backend_tests_8hpp.xhtml#a22f4f05aa4404afeca52237617335373">  222</a></span>&#160;<span class="keywordtype">void</span> <a class="code" href="_dynamic_backend_tests_8hpp.xhtml#a22f4f05aa4404afeca52237617335373">OpenEmptyFileNameTestImpl</a>()</div><div class="line"><a name="l00223"></a><span class="lineno">  223</span>&#160;{</div><div class="line"><a name="l00224"></a><span class="lineno">  224</span>&#160;    <span class="keyword">using namespace </span><a class="code" href="namespacearmnn.xhtml">armnn</a>;</div><div class="line"><a name="l00225"></a><span class="lineno">  225</span>&#160;</div><div class="line"><a name="l00226"></a><span class="lineno">  226</span>&#160;    <span class="keywordtype">void</span>* sharedObjectHandle = <span class="keyword">nullptr</span>;</div><div class="line"><a name="l00227"></a><span class="lineno">  227</span>&#160;    BOOST_CHECK_THROW(sharedObjectHandle = DynamicBackendUtils::OpenHandle(<span class="stringliteral">&quot;&quot;</span>), <a class="code" href="classarmnn_1_1_runtime_exception.xhtml">RuntimeException</a>);</div><div class="line"><a name="l00228"></a><span class="lineno">  228</span>&#160;    BOOST_TEST((sharedObjectHandle == <span class="keyword">nullptr</span>));</div><div class="line"><a name="l00229"></a><span class="lineno">  229</span>&#160;}</div><div class="line"><a name="l00230"></a><span class="lineno">  230</span>&#160;</div><div class="line"><a name="l00231"></a><span class="lineno"><a class="line" href="_dynamic_backend_tests_8hpp.xhtml#a9cf371447a3219bacc62c0f343c174c0">  231</a></span>&#160;<span class="keywordtype">void</span> <a class="code" href="_dynamic_backend_tests_8hpp.xhtml#a9cf371447a3219bacc62c0f343c174c0">OpenNotExistingFileTestImpl</a>()</div><div class="line"><a name="l00232"></a><span class="lineno">  232</span>&#160;{</div><div class="line"><a name="l00233"></a><span class="lineno">  233</span>&#160;    <span class="keyword">using namespace </span><a class="code" href="namespacearmnn.xhtml">armnn</a>;</div><div class="line"><a name="l00234"></a><span class="lineno">  234</span>&#160;</div><div class="line"><a name="l00235"></a><span class="lineno">  235</span>&#160;    <span class="keywordtype">void</span>* sharedObjectHandle = <span class="keyword">nullptr</span>;</div><div class="line"><a name="l00236"></a><span class="lineno">  236</span>&#160;    BOOST_CHECK_THROW(sharedObjectHandle = DynamicBackendUtils::OpenHandle(<span class="stringliteral">&quot;NotExistingFileName&quot;</span>), <a class="code" href="classarmnn_1_1_runtime_exception.xhtml">RuntimeException</a>);</div><div class="line"><a name="l00237"></a><span class="lineno">  237</span>&#160;    BOOST_TEST((sharedObjectHandle == <span class="keyword">nullptr</span>));</div><div class="line"><a name="l00238"></a><span class="lineno">  238</span>&#160;}</div><div class="line"><a name="l00239"></a><span class="lineno">  239</span>&#160;</div><div class="line"><a name="l00240"></a><span class="lineno"><a class="line" href="_dynamic_backend_tests_8hpp.xhtml#a6f750fea35638f0442885edb837b5d16">  240</a></span>&#160;<span class="keywordtype">void</span> <a class="code" href="_dynamic_backend_tests_8hpp.xhtml#a6f750fea35638f0442885edb837b5d16">OpenNotSharedObjectTestImpl</a>()</div><div class="line"><a name="l00241"></a><span class="lineno">  241</span>&#160;{</div><div class="line"><a name="l00242"></a><span class="lineno">  242</span>&#160;    <span class="keyword">using namespace </span><a class="code" href="namespacearmnn.xhtml">armnn</a>;</div><div class="line"><a name="l00243"></a><span class="lineno">  243</span>&#160;</div><div class="line"><a name="l00244"></a><span class="lineno">  244</span>&#160;    std::string testSubDirectory = <a class="code" href="_dynamic_backend_tests_8hpp.xhtml#aa21b882f38be6940c5c0515db9b69508">GetTestSubDirectory</a>(g_TestSharedObjectSubDir);</div><div class="line"><a name="l00245"></a><span class="lineno">  245</span>&#160;    std::string notSharedObjectFilePath = <a class="code" href="_dynamic_backend_tests_8hpp.xhtml#ad01ee94919c8ecfba3b9e4fe89ed6bbe">GetTestFilePath</a>(testSubDirectory, g_TestNoSharedObjectFileName);</div><div class="line"><a name="l00246"></a><span class="lineno">  246</span>&#160;</div><div class="line"><a name="l00247"></a><span class="lineno">  247</span>&#160;    <span class="keywordtype">void</span>* sharedObjectHandle = <span class="keyword">nullptr</span>;</div><div class="line"><a name="l00248"></a><span class="lineno">  248</span>&#160;    BOOST_CHECK_THROW(sharedObjectHandle = DynamicBackendUtils::OpenHandle(notSharedObjectFilePath), <a class="code" href="classarmnn_1_1_runtime_exception.xhtml">RuntimeException</a>);</div><div class="line"><a name="l00249"></a><span class="lineno">  249</span>&#160;    BOOST_TEST((sharedObjectHandle == <span class="keyword">nullptr</span>));</div><div class="line"><a name="l00250"></a><span class="lineno">  250</span>&#160;}</div><div class="line"><a name="l00251"></a><span class="lineno">  251</span>&#160;</div><div class="line"><a name="l00252"></a><span class="lineno"><a class="line" href="_dynamic_backend_tests_8hpp.xhtml#a2384b592a8946dc96a1ea116d86993bf">  252</a></span>&#160;<span class="keywordtype">void</span> <a class="code" href="_dynamic_backend_tests_8hpp.xhtml#a2384b592a8946dc96a1ea116d86993bf">GetValidEntryPointTestImpl</a>()</div><div class="line"><a name="l00253"></a><span class="lineno">  253</span>&#160;{</div><div class="line"><a name="l00254"></a><span class="lineno">  254</span>&#160;    <span class="keyword">using namespace </span><a class="code" href="namespacearmnn.xhtml">armnn</a>;</div><div class="line"><a name="l00255"></a><span class="lineno">  255</span>&#160;</div><div class="line"><a name="l00256"></a><span class="lineno">  256</span>&#160;    std::string testSubDirectory = <a class="code" href="_dynamic_backend_tests_8hpp.xhtml#aa21b882f38be6940c5c0515db9b69508">GetTestSubDirectory</a>(g_TestSharedObjectSubDir);</div><div class="line"><a name="l00257"></a><span class="lineno">  257</span>&#160;    std::string sharedObjectFilePath = <a class="code" href="_dynamic_backend_tests_8hpp.xhtml#ad01ee94919c8ecfba3b9e4fe89ed6bbe">GetTestFilePath</a>(testSubDirectory, g_TestSharedObjectFileName);</div><div class="line"><a name="l00258"></a><span class="lineno">  258</span>&#160;</div><div class="line"><a name="l00259"></a><span class="lineno">  259</span>&#160;    <span class="keywordtype">void</span>* sharedObjectHandle = <span class="keyword">nullptr</span>;</div><div class="line"><a name="l00260"></a><span class="lineno">  260</span>&#160;    BOOST_CHECK_NO_THROW(sharedObjectHandle = DynamicBackendUtils::OpenHandle(sharedObjectFilePath));</div><div class="line"><a name="l00261"></a><span class="lineno">  261</span>&#160;    BOOST_TEST((sharedObjectHandle != <span class="keyword">nullptr</span>));</div><div class="line"><a name="l00262"></a><span class="lineno">  262</span>&#160;</div><div class="line"><a name="l00263"></a><span class="lineno">  263</span>&#160;    <span class="keyword">using</span> TestFunctionType = int(*)(int);</div><div class="line"><a name="l00264"></a><span class="lineno">  264</span>&#160;    TestFunctionType testFunctionPointer = <span class="keyword">nullptr</span>;</div><div class="line"><a name="l00265"></a><span class="lineno">  265</span>&#160;    BOOST_CHECK_NO_THROW(testFunctionPointer = DynamicBackendUtils::GetEntryPoint&lt;TestFunctionType&gt;(sharedObjectHandle,</div><div class="line"><a name="l00266"></a><span class="lineno">  266</span>&#160;                                                                                                    <span class="stringliteral">&quot;TestFunction1&quot;</span>));</div><div class="line"><a name="l00267"></a><span class="lineno">  267</span>&#160;    BOOST_TEST((testFunctionPointer != <span class="keyword">nullptr</span>));</div><div class="line"><a name="l00268"></a><span class="lineno">  268</span>&#160;    BOOST_TEST(testFunctionPointer(7) == 7);</div><div class="line"><a name="l00269"></a><span class="lineno">  269</span>&#160;</div><div class="line"><a name="l00270"></a><span class="lineno">  270</span>&#160;    DynamicBackendUtils::CloseHandle(sharedObjectHandle);</div><div class="line"><a name="l00271"></a><span class="lineno">  271</span>&#160;}</div><div class="line"><a name="l00272"></a><span class="lineno">  272</span>&#160;</div><div class="line"><a name="l00273"></a><span class="lineno"><a class="line" href="_dynamic_backend_tests_8hpp.xhtml#a7d05c0a2fbb1faaeb5d98aa10bfa5cbf">  273</a></span>&#160;<span class="keywordtype">void</span> <a class="code" href="_dynamic_backend_tests_8hpp.xhtml#a7d05c0a2fbb1faaeb5d98aa10bfa5cbf">GetNameMangledEntryPointTestImpl</a>()</div><div class="line"><a name="l00274"></a><span class="lineno">  274</span>&#160;{</div><div class="line"><a name="l00275"></a><span class="lineno">  275</span>&#160;    <span class="keyword">using namespace </span><a class="code" href="namespacearmnn.xhtml">armnn</a>;</div><div class="line"><a name="l00276"></a><span class="lineno">  276</span>&#160;</div><div class="line"><a name="l00277"></a><span class="lineno">  277</span>&#160;    std::string testSubDirectory = <a class="code" href="_dynamic_backend_tests_8hpp.xhtml#aa21b882f38be6940c5c0515db9b69508">GetTestSubDirectory</a>(g_TestSharedObjectSubDir);</div><div class="line"><a name="l00278"></a><span class="lineno">  278</span>&#160;    std::string sharedObjectFilePath = <a class="code" href="_dynamic_backend_tests_8hpp.xhtml#ad01ee94919c8ecfba3b9e4fe89ed6bbe">GetTestFilePath</a>(testSubDirectory, g_TestSharedObjectFileName);</div><div class="line"><a name="l00279"></a><span class="lineno">  279</span>&#160;</div><div class="line"><a name="l00280"></a><span class="lineno">  280</span>&#160;    <span class="keywordtype">void</span>* sharedObjectHandle = <span class="keyword">nullptr</span>;</div><div class="line"><a name="l00281"></a><span class="lineno">  281</span>&#160;    BOOST_CHECK_NO_THROW(sharedObjectHandle = DynamicBackendUtils::OpenHandle(sharedObjectFilePath));</div><div class="line"><a name="l00282"></a><span class="lineno">  282</span>&#160;    BOOST_TEST((sharedObjectHandle != <span class="keyword">nullptr</span>));</div><div class="line"><a name="l00283"></a><span class="lineno">  283</span>&#160;</div><div class="line"><a name="l00284"></a><span class="lineno">  284</span>&#160;    <span class="keyword">using</span> TestFunctionType = int(*)(int);</div><div class="line"><a name="l00285"></a><span class="lineno">  285</span>&#160;    TestFunctionType testFunctionPointer = <span class="keyword">nullptr</span>;</div><div class="line"><a name="l00286"></a><span class="lineno">  286</span>&#160;    BOOST_CHECK_THROW(testFunctionPointer = DynamicBackendUtils::GetEntryPoint&lt;TestFunctionType&gt;(sharedObjectHandle,</div><div class="line"><a name="l00287"></a><span class="lineno">  287</span>&#160;                                                                                                 <span class="stringliteral">&quot;TestFunction2&quot;</span>),</div><div class="line"><a name="l00288"></a><span class="lineno">  288</span>&#160;                      <a class="code" href="classarmnn_1_1_runtime_exception.xhtml">RuntimeException</a>);</div><div class="line"><a name="l00289"></a><span class="lineno">  289</span>&#160;    BOOST_TEST((testFunctionPointer == <span class="keyword">nullptr</span>));</div><div class="line"><a name="l00290"></a><span class="lineno">  290</span>&#160;</div><div class="line"><a name="l00291"></a><span class="lineno">  291</span>&#160;    DynamicBackendUtils::CloseHandle(sharedObjectHandle);</div><div class="line"><a name="l00292"></a><span class="lineno">  292</span>&#160;}</div><div class="line"><a name="l00293"></a><span class="lineno">  293</span>&#160;</div><div class="line"><a name="l00294"></a><span class="lineno"><a class="line" href="_dynamic_backend_tests_8hpp.xhtml#a2ea23607d9c0b55b90744e9e5f74e7f2">  294</a></span>&#160;<span class="keywordtype">void</span> <a class="code" href="_dynamic_backend_tests_8hpp.xhtml#a2ea23607d9c0b55b90744e9e5f74e7f2">GetNoExternEntryPointTestImpl</a>()</div><div class="line"><a name="l00295"></a><span class="lineno">  295</span>&#160;{</div><div class="line"><a name="l00296"></a><span class="lineno">  296</span>&#160;    <span class="keyword">using namespace </span><a class="code" href="namespacearmnn.xhtml">armnn</a>;</div><div class="line"><a name="l00297"></a><span class="lineno">  297</span>&#160;</div><div class="line"><a name="l00298"></a><span class="lineno">  298</span>&#160;    std::string testSubDirectory = <a class="code" href="_dynamic_backend_tests_8hpp.xhtml#aa21b882f38be6940c5c0515db9b69508">GetTestSubDirectory</a>(g_TestSharedObjectSubDir);</div><div class="line"><a name="l00299"></a><span class="lineno">  299</span>&#160;    std::string sharedObjectFilePath = <a class="code" href="_dynamic_backend_tests_8hpp.xhtml#ad01ee94919c8ecfba3b9e4fe89ed6bbe">GetTestFilePath</a>(testSubDirectory, g_TestSharedObjectFileName);</div><div class="line"><a name="l00300"></a><span class="lineno">  300</span>&#160;</div><div class="line"><a name="l00301"></a><span class="lineno">  301</span>&#160;    <span class="keywordtype">void</span>* sharedObjectHandle = <span class="keyword">nullptr</span>;</div><div class="line"><a name="l00302"></a><span class="lineno">  302</span>&#160;    BOOST_CHECK_NO_THROW(sharedObjectHandle = DynamicBackendUtils::OpenHandle(sharedObjectFilePath));</div><div class="line"><a name="l00303"></a><span class="lineno">  303</span>&#160;    BOOST_TEST((sharedObjectHandle != <span class="keyword">nullptr</span>));</div><div class="line"><a name="l00304"></a><span class="lineno">  304</span>&#160;</div><div class="line"><a name="l00305"></a><span class="lineno">  305</span>&#160;    <span class="keyword">using</span> TestFunctionType = int(*)(int);</div><div class="line"><a name="l00306"></a><span class="lineno">  306</span>&#160;    TestFunctionType testFunctionPointer = <span class="keyword">nullptr</span>;</div><div class="line"><a name="l00307"></a><span class="lineno">  307</span>&#160;    BOOST_CHECK_THROW(testFunctionPointer = DynamicBackendUtils::GetEntryPoint&lt;TestFunctionType&gt;(sharedObjectHandle,</div><div class="line"><a name="l00308"></a><span class="lineno">  308</span>&#160;                                                                                                 <span class="stringliteral">&quot;TestFunction3&quot;</span>),</div><div class="line"><a name="l00309"></a><span class="lineno">  309</span>&#160;                      <a class="code" href="classarmnn_1_1_runtime_exception.xhtml">RuntimeException</a>);</div><div class="line"><a name="l00310"></a><span class="lineno">  310</span>&#160;    BOOST_TEST((testFunctionPointer == <span class="keyword">nullptr</span>));</div><div class="line"><a name="l00311"></a><span class="lineno">  311</span>&#160;</div><div class="line"><a name="l00312"></a><span class="lineno">  312</span>&#160;    DynamicBackendUtils::CloseHandle(sharedObjectHandle);</div><div class="line"><a name="l00313"></a><span class="lineno">  313</span>&#160;}</div><div class="line"><a name="l00314"></a><span class="lineno">  314</span>&#160;</div><div class="line"><a name="l00315"></a><span class="lineno"><a class="line" href="_dynamic_backend_tests_8hpp.xhtml#ad4a311ecf0fe6057c01ed11b2df4ed15">  315</a></span>&#160;<span class="keywordtype">void</span> <a class="code" href="_dynamic_backend_tests_8hpp.xhtml#ad4a311ecf0fe6057c01ed11b2df4ed15">GetNotExistingEntryPointTestImpl</a>()</div><div class="line"><a name="l00316"></a><span class="lineno">  316</span>&#160;{</div><div class="line"><a name="l00317"></a><span class="lineno">  317</span>&#160;    <span class="keyword">using namespace </span><a class="code" href="namespacearmnn.xhtml">armnn</a>;</div><div class="line"><a name="l00318"></a><span class="lineno">  318</span>&#160;</div><div class="line"><a name="l00319"></a><span class="lineno">  319</span>&#160;    std::string testSubDirectory = <a class="code" href="_dynamic_backend_tests_8hpp.xhtml#aa21b882f38be6940c5c0515db9b69508">GetTestSubDirectory</a>(g_TestSharedObjectSubDir);</div><div class="line"><a name="l00320"></a><span class="lineno">  320</span>&#160;    std::string sharedObjectFilePath = <a class="code" href="_dynamic_backend_tests_8hpp.xhtml#ad01ee94919c8ecfba3b9e4fe89ed6bbe">GetTestFilePath</a>(testSubDirectory, g_TestSharedObjectFileName);</div><div class="line"><a name="l00321"></a><span class="lineno">  321</span>&#160;</div><div class="line"><a name="l00322"></a><span class="lineno">  322</span>&#160;    <span class="keywordtype">void</span>* sharedObjectHandle = <span class="keyword">nullptr</span>;</div><div class="line"><a name="l00323"></a><span class="lineno">  323</span>&#160;    BOOST_CHECK_NO_THROW(sharedObjectHandle = DynamicBackendUtils::OpenHandle(sharedObjectFilePath));</div><div class="line"><a name="l00324"></a><span class="lineno">  324</span>&#160;    BOOST_TEST((sharedObjectHandle != <span class="keyword">nullptr</span>));</div><div class="line"><a name="l00325"></a><span class="lineno">  325</span>&#160;</div><div class="line"><a name="l00326"></a><span class="lineno">  326</span>&#160;    <span class="keyword">using</span> TestFunctionType = int(*)(int);</div><div class="line"><a name="l00327"></a><span class="lineno">  327</span>&#160;    TestFunctionType testFunctionPointer = <span class="keyword">nullptr</span>;</div><div class="line"><a name="l00328"></a><span class="lineno">  328</span>&#160;    BOOST_CHECK_THROW(testFunctionPointer = DynamicBackendUtils::GetEntryPoint&lt;TestFunctionType&gt;(sharedObjectHandle,</div><div class="line"><a name="l00329"></a><span class="lineno">  329</span>&#160;                                                                                                 <span class="stringliteral">&quot;TestFunction4&quot;</span>),</div><div class="line"><a name="l00330"></a><span class="lineno">  330</span>&#160;                      <a class="code" href="classarmnn_1_1_runtime_exception.xhtml">RuntimeException</a>);</div><div class="line"><a name="l00331"></a><span class="lineno">  331</span>&#160;    BOOST_TEST((testFunctionPointer == <span class="keyword">nullptr</span>));</div><div class="line"><a name="l00332"></a><span class="lineno">  332</span>&#160;</div><div class="line"><a name="l00333"></a><span class="lineno">  333</span>&#160;    DynamicBackendUtils::CloseHandle(sharedObjectHandle);</div><div class="line"><a name="l00334"></a><span class="lineno">  334</span>&#160;}</div><div class="line"><a name="l00335"></a><span class="lineno">  335</span>&#160;</div><div class="line"><a name="l00336"></a><span class="lineno"><a class="line" href="_dynamic_backend_tests_8hpp.xhtml#a8bafc3a98143bd2cef2748edb409aa54">  336</a></span>&#160;<span class="keywordtype">void</span> <a class="code" href="_dynamic_backend_tests_8hpp.xhtml#a8bafc3a98143bd2cef2748edb409aa54">BackendVersioningTestImpl</a>()</div><div class="line"><a name="l00337"></a><span class="lineno">  337</span>&#160;{</div><div class="line"><a name="l00338"></a><span class="lineno">  338</span>&#160;    <span class="keyword">using namespace </span><a class="code" href="namespacearmnn.xhtml">armnn</a>;</div><div class="line"><a name="l00339"></a><span class="lineno">  339</span>&#160;</div><div class="line"><a name="l00340"></a><span class="lineno">  340</span>&#160;    <span class="comment">// The backend API version used for the tests</span></div><div class="line"><a name="l00341"></a><span class="lineno">  341</span>&#160;    <a class="code" href="structarmnn_1_1_backend_version.xhtml">BackendVersion</a> backendApiVersion{ 2, 4 };</div><div class="line"><a name="l00342"></a><span class="lineno">  342</span>&#160;</div><div class="line"><a name="l00343"></a><span class="lineno">  343</span>&#160;    <span class="comment">// Same backend and backend API versions are compatible with the backend API</span></div><div class="line"><a name="l00344"></a><span class="lineno">  344</span>&#160;    <a class="code" href="structarmnn_1_1_backend_version.xhtml">BackendVersion</a> sameBackendVersion{ 2, 4 };</div><div class="line"><a name="l00345"></a><span class="lineno">  345</span>&#160;    BOOST_TEST(sameBackendVersion == backendApiVersion);</div><div class="line"><a name="l00346"></a><span class="lineno">  346</span>&#160;    BOOST_TEST(sameBackendVersion &lt;= backendApiVersion);</div><div class="line"><a name="l00347"></a><span class="lineno">  347</span>&#160;    BOOST_TEST(<a class="code" href="class_test_dynamic_backend_utils.xhtml#a8e34f3a7d4d581864eb93474b8446405">TestDynamicBackendUtils::IsBackendCompatibleTest</a>(backendApiVersion, sameBackendVersion) == <span class="keyword">true</span>);</div><div class="line"><a name="l00348"></a><span class="lineno">  348</span>&#160;</div><div class="line"><a name="l00349"></a><span class="lineno">  349</span>&#160;    <span class="comment">// Backend versions that differ from the backend API version by major revision are not compatible</span></div><div class="line"><a name="l00350"></a><span class="lineno">  350</span>&#160;    <span class="comment">// with the backend API</span></div><div class="line"><a name="l00351"></a><span class="lineno">  351</span>&#160;    <a class="code" href="structarmnn_1_1_backend_version.xhtml">BackendVersion</a> laterMajorBackendVersion{ 3, 4 };</div><div class="line"><a name="l00352"></a><span class="lineno">  352</span>&#160;    BOOST_TEST(!(laterMajorBackendVersion == backendApiVersion));</div><div class="line"><a name="l00353"></a><span class="lineno">  353</span>&#160;    BOOST_TEST(!(laterMajorBackendVersion &lt;= backendApiVersion));</div><div class="line"><a name="l00354"></a><span class="lineno">  354</span>&#160;    BOOST_TEST(<a class="code" href="class_test_dynamic_backend_utils.xhtml#a8e34f3a7d4d581864eb93474b8446405">TestDynamicBackendUtils::IsBackendCompatibleTest</a>(backendApiVersion, laterMajorBackendVersion) == <span class="keyword">false</span>);</div><div class="line"><a name="l00355"></a><span class="lineno">  355</span>&#160;</div><div class="line"><a name="l00356"></a><span class="lineno">  356</span>&#160;    <a class="code" href="structarmnn_1_1_backend_version.xhtml">BackendVersion</a> earlierMajorBackendVersion{ 1, 4 };</div><div class="line"><a name="l00357"></a><span class="lineno">  357</span>&#160;    BOOST_TEST(!(earlierMajorBackendVersion == backendApiVersion));</div><div class="line"><a name="l00358"></a><span class="lineno">  358</span>&#160;    BOOST_TEST(earlierMajorBackendVersion &lt;= backendApiVersion);</div><div class="line"><a name="l00359"></a><span class="lineno">  359</span>&#160;    BOOST_TEST(<a class="code" href="class_test_dynamic_backend_utils.xhtml#a8e34f3a7d4d581864eb93474b8446405">TestDynamicBackendUtils::IsBackendCompatibleTest</a>(backendApiVersion,</div><div class="line"><a name="l00360"></a><span class="lineno">  360</span>&#160;                                                                earlierMajorBackendVersion) == <span class="keyword">false</span>);</div><div class="line"><a name="l00361"></a><span class="lineno">  361</span>&#160;</div><div class="line"><a name="l00362"></a><span class="lineno">  362</span>&#160;    <span class="comment">// Backend versions with the same major revision but later minor revision than</span></div><div class="line"><a name="l00363"></a><span class="lineno">  363</span>&#160;    <span class="comment">// the backend API version are not compatible with the backend API</span></div><div class="line"><a name="l00364"></a><span class="lineno">  364</span>&#160;    <a class="code" href="structarmnn_1_1_backend_version.xhtml">BackendVersion</a> laterMinorBackendVersion{ 2, 5 };</div><div class="line"><a name="l00365"></a><span class="lineno">  365</span>&#160;    BOOST_TEST(!(laterMinorBackendVersion == backendApiVersion));</div><div class="line"><a name="l00366"></a><span class="lineno">  366</span>&#160;    BOOST_TEST(!(laterMinorBackendVersion &lt;= backendApiVersion));</div><div class="line"><a name="l00367"></a><span class="lineno">  367</span>&#160;    BOOST_TEST(<a class="code" href="class_test_dynamic_backend_utils.xhtml#a8e34f3a7d4d581864eb93474b8446405">TestDynamicBackendUtils::IsBackendCompatibleTest</a>(backendApiVersion, laterMinorBackendVersion) == <span class="keyword">false</span>);</div><div class="line"><a name="l00368"></a><span class="lineno">  368</span>&#160;</div><div class="line"><a name="l00369"></a><span class="lineno">  369</span>&#160;    <span class="comment">// Backend versions with the same major revision but earlier minor revision than</span></div><div class="line"><a name="l00370"></a><span class="lineno">  370</span>&#160;    <span class="comment">// the backend API version are compatible with the backend API</span></div><div class="line"><a name="l00371"></a><span class="lineno">  371</span>&#160;    <a class="code" href="structarmnn_1_1_backend_version.xhtml">BackendVersion</a> earlierMinorBackendVersion{ 2, 3 };</div><div class="line"><a name="l00372"></a><span class="lineno">  372</span>&#160;    BOOST_TEST(!(earlierMinorBackendVersion == backendApiVersion));</div><div class="line"><a name="l00373"></a><span class="lineno">  373</span>&#160;    BOOST_TEST(earlierMinorBackendVersion &lt;= backendApiVersion);</div><div class="line"><a name="l00374"></a><span class="lineno">  374</span>&#160;    BOOST_TEST(<a class="code" href="class_test_dynamic_backend_utils.xhtml#a8e34f3a7d4d581864eb93474b8446405">TestDynamicBackendUtils::IsBackendCompatibleTest</a>(backendApiVersion, earlierMinorBackendVersion) == <span class="keyword">true</span>);</div><div class="line"><a name="l00375"></a><span class="lineno">  375</span>&#160;}</div><div class="line"><a name="l00376"></a><span class="lineno">  376</span>&#160;</div><div class="line"><a name="l00377"></a><span class="lineno">  377</span>&#160;<span class="preprocessor">#if defined(ARMNNREF_ENABLED)</span></div><div class="line"><a name="l00378"></a><span class="lineno">  378</span>&#160;<span class="keywordtype">void</span> CreateValidDynamicBackendObjectTestImpl()</div><div class="line"><a name="l00379"></a><span class="lineno">  379</span>&#160;{</div><div class="line"><a name="l00380"></a><span class="lineno">  380</span>&#160;    <span class="comment">// Valid shared object handle</span></div><div class="line"><a name="l00381"></a><span class="lineno">  381</span>&#160;    <span class="comment">// Correct name mangling</span></div><div class="line"><a name="l00382"></a><span class="lineno">  382</span>&#160;    <span class="comment">// Correct interface</span></div><div class="line"><a name="l00383"></a><span class="lineno">  383</span>&#160;    <span class="comment">// Correct backend implementation</span></div><div class="line"><a name="l00384"></a><span class="lineno">  384</span>&#160;</div><div class="line"><a name="l00385"></a><span class="lineno">  385</span>&#160;    <span class="keyword">using namespace </span><a class="code" href="namespacearmnn.xhtml">armnn</a>;</div><div class="line"><a name="l00386"></a><span class="lineno">  386</span>&#160;</div><div class="line"><a name="l00387"></a><span class="lineno">  387</span>&#160;    std::string testSubDirectory = <a class="code" href="_dynamic_backend_tests_8hpp.xhtml#aa21b882f38be6940c5c0515db9b69508">GetTestSubDirectory</a>(g_TestDynamicBackendSubDir);</div><div class="line"><a name="l00388"></a><span class="lineno">  388</span>&#160;</div><div class="line"><a name="l00389"></a><span class="lineno">  389</span>&#160;    <span class="comment">// We expect this path to exists so we can load a valid dynamic backend.</span></div><div class="line"><a name="l00390"></a><span class="lineno">  390</span>&#160;    BOOST_CHECK_MESSAGE(fs::exists(testSubDirectory),</div><div class="line"><a name="l00391"></a><span class="lineno">  391</span>&#160;                       <span class="stringliteral">&quot;Base path for shared objects does not exist: &quot;</span> + testSubDirectory);</div><div class="line"><a name="l00392"></a><span class="lineno">  392</span>&#160;</div><div class="line"><a name="l00393"></a><span class="lineno">  393</span>&#160;    std::string sharedObjectFilePath = <a class="code" href="_dynamic_backend_tests_8hpp.xhtml#ad01ee94919c8ecfba3b9e4fe89ed6bbe">GetTestFilePath</a>(testSubDirectory, g_TestValidTestDynamicBackendFileName);</div><div class="line"><a name="l00394"></a><span class="lineno">  394</span>&#160;</div><div class="line"><a name="l00395"></a><span class="lineno">  395</span>&#160;    <span class="keywordtype">void</span>* sharedObjectHandle = <span class="keyword">nullptr</span>;</div><div class="line"><a name="l00396"></a><span class="lineno">  396</span>&#160;    BOOST_CHECK_NO_THROW(sharedObjectHandle = DynamicBackendUtils::OpenHandle(sharedObjectFilePath));</div><div class="line"><a name="l00397"></a><span class="lineno">  397</span>&#160;    BOOST_TEST((sharedObjectHandle != <span class="keyword">nullptr</span>));</div><div class="line"><a name="l00398"></a><span class="lineno">  398</span>&#160;</div><div class="line"><a name="l00399"></a><span class="lineno">  399</span>&#160;    <a class="code" href="namespacearmnn.xhtml#a754d43dc24a0fe36ecb3044d8f13a413">DynamicBackendPtr</a> dynamicBackend;</div><div class="line"><a name="l00400"></a><span class="lineno">  400</span>&#160;    BOOST_CHECK_NO_THROW(dynamicBackend.reset(<span class="keyword">new</span> <a class="code" href="classarmnn_1_1_dynamic_backend.xhtml">DynamicBackend</a>(sharedObjectHandle)));</div><div class="line"><a name="l00401"></a><span class="lineno">  401</span>&#160;    BOOST_TEST((dynamicBackend != <span class="keyword">nullptr</span>));</div><div class="line"><a name="l00402"></a><span class="lineno">  402</span>&#160;</div><div class="line"><a name="l00403"></a><span class="lineno">  403</span>&#160;    <a class="code" href="classarmnn_1_1_backend_id.xhtml">BackendId</a> dynamicBackendId;</div><div class="line"><a name="l00404"></a><span class="lineno">  404</span>&#160;    BOOST_CHECK_NO_THROW(dynamicBackendId = dynamicBackend-&gt;GetBackendId());</div><div class="line"><a name="l00405"></a><span class="lineno">  405</span>&#160;    BOOST_TEST((dynamicBackendId == <span class="stringliteral">&quot;ValidTestDynamicBackend&quot;</span>));</div><div class="line"><a name="l00406"></a><span class="lineno">  406</span>&#160;</div><div class="line"><a name="l00407"></a><span class="lineno">  407</span>&#160;    <a class="code" href="structarmnn_1_1_backend_version.xhtml">BackendVersion</a> dynamicBackendVersion;</div><div class="line"><a name="l00408"></a><span class="lineno">  408</span>&#160;    BOOST_CHECK_NO_THROW(dynamicBackendVersion = dynamicBackend-&gt;GetBackendVersion());</div><div class="line"><a name="l00409"></a><span class="lineno">  409</span>&#160;    BOOST_TEST((dynamicBackendVersion == IBackendInternal::GetApiVersion()));</div><div class="line"><a name="l00410"></a><span class="lineno">  410</span>&#160;</div><div class="line"><a name="l00411"></a><span class="lineno">  411</span>&#160;    <a class="code" href="namespacearmnn.xhtml#ade0af9dacaa52cafdd701bef2e901c77">IBackendInternalUniquePtr</a> dynamicBackendInstance1;</div><div class="line"><a name="l00412"></a><span class="lineno">  412</span>&#160;    BOOST_CHECK_NO_THROW(dynamicBackendInstance1 = dynamicBackend-&gt;GetBackend());</div><div class="line"><a name="l00413"></a><span class="lineno">  413</span>&#160;    BOOST_TEST((dynamicBackendInstance1 != <span class="keyword">nullptr</span>));</div><div class="line"><a name="l00414"></a><span class="lineno">  414</span>&#160;</div><div class="line"><a name="l00415"></a><span class="lineno">  415</span>&#160;    <a class="code" href="classarmnn_1_1_backend_registry.xhtml#aa33ac375677ee8436456a585dd6f68d9">BackendRegistry::FactoryFunction</a> dynamicBackendFactoryFunction = <span class="keyword">nullptr</span>;</div><div class="line"><a name="l00416"></a><span class="lineno">  416</span>&#160;    BOOST_CHECK_NO_THROW(dynamicBackendFactoryFunction = dynamicBackend-&gt;GetFactoryFunction());</div><div class="line"><a name="l00417"></a><span class="lineno">  417</span>&#160;    BOOST_TEST((dynamicBackendFactoryFunction != <span class="keyword">nullptr</span>));</div><div class="line"><a name="l00418"></a><span class="lineno">  418</span>&#160;</div><div class="line"><a name="l00419"></a><span class="lineno">  419</span>&#160;    <a class="code" href="namespacearmnn.xhtml#ade0af9dacaa52cafdd701bef2e901c77">IBackendInternalUniquePtr</a> dynamicBackendInstance2;</div><div class="line"><a name="l00420"></a><span class="lineno">  420</span>&#160;    BOOST_CHECK_NO_THROW(dynamicBackendInstance2 = dynamicBackendFactoryFunction());</div><div class="line"><a name="l00421"></a><span class="lineno">  421</span>&#160;    BOOST_TEST((dynamicBackendInstance2 != <span class="keyword">nullptr</span>));</div><div class="line"><a name="l00422"></a><span class="lineno">  422</span>&#160;</div><div class="line"><a name="l00423"></a><span class="lineno">  423</span>&#160;    BOOST_TEST((dynamicBackendInstance1-&gt;GetId() == <span class="stringliteral">&quot;ValidTestDynamicBackend&quot;</span>));</div><div class="line"><a name="l00424"></a><span class="lineno">  424</span>&#160;    BOOST_TEST((dynamicBackendInstance2-&gt;GetId() == <span class="stringliteral">&quot;ValidTestDynamicBackend&quot;</span>));</div><div class="line"><a name="l00425"></a><span class="lineno">  425</span>&#160;}</div><div class="line"><a name="l00426"></a><span class="lineno">  426</span>&#160;<span class="preprocessor">#endif</span></div><div class="line"><a name="l00427"></a><span class="lineno">  427</span>&#160;</div><div class="line"><a name="l00428"></a><span class="lineno"><a class="line" href="_dynamic_backend_tests_8hpp.xhtml#ac98b3660d8c88c80c02fdcdab25a534f">  428</a></span>&#160;<span class="keywordtype">void</span> <a class="code" href="_dynamic_backend_tests_8hpp.xhtml#ac98b3660d8c88c80c02fdcdab25a534f">CreateDynamicBackendObjectInvalidHandleTestImpl</a>()</div><div class="line"><a name="l00429"></a><span class="lineno">  429</span>&#160;{</div><div class="line"><a name="l00430"></a><span class="lineno">  430</span>&#160;    <span class="comment">// Invalid (null) shared object handle</span></div><div class="line"><a name="l00431"></a><span class="lineno">  431</span>&#160;</div><div class="line"><a name="l00432"></a><span class="lineno">  432</span>&#160;    <span class="keyword">using namespace </span><a class="code" href="namespacearmnn.xhtml">armnn</a>;</div><div class="line"><a name="l00433"></a><span class="lineno">  433</span>&#160;</div><div class="line"><a name="l00434"></a><span class="lineno">  434</span>&#160;    <span class="keywordtype">void</span>* sharedObjectHandle = <span class="keyword">nullptr</span>;</div><div class="line"><a name="l00435"></a><span class="lineno">  435</span>&#160;    <a class="code" href="namespacearmnn.xhtml#a754d43dc24a0fe36ecb3044d8f13a413">DynamicBackendPtr</a> dynamicBackend;</div><div class="line"><a name="l00436"></a><span class="lineno">  436</span>&#160;    BOOST_CHECK_THROW(dynamicBackend.reset(<span class="keyword">new</span> <a class="code" href="classarmnn_1_1_dynamic_backend.xhtml">DynamicBackend</a>(sharedObjectHandle)), <a class="code" href="classarmnn_1_1_invalid_argument_exception.xhtml">InvalidArgumentException</a>);</div><div class="line"><a name="l00437"></a><span class="lineno">  437</span>&#160;    BOOST_TEST((dynamicBackend == <span class="keyword">nullptr</span>));</div><div class="line"><a name="l00438"></a><span class="lineno">  438</span>&#160;}</div><div class="line"><a name="l00439"></a><span class="lineno">  439</span>&#160;</div><div class="line"><a name="l00440"></a><span class="lineno"><a class="line" href="_dynamic_backend_tests_8hpp.xhtml#acfd92844ff506a69381848c62b5f396d">  440</a></span>&#160;<span class="keywordtype">void</span> <a class="code" href="_dynamic_backend_tests_8hpp.xhtml#acfd92844ff506a69381848c62b5f396d">CreateDynamicBackendObjectInvalidInterface1TestImpl</a>()</div><div class="line"><a name="l00441"></a><span class="lineno">  441</span>&#160;{</div><div class="line"><a name="l00442"></a><span class="lineno">  442</span>&#160;    <span class="comment">// Valid shared object handle</span></div><div class="line"><a name="l00443"></a><span class="lineno">  443</span>&#160;    <span class="comment">// Wrong (not C-style) name mangling</span></div><div class="line"><a name="l00444"></a><span class="lineno">  444</span>&#160;</div><div class="line"><a name="l00445"></a><span class="lineno">  445</span>&#160;    <span class="keyword">using namespace </span><a class="code" href="namespacearmnn.xhtml">armnn</a>;</div><div class="line"><a name="l00446"></a><span class="lineno">  446</span>&#160;</div><div class="line"><a name="l00447"></a><span class="lineno">  447</span>&#160;    std::string testSubDirectory = <a class="code" href="_dynamic_backend_tests_8hpp.xhtml#aa21b882f38be6940c5c0515db9b69508">GetTestSubDirectory</a>(g_TestDynamicBackendSubDir);</div><div class="line"><a name="l00448"></a><span class="lineno">  448</span>&#160;    std::string sharedObjectFilePath = <a class="code" href="_dynamic_backend_tests_8hpp.xhtml#ad01ee94919c8ecfba3b9e4fe89ed6bbe">GetTestFilePath</a>(testSubDirectory, g_TestInvalidTestDynamicBackend1FileName);</div><div class="line"><a name="l00449"></a><span class="lineno">  449</span>&#160;</div><div class="line"><a name="l00450"></a><span class="lineno">  450</span>&#160;    <span class="keywordtype">void</span>* sharedObjectHandle = <span class="keyword">nullptr</span>;</div><div class="line"><a name="l00451"></a><span class="lineno">  451</span>&#160;    BOOST_CHECK_NO_THROW(sharedObjectHandle = DynamicBackendUtils::OpenHandle(sharedObjectFilePath));</div><div class="line"><a name="l00452"></a><span class="lineno">  452</span>&#160;    BOOST_TEST((sharedObjectHandle != <span class="keyword">nullptr</span>));</div><div class="line"><a name="l00453"></a><span class="lineno">  453</span>&#160;</div><div class="line"><a name="l00454"></a><span class="lineno">  454</span>&#160;    <a class="code" href="namespacearmnn.xhtml#a754d43dc24a0fe36ecb3044d8f13a413">DynamicBackendPtr</a> dynamicBackend;</div><div class="line"><a name="l00455"></a><span class="lineno">  455</span>&#160;    BOOST_CHECK_THROW(dynamicBackend.reset(<span class="keyword">new</span> <a class="code" href="classarmnn_1_1_dynamic_backend.xhtml">DynamicBackend</a>(sharedObjectHandle)), <a class="code" href="classarmnn_1_1_runtime_exception.xhtml">RuntimeException</a>);</div><div class="line"><a name="l00456"></a><span class="lineno">  456</span>&#160;    BOOST_TEST((dynamicBackend == <span class="keyword">nullptr</span>));</div><div class="line"><a name="l00457"></a><span class="lineno">  457</span>&#160;}</div><div class="line"><a name="l00458"></a><span class="lineno">  458</span>&#160;</div><div class="line"><a name="l00459"></a><span class="lineno"><a class="line" href="_dynamic_backend_tests_8hpp.xhtml#a2733fc49ff574659904cbc558c6b2bac">  459</a></span>&#160;<span class="keywordtype">void</span> <a class="code" href="_dynamic_backend_tests_8hpp.xhtml#a2733fc49ff574659904cbc558c6b2bac">CreateDynamicBackendObjectInvalidInterface2TestImpl</a>()</div><div class="line"><a name="l00460"></a><span class="lineno">  460</span>&#160;{</div><div class="line"><a name="l00461"></a><span class="lineno">  461</span>&#160;    <span class="comment">// Valid shared object handle</span></div><div class="line"><a name="l00462"></a><span class="lineno">  462</span>&#160;    <span class="comment">// Correct name mangling</span></div><div class="line"><a name="l00463"></a><span class="lineno">  463</span>&#160;    <span class="comment">// Wrong interface (missing GetBackendId())</span></div><div class="line"><a name="l00464"></a><span class="lineno">  464</span>&#160;</div><div class="line"><a name="l00465"></a><span class="lineno">  465</span>&#160;    <span class="keyword">using namespace </span><a class="code" href="namespacearmnn.xhtml">armnn</a>;</div><div class="line"><a name="l00466"></a><span class="lineno">  466</span>&#160;</div><div class="line"><a name="l00467"></a><span class="lineno">  467</span>&#160;    std::string testSubDirectory = <a class="code" href="_dynamic_backend_tests_8hpp.xhtml#aa21b882f38be6940c5c0515db9b69508">GetTestSubDirectory</a>(g_TestDynamicBackendSubDir);</div><div class="line"><a name="l00468"></a><span class="lineno">  468</span>&#160;    std::string sharedObjectFilePath = <a class="code" href="_dynamic_backend_tests_8hpp.xhtml#ad01ee94919c8ecfba3b9e4fe89ed6bbe">GetTestFilePath</a>(testSubDirectory, g_TestInvalidTestDynamicBackend2FileName);</div><div class="line"><a name="l00469"></a><span class="lineno">  469</span>&#160;</div><div class="line"><a name="l00470"></a><span class="lineno">  470</span>&#160;    <span class="keywordtype">void</span>* sharedObjectHandle = <span class="keyword">nullptr</span>;</div><div class="line"><a name="l00471"></a><span class="lineno">  471</span>&#160;    BOOST_CHECK_NO_THROW(sharedObjectHandle = DynamicBackendUtils::OpenHandle(sharedObjectFilePath));</div><div class="line"><a name="l00472"></a><span class="lineno">  472</span>&#160;    BOOST_TEST((sharedObjectHandle != <span class="keyword">nullptr</span>));</div><div class="line"><a name="l00473"></a><span class="lineno">  473</span>&#160;</div><div class="line"><a name="l00474"></a><span class="lineno">  474</span>&#160;    <a class="code" href="namespacearmnn.xhtml#a754d43dc24a0fe36ecb3044d8f13a413">DynamicBackendPtr</a> dynamicBackend;</div><div class="line"><a name="l00475"></a><span class="lineno">  475</span>&#160;    BOOST_CHECK_THROW(dynamicBackend.reset(<span class="keyword">new</span> <a class="code" href="classarmnn_1_1_dynamic_backend.xhtml">DynamicBackend</a>(sharedObjectHandle)), <a class="code" href="classarmnn_1_1_runtime_exception.xhtml">RuntimeException</a>);</div><div class="line"><a name="l00476"></a><span class="lineno">  476</span>&#160;    BOOST_TEST((dynamicBackend == <span class="keyword">nullptr</span>));</div><div class="line"><a name="l00477"></a><span class="lineno">  477</span>&#160;}</div><div class="line"><a name="l00478"></a><span class="lineno">  478</span>&#160;</div><div class="line"><a name="l00479"></a><span class="lineno"><a class="line" href="_dynamic_backend_tests_8hpp.xhtml#a47d1d68ab62ac387a9d8253d08260fc4">  479</a></span>&#160;<span class="keywordtype">void</span> <a class="code" href="_dynamic_backend_tests_8hpp.xhtml#a47d1d68ab62ac387a9d8253d08260fc4">CreateDynamicBackendObjectInvalidInterface3TestImpl</a>()</div><div class="line"><a name="l00480"></a><span class="lineno">  480</span>&#160;{</div><div class="line"><a name="l00481"></a><span class="lineno">  481</span>&#160;    <span class="comment">// Valid shared object handle</span></div><div class="line"><a name="l00482"></a><span class="lineno">  482</span>&#160;    <span class="comment">// Correct name mangling</span></div><div class="line"><a name="l00483"></a><span class="lineno">  483</span>&#160;    <span class="comment">// Wrong interface (missing GetVersion())</span></div><div class="line"><a name="l00484"></a><span class="lineno">  484</span>&#160;</div><div class="line"><a name="l00485"></a><span class="lineno">  485</span>&#160;    <span class="keyword">using namespace </span><a class="code" href="namespacearmnn.xhtml">armnn</a>;</div><div class="line"><a name="l00486"></a><span class="lineno">  486</span>&#160;</div><div class="line"><a name="l00487"></a><span class="lineno">  487</span>&#160;    std::string testSubDirectory = <a class="code" href="_dynamic_backend_tests_8hpp.xhtml#aa21b882f38be6940c5c0515db9b69508">GetTestSubDirectory</a>(g_TestDynamicBackendSubDir);</div><div class="line"><a name="l00488"></a><span class="lineno">  488</span>&#160;    std::string sharedObjectFilePath = <a class="code" href="_dynamic_backend_tests_8hpp.xhtml#ad01ee94919c8ecfba3b9e4fe89ed6bbe">GetTestFilePath</a>(testSubDirectory, g_TestInvalidTestDynamicBackend3FileName);</div><div class="line"><a name="l00489"></a><span class="lineno">  489</span>&#160;</div><div class="line"><a name="l00490"></a><span class="lineno">  490</span>&#160;    <span class="keywordtype">void</span>* sharedObjectHandle = <span class="keyword">nullptr</span>;</div><div class="line"><a name="l00491"></a><span class="lineno">  491</span>&#160;    BOOST_CHECK_NO_THROW(sharedObjectHandle = DynamicBackendUtils::OpenHandle(sharedObjectFilePath));</div><div class="line"><a name="l00492"></a><span class="lineno">  492</span>&#160;    BOOST_TEST((sharedObjectHandle != <span class="keyword">nullptr</span>));</div><div class="line"><a name="l00493"></a><span class="lineno">  493</span>&#160;</div><div class="line"><a name="l00494"></a><span class="lineno">  494</span>&#160;    <a class="code" href="namespacearmnn.xhtml#a754d43dc24a0fe36ecb3044d8f13a413">DynamicBackendPtr</a> dynamicBackend;</div><div class="line"><a name="l00495"></a><span class="lineno">  495</span>&#160;    BOOST_CHECK_THROW(dynamicBackend.reset(<span class="keyword">new</span> <a class="code" href="classarmnn_1_1_dynamic_backend.xhtml">DynamicBackend</a>(sharedObjectHandle)), <a class="code" href="classarmnn_1_1_runtime_exception.xhtml">RuntimeException</a>);</div><div class="line"><a name="l00496"></a><span class="lineno">  496</span>&#160;    BOOST_TEST((dynamicBackend == <span class="keyword">nullptr</span>));</div><div class="line"><a name="l00497"></a><span class="lineno">  497</span>&#160;}</div><div class="line"><a name="l00498"></a><span class="lineno">  498</span>&#160;</div><div class="line"><a name="l00499"></a><span class="lineno"><a class="line" href="_dynamic_backend_tests_8hpp.xhtml#a307ee2e89a7a9dd574674a69da91addd">  499</a></span>&#160;<span class="keywordtype">void</span> <a class="code" href="_dynamic_backend_tests_8hpp.xhtml#a307ee2e89a7a9dd574674a69da91addd">CreateDynamicBackendObjectInvalidInterface4TestImpl</a>()</div><div class="line"><a name="l00500"></a><span class="lineno">  500</span>&#160;{</div><div class="line"><a name="l00501"></a><span class="lineno">  501</span>&#160;    <span class="comment">// Valid shared object handle</span></div><div class="line"><a name="l00502"></a><span class="lineno">  502</span>&#160;    <span class="comment">// Correct name mangling</span></div><div class="line"><a name="l00503"></a><span class="lineno">  503</span>&#160;    <span class="comment">// Wrong interface (missing BackendFactory())</span></div><div class="line"><a name="l00504"></a><span class="lineno">  504</span>&#160;</div><div class="line"><a name="l00505"></a><span class="lineno">  505</span>&#160;    <span class="keyword">using namespace </span><a class="code" href="namespacearmnn.xhtml">armnn</a>;</div><div class="line"><a name="l00506"></a><span class="lineno">  506</span>&#160;</div><div class="line"><a name="l00507"></a><span class="lineno">  507</span>&#160;    std::string testSubDirectory = <a class="code" href="_dynamic_backend_tests_8hpp.xhtml#aa21b882f38be6940c5c0515db9b69508">GetTestSubDirectory</a>(g_TestDynamicBackendSubDir);</div><div class="line"><a name="l00508"></a><span class="lineno">  508</span>&#160;    std::string sharedObjectFilePath = <a class="code" href="_dynamic_backend_tests_8hpp.xhtml#ad01ee94919c8ecfba3b9e4fe89ed6bbe">GetTestFilePath</a>(testSubDirectory, g_TestInvalidTestDynamicBackend4FileName);</div><div class="line"><a name="l00509"></a><span class="lineno">  509</span>&#160;</div><div class="line"><a name="l00510"></a><span class="lineno">  510</span>&#160;    <span class="keywordtype">void</span>* sharedObjectHandle = <span class="keyword">nullptr</span>;</div><div class="line"><a name="l00511"></a><span class="lineno">  511</span>&#160;    BOOST_CHECK_NO_THROW(sharedObjectHandle = DynamicBackendUtils::OpenHandle(sharedObjectFilePath));</div><div class="line"><a name="l00512"></a><span class="lineno">  512</span>&#160;    BOOST_TEST((sharedObjectHandle != <span class="keyword">nullptr</span>));</div><div class="line"><a name="l00513"></a><span class="lineno">  513</span>&#160;</div><div class="line"><a name="l00514"></a><span class="lineno">  514</span>&#160;    <a class="code" href="namespacearmnn.xhtml#a754d43dc24a0fe36ecb3044d8f13a413">DynamicBackendPtr</a> dynamicBackend;</div><div class="line"><a name="l00515"></a><span class="lineno">  515</span>&#160;    BOOST_CHECK_THROW(dynamicBackend.reset(<span class="keyword">new</span> <a class="code" href="classarmnn_1_1_dynamic_backend.xhtml">DynamicBackend</a>(sharedObjectHandle)), <a class="code" href="classarmnn_1_1_runtime_exception.xhtml">RuntimeException</a>);</div><div class="line"><a name="l00516"></a><span class="lineno">  516</span>&#160;    BOOST_TEST((dynamicBackend == <span class="keyword">nullptr</span>));</div><div class="line"><a name="l00517"></a><span class="lineno">  517</span>&#160;}</div><div class="line"><a name="l00518"></a><span class="lineno">  518</span>&#160;</div><div class="line"><a name="l00519"></a><span class="lineno"><a class="line" href="_dynamic_backend_tests_8hpp.xhtml#a925a53b0f85afbe661c251b858b01601">  519</a></span>&#160;<span class="keywordtype">void</span> <a class="code" href="_dynamic_backend_tests_8hpp.xhtml#a925a53b0f85afbe661c251b858b01601">CreateDynamicBackendObjectInvalidInterface5TestImpl</a>()</div><div class="line"><a name="l00520"></a><span class="lineno">  520</span>&#160;{</div><div class="line"><a name="l00521"></a><span class="lineno">  521</span>&#160;    <span class="comment">// Valid shared object handle</span></div><div class="line"><a name="l00522"></a><span class="lineno">  522</span>&#160;    <span class="comment">// Correct name mangling</span></div><div class="line"><a name="l00523"></a><span class="lineno">  523</span>&#160;    <span class="comment">// Correct interface</span></div><div class="line"><a name="l00524"></a><span class="lineno">  524</span>&#160;    <span class="comment">// Invalid (null) backend id returned by GetBackendId()</span></div><div class="line"><a name="l00525"></a><span class="lineno">  525</span>&#160;</div><div class="line"><a name="l00526"></a><span class="lineno">  526</span>&#160;    <span class="keyword">using namespace </span><a class="code" href="namespacearmnn.xhtml">armnn</a>;</div><div class="line"><a name="l00527"></a><span class="lineno">  527</span>&#160;</div><div class="line"><a name="l00528"></a><span class="lineno">  528</span>&#160;    std::string testSubDirectory = <a class="code" href="_dynamic_backend_tests_8hpp.xhtml#aa21b882f38be6940c5c0515db9b69508">GetTestSubDirectory</a>(g_TestDynamicBackendSubDir);</div><div class="line"><a name="l00529"></a><span class="lineno">  529</span>&#160;    std::string sharedObjectFilePath = <a class="code" href="_dynamic_backend_tests_8hpp.xhtml#ad01ee94919c8ecfba3b9e4fe89ed6bbe">GetTestFilePath</a>(testSubDirectory, g_TestInvalidTestDynamicBackend5FileName);</div><div class="line"><a name="l00530"></a><span class="lineno">  530</span>&#160;</div><div class="line"><a name="l00531"></a><span class="lineno">  531</span>&#160;    <span class="keywordtype">void</span>* sharedObjectHandle = <span class="keyword">nullptr</span>;</div><div class="line"><a name="l00532"></a><span class="lineno">  532</span>&#160;    BOOST_CHECK_NO_THROW(sharedObjectHandle = DynamicBackendUtils::OpenHandle(sharedObjectFilePath));</div><div class="line"><a name="l00533"></a><span class="lineno">  533</span>&#160;    BOOST_TEST((sharedObjectHandle != <span class="keyword">nullptr</span>));</div><div class="line"><a name="l00534"></a><span class="lineno">  534</span>&#160;</div><div class="line"><a name="l00535"></a><span class="lineno">  535</span>&#160;    <a class="code" href="namespacearmnn.xhtml#a754d43dc24a0fe36ecb3044d8f13a413">DynamicBackendPtr</a> dynamicBackend;</div><div class="line"><a name="l00536"></a><span class="lineno">  536</span>&#160;    BOOST_CHECK_THROW(dynamicBackend.reset(<span class="keyword">new</span> <a class="code" href="classarmnn_1_1_dynamic_backend.xhtml">DynamicBackend</a>(sharedObjectHandle)), <a class="code" href="classarmnn_1_1_runtime_exception.xhtml">RuntimeException</a>);</div><div class="line"><a name="l00537"></a><span class="lineno">  537</span>&#160;    BOOST_TEST((dynamicBackend == <span class="keyword">nullptr</span>));</div><div class="line"><a name="l00538"></a><span class="lineno">  538</span>&#160;}</div><div class="line"><a name="l00539"></a><span class="lineno">  539</span>&#160;</div><div class="line"><a name="l00540"></a><span class="lineno"><a class="line" href="_dynamic_backend_tests_8hpp.xhtml#a8f879660cb144117a50465429197ce0c">  540</a></span>&#160;<span class="keywordtype">void</span> <a class="code" href="_dynamic_backend_tests_8hpp.xhtml#a8f879660cb144117a50465429197ce0c">CreateDynamicBackendObjectInvalidInterface6TestImpl</a>()</div><div class="line"><a name="l00541"></a><span class="lineno">  541</span>&#160;{</div><div class="line"><a name="l00542"></a><span class="lineno">  542</span>&#160;    <span class="comment">// Valid shared object handle</span></div><div class="line"><a name="l00543"></a><span class="lineno">  543</span>&#160;    <span class="comment">// Correct name mangling</span></div><div class="line"><a name="l00544"></a><span class="lineno">  544</span>&#160;    <span class="comment">// Correct interface</span></div><div class="line"><a name="l00545"></a><span class="lineno">  545</span>&#160;    <span class="comment">// Invalid (null) backend instance returned by BackendFactory()</span></div><div class="line"><a name="l00546"></a><span class="lineno">  546</span>&#160;</div><div class="line"><a name="l00547"></a><span class="lineno">  547</span>&#160;    <span class="keyword">using namespace </span><a class="code" href="namespacearmnn.xhtml">armnn</a>;</div><div class="line"><a name="l00548"></a><span class="lineno">  548</span>&#160;</div><div class="line"><a name="l00549"></a><span class="lineno">  549</span>&#160;    std::string testSubDirectory = <a class="code" href="_dynamic_backend_tests_8hpp.xhtml#aa21b882f38be6940c5c0515db9b69508">GetTestSubDirectory</a>(g_TestDynamicBackendSubDir);</div><div class="line"><a name="l00550"></a><span class="lineno">  550</span>&#160;    std::string sharedObjectFilePath = <a class="code" href="_dynamic_backend_tests_8hpp.xhtml#ad01ee94919c8ecfba3b9e4fe89ed6bbe">GetTestFilePath</a>(testSubDirectory, g_TestInvalidTestDynamicBackend6FileName);</div><div class="line"><a name="l00551"></a><span class="lineno">  551</span>&#160;</div><div class="line"><a name="l00552"></a><span class="lineno">  552</span>&#160;    <span class="keywordtype">void</span>* sharedObjectHandle = <span class="keyword">nullptr</span>;</div><div class="line"><a name="l00553"></a><span class="lineno">  553</span>&#160;    BOOST_CHECK_NO_THROW(sharedObjectHandle = DynamicBackendUtils::OpenHandle(sharedObjectFilePath));</div><div class="line"><a name="l00554"></a><span class="lineno">  554</span>&#160;    BOOST_TEST((sharedObjectHandle != <span class="keyword">nullptr</span>));</div><div class="line"><a name="l00555"></a><span class="lineno">  555</span>&#160;</div><div class="line"><a name="l00556"></a><span class="lineno">  556</span>&#160;    <a class="code" href="namespacearmnn.xhtml#a754d43dc24a0fe36ecb3044d8f13a413">DynamicBackendPtr</a> dynamicBackend;</div><div class="line"><a name="l00557"></a><span class="lineno">  557</span>&#160;    BOOST_CHECK_NO_THROW(dynamicBackend.reset(<span class="keyword">new</span> <a class="code" href="classarmnn_1_1_dynamic_backend.xhtml">DynamicBackend</a>(sharedObjectHandle)));</div><div class="line"><a name="l00558"></a><span class="lineno">  558</span>&#160;    BOOST_TEST((dynamicBackend != <span class="keyword">nullptr</span>));</div><div class="line"><a name="l00559"></a><span class="lineno">  559</span>&#160;</div><div class="line"><a name="l00560"></a><span class="lineno">  560</span>&#160;    <a class="code" href="classarmnn_1_1_backend_id.xhtml">BackendId</a> dynamicBackendId;</div><div class="line"><a name="l00561"></a><span class="lineno">  561</span>&#160;    BOOST_CHECK_NO_THROW(dynamicBackendId = dynamicBackend-&gt;GetBackendId());</div><div class="line"><a name="l00562"></a><span class="lineno">  562</span>&#160;    BOOST_TEST((dynamicBackendId == <span class="stringliteral">&quot;InvalidTestDynamicBackend&quot;</span>));</div><div class="line"><a name="l00563"></a><span class="lineno">  563</span>&#160;</div><div class="line"><a name="l00564"></a><span class="lineno">  564</span>&#160;    <a class="code" href="structarmnn_1_1_backend_version.xhtml">BackendVersion</a> dynamicBackendVersion;</div><div class="line"><a name="l00565"></a><span class="lineno">  565</span>&#160;    BOOST_CHECK_NO_THROW(dynamicBackendVersion = dynamicBackend-&gt;GetBackendVersion());</div><div class="line"><a name="l00566"></a><span class="lineno">  566</span>&#160;    BOOST_TEST((dynamicBackendVersion == <a class="code" href="structarmnn_1_1_backend_version.xhtml">BackendVersion</a>({ 1, 0 })));</div><div class="line"><a name="l00567"></a><span class="lineno">  567</span>&#160;</div><div class="line"><a name="l00568"></a><span class="lineno">  568</span>&#160;    <a class="code" href="namespacearmnn.xhtml#ade0af9dacaa52cafdd701bef2e901c77">IBackendInternalUniquePtr</a> dynamicBackendInstance1;</div><div class="line"><a name="l00569"></a><span class="lineno">  569</span>&#160;    BOOST_CHECK_THROW(dynamicBackendInstance1 = dynamicBackend-&gt;GetBackend(), <a class="code" href="classarmnn_1_1_runtime_exception.xhtml">RuntimeException</a>);</div><div class="line"><a name="l00570"></a><span class="lineno">  570</span>&#160;    BOOST_TEST((dynamicBackendInstance1 == <span class="keyword">nullptr</span>));</div><div class="line"><a name="l00571"></a><span class="lineno">  571</span>&#160;</div><div class="line"><a name="l00572"></a><span class="lineno">  572</span>&#160;    <a class="code" href="classarmnn_1_1_backend_registry.xhtml#aa33ac375677ee8436456a585dd6f68d9">BackendRegistry::FactoryFunction</a> dynamicBackendFactoryFunction = <span class="keyword">nullptr</span>;</div><div class="line"><a name="l00573"></a><span class="lineno">  573</span>&#160;    BOOST_CHECK_NO_THROW(dynamicBackendFactoryFunction = dynamicBackend-&gt;GetFactoryFunction());</div><div class="line"><a name="l00574"></a><span class="lineno">  574</span>&#160;    BOOST_TEST((dynamicBackendFactoryFunction != <span class="keyword">nullptr</span>));</div><div class="line"><a name="l00575"></a><span class="lineno">  575</span>&#160;</div><div class="line"><a name="l00576"></a><span class="lineno">  576</span>&#160;    <a class="code" href="namespacearmnn.xhtml#ade0af9dacaa52cafdd701bef2e901c77">IBackendInternalUniquePtr</a> dynamicBackendInstance2;</div><div class="line"><a name="l00577"></a><span class="lineno">  577</span>&#160;    BOOST_CHECK_THROW(dynamicBackendInstance2 = dynamicBackendFactoryFunction(), <a class="code" href="classarmnn_1_1_runtime_exception.xhtml">RuntimeException</a>);</div><div class="line"><a name="l00578"></a><span class="lineno">  578</span>&#160;    BOOST_TEST((dynamicBackendInstance2 == <span class="keyword">nullptr</span>));</div><div class="line"><a name="l00579"></a><span class="lineno">  579</span>&#160;}</div><div class="line"><a name="l00580"></a><span class="lineno">  580</span>&#160;</div><div class="line"><a name="l00581"></a><span class="lineno"><a class="line" href="_dynamic_backend_tests_8hpp.xhtml#ab831071920946c5e8562471793882ac4">  581</a></span>&#160;<span class="keywordtype">void</span> <a class="code" href="_dynamic_backend_tests_8hpp.xhtml#ab831071920946c5e8562471793882ac4">CreateDynamicBackendObjectInvalidInterface7TestImpl</a>()</div><div class="line"><a name="l00582"></a><span class="lineno">  582</span>&#160;{</div><div class="line"><a name="l00583"></a><span class="lineno">  583</span>&#160;    <span class="comment">// Valid shared object handle</span></div><div class="line"><a name="l00584"></a><span class="lineno">  584</span>&#160;    <span class="comment">// Correct name mangling</span></div><div class="line"><a name="l00585"></a><span class="lineno">  585</span>&#160;    <span class="comment">// Correct interface</span></div><div class="line"><a name="l00586"></a><span class="lineno">  586</span>&#160;    <span class="comment">// Invalid (incompatible backend API version) backend instance returned by BackendFactory()</span></div><div class="line"><a name="l00587"></a><span class="lineno">  587</span>&#160;</div><div class="line"><a name="l00588"></a><span class="lineno">  588</span>&#160;    <span class="keyword">using namespace </span><a class="code" href="namespacearmnn.xhtml">armnn</a>;</div><div class="line"><a name="l00589"></a><span class="lineno">  589</span>&#160;</div><div class="line"><a name="l00590"></a><span class="lineno">  590</span>&#160;    std::string testSubDirectory = <a class="code" href="_dynamic_backend_tests_8hpp.xhtml#aa21b882f38be6940c5c0515db9b69508">GetTestSubDirectory</a>(g_TestDynamicBackendSubDir);</div><div class="line"><a name="l00591"></a><span class="lineno">  591</span>&#160;    std::string sharedObjectFilePath = <a class="code" href="_dynamic_backend_tests_8hpp.xhtml#ad01ee94919c8ecfba3b9e4fe89ed6bbe">GetTestFilePath</a>(testSubDirectory, g_TestInvalidTestDynamicBackend7FileName);</div><div class="line"><a name="l00592"></a><span class="lineno">  592</span>&#160;</div><div class="line"><a name="l00593"></a><span class="lineno">  593</span>&#160;    <span class="keywordtype">void</span>* sharedObjectHandle = <span class="keyword">nullptr</span>;</div><div class="line"><a name="l00594"></a><span class="lineno">  594</span>&#160;    BOOST_CHECK_NO_THROW(sharedObjectHandle = DynamicBackendUtils::OpenHandle(sharedObjectFilePath));</div><div class="line"><a name="l00595"></a><span class="lineno">  595</span>&#160;    BOOST_TEST((sharedObjectHandle != <span class="keyword">nullptr</span>));</div><div class="line"><a name="l00596"></a><span class="lineno">  596</span>&#160;</div><div class="line"><a name="l00597"></a><span class="lineno">  597</span>&#160;    <a class="code" href="namespacearmnn.xhtml#a754d43dc24a0fe36ecb3044d8f13a413">DynamicBackendPtr</a> dynamicBackend;</div><div class="line"><a name="l00598"></a><span class="lineno">  598</span>&#160;    BOOST_CHECK_THROW(dynamicBackend.reset(<span class="keyword">new</span> <a class="code" href="classarmnn_1_1_dynamic_backend.xhtml">DynamicBackend</a>(sharedObjectHandle)), <a class="code" href="classarmnn_1_1_runtime_exception.xhtml">RuntimeException</a>);</div><div class="line"><a name="l00599"></a><span class="lineno">  599</span>&#160;    BOOST_TEST((dynamicBackend == <span class="keyword">nullptr</span>));</div><div class="line"><a name="l00600"></a><span class="lineno">  600</span>&#160;}</div><div class="line"><a name="l00601"></a><span class="lineno">  601</span>&#160;</div><div class="line"><a name="l00602"></a><span class="lineno"><a class="line" href="_dynamic_backend_tests_8hpp.xhtml#a48a0ac943ae30935f6d32625bee457f8">  602</a></span>&#160;<span class="keywordtype">void</span> <a class="code" href="_dynamic_backend_tests_8hpp.xhtml#a48a0ac943ae30935f6d32625bee457f8">GetBackendPathsTestImpl</a>()</div><div class="line"><a name="l00603"></a><span class="lineno">  603</span>&#160;{</div><div class="line"><a name="l00604"></a><span class="lineno">  604</span>&#160;    <span class="keyword">using namespace </span><a class="code" href="namespacearmnn.xhtml">armnn</a>;</div><div class="line"><a name="l00605"></a><span class="lineno">  605</span>&#160;    <span class="keyword">using namespace </span>fs;</div><div class="line"><a name="l00606"></a><span class="lineno">  606</span>&#160;</div><div class="line"><a name="l00607"></a><span class="lineno">  607</span>&#160;    <span class="comment">// The test covers four directories:</span></div><div class="line"><a name="l00608"></a><span class="lineno">  608</span>&#160;    <span class="comment">// &lt;unit test path&gt;/src/backends/backendsCommon/test/</span></div><div class="line"><a name="l00609"></a><span class="lineno">  609</span>&#160;    <span class="comment">//                                                ├─ backendsTestPath1/   -&gt; exists, contains files</span></div><div class="line"><a name="l00610"></a><span class="lineno">  610</span>&#160;    <span class="comment">//                                                ├─ backendsTestPath2/   -&gt; exists, contains files</span></div><div class="line"><a name="l00611"></a><span class="lineno">  611</span>&#160;    <span class="comment">//                                                ├─ backendsTestPath3/   -&gt; exists, but empty</span></div><div class="line"><a name="l00612"></a><span class="lineno">  612</span>&#160;    <span class="comment">//                                                └─ backendsTestPath4/   -&gt; does not exist</span></div><div class="line"><a name="l00613"></a><span class="lineno">  613</span>&#160;</div><div class="line"><a name="l00614"></a><span class="lineno">  614</span>&#160;    std::string subDir1 = <a class="code" href="_dynamic_backend_tests_8hpp.xhtml#aa21b882f38be6940c5c0515db9b69508">GetTestSubDirectory</a>(g_TestDynamicBackendsSubDir1);</div><div class="line"><a name="l00615"></a><span class="lineno">  615</span>&#160;    std::string subDir2 = <a class="code" href="_dynamic_backend_tests_8hpp.xhtml#aa21b882f38be6940c5c0515db9b69508">GetTestSubDirectory</a>(g_TestDynamicBackendsSubDir2);</div><div class="line"><a name="l00616"></a><span class="lineno">  616</span>&#160;    std::string subDir3 = <a class="code" href="_dynamic_backend_tests_8hpp.xhtml#aa21b882f38be6940c5c0515db9b69508">GetTestSubDirectory</a>(g_TestDynamicBackendsSubDir3);</div><div class="line"><a name="l00617"></a><span class="lineno">  617</span>&#160;    std::string subDir4 = <a class="code" href="_dynamic_backend_tests_8hpp.xhtml#aa21b882f38be6940c5c0515db9b69508">GetTestSubDirectory</a>(g_TestDynamicBackendsSubDir4);</div><div class="line"><a name="l00618"></a><span class="lineno">  618</span>&#160;</div><div class="line"><a name="l00619"></a><span class="lineno">  619</span>&#160;    BOOST_CHECK(exists(subDir1));</div><div class="line"><a name="l00620"></a><span class="lineno">  620</span>&#160;    BOOST_CHECK(exists(subDir2));</div><div class="line"><a name="l00621"></a><span class="lineno">  621</span>&#160;    BOOST_CHECK(exists(subDir3));</div><div class="line"><a name="l00622"></a><span class="lineno">  622</span>&#160;    BOOST_CHECK(!exists(subDir4));</div><div class="line"><a name="l00623"></a><span class="lineno">  623</span>&#160;</div><div class="line"><a name="l00624"></a><span class="lineno">  624</span>&#160;    <span class="comment">// No path</span></div><div class="line"><a name="l00625"></a><span class="lineno">  625</span>&#160;    BOOST_TEST(<a class="code" href="class_test_dynamic_backend_utils.xhtml#ae905a2c700ca7d4b71fd64fe01e5580d">TestDynamicBackendUtils::GetBackendPathsImplTest</a>(<span class="stringliteral">&quot;&quot;</span>).empty());</div><div class="line"><a name="l00626"></a><span class="lineno">  626</span>&#160;</div><div class="line"><a name="l00627"></a><span class="lineno">  627</span>&#160;    <span class="comment">// Malformed path</span></div><div class="line"><a name="l00628"></a><span class="lineno">  628</span>&#160;    std::string malformedDir(subDir1 + <span class="stringliteral">&quot;/&quot;</span> + subDir1);</div><div class="line"><a name="l00629"></a><span class="lineno">  629</span>&#160;    BOOST_TEST(<a class="code" href="class_test_dynamic_backend_utils.xhtml#ae905a2c700ca7d4b71fd64fe01e5580d">TestDynamicBackendUtils::GetBackendPathsImplTest</a>(malformedDir).size()==0);</div><div class="line"><a name="l00630"></a><span class="lineno">  630</span>&#160;</div><div class="line"><a name="l00631"></a><span class="lineno">  631</span>&#160;    <span class="comment">// Single valid path</span></div><div class="line"><a name="l00632"></a><span class="lineno">  632</span>&#160;    std::vector&lt;std::string&gt; DynamicBackendPaths2 = <a class="code" href="class_test_dynamic_backend_utils.xhtml#ae905a2c700ca7d4b71fd64fe01e5580d">TestDynamicBackendUtils::GetBackendPathsImplTest</a>(subDir1);</div><div class="line"><a name="l00633"></a><span class="lineno">  633</span>&#160;    BOOST_TEST(DynamicBackendPaths2.size() == 1);</div><div class="line"><a name="l00634"></a><span class="lineno">  634</span>&#160;    BOOST_TEST(DynamicBackendPaths2[0] == subDir1);</div><div class="line"><a name="l00635"></a><span class="lineno">  635</span>&#160;</div><div class="line"><a name="l00636"></a><span class="lineno">  636</span>&#160;    <span class="comment">// Multiple equal and valid paths</span></div><div class="line"><a name="l00637"></a><span class="lineno">  637</span>&#160;    std::string multipleEqualDirs(subDir1 + <span class="stringliteral">&quot;:&quot;</span> + subDir1);</div><div class="line"><a name="l00638"></a><span class="lineno">  638</span>&#160;    std::vector&lt;std::string&gt; DynamicBackendPaths3 = <a class="code" href="class_test_dynamic_backend_utils.xhtml#ae905a2c700ca7d4b71fd64fe01e5580d">TestDynamicBackendUtils::GetBackendPathsImplTest</a>(multipleEqualDirs);</div><div class="line"><a name="l00639"></a><span class="lineno">  639</span>&#160;    BOOST_TEST(DynamicBackendPaths3.size() == 1);</div><div class="line"><a name="l00640"></a><span class="lineno">  640</span>&#160;    BOOST_TEST(DynamicBackendPaths3[0] == subDir1);</div><div class="line"><a name="l00641"></a><span class="lineno">  641</span>&#160;</div><div class="line"><a name="l00642"></a><span class="lineno">  642</span>&#160;    <span class="comment">// Multiple empty paths</span></div><div class="line"><a name="l00643"></a><span class="lineno">  643</span>&#160;    BOOST_TEST(<a class="code" href="class_test_dynamic_backend_utils.xhtml#ae905a2c700ca7d4b71fd64fe01e5580d">TestDynamicBackendUtils::GetBackendPathsImplTest</a>(<span class="stringliteral">&quot;:::&quot;</span>).empty());</div><div class="line"><a name="l00644"></a><span class="lineno">  644</span>&#160;</div><div class="line"><a name="l00645"></a><span class="lineno">  645</span>&#160;    <span class="comment">// Multiple valid paths</span></div><div class="line"><a name="l00646"></a><span class="lineno">  646</span>&#160;    std::string multipleValidPaths(subDir1 + <span class="stringliteral">&quot;:&quot;</span> + subDir2 + <span class="stringliteral">&quot;:&quot;</span> + subDir3);</div><div class="line"><a name="l00647"></a><span class="lineno">  647</span>&#160;    std::vector&lt;std::string&gt; DynamicBackendPaths5 =</div><div class="line"><a name="l00648"></a><span class="lineno">  648</span>&#160;        <a class="code" href="class_test_dynamic_backend_utils.xhtml#ae905a2c700ca7d4b71fd64fe01e5580d">TestDynamicBackendUtils::GetBackendPathsImplTest</a>(multipleValidPaths);</div><div class="line"><a name="l00649"></a><span class="lineno">  649</span>&#160;    BOOST_TEST(DynamicBackendPaths5.size() == 3);</div><div class="line"><a name="l00650"></a><span class="lineno">  650</span>&#160;    BOOST_TEST(DynamicBackendPaths5[0] == subDir1);</div><div class="line"><a name="l00651"></a><span class="lineno">  651</span>&#160;    BOOST_TEST(DynamicBackendPaths5[1] == subDir2);</div><div class="line"><a name="l00652"></a><span class="lineno">  652</span>&#160;    BOOST_TEST(DynamicBackendPaths5[2] == subDir3);</div><div class="line"><a name="l00653"></a><span class="lineno">  653</span>&#160;</div><div class="line"><a name="l00654"></a><span class="lineno">  654</span>&#160;    <span class="comment">// Valid among empty paths</span></div><div class="line"><a name="l00655"></a><span class="lineno">  655</span>&#160;    std::string validAmongEmptyDirs(<span class="stringliteral">&quot;::&quot;</span> + subDir1 + <span class="stringliteral">&quot;:&quot;</span>);</div><div class="line"><a name="l00656"></a><span class="lineno">  656</span>&#160;    std::vector&lt;std::string&gt; DynamicBackendPaths6 =</div><div class="line"><a name="l00657"></a><span class="lineno">  657</span>&#160;        <a class="code" href="class_test_dynamic_backend_utils.xhtml#ae905a2c700ca7d4b71fd64fe01e5580d">TestDynamicBackendUtils::GetBackendPathsImplTest</a>(validAmongEmptyDirs);</div><div class="line"><a name="l00658"></a><span class="lineno">  658</span>&#160;    BOOST_TEST(DynamicBackendPaths6.size() == 1);</div><div class="line"><a name="l00659"></a><span class="lineno">  659</span>&#160;    BOOST_TEST(DynamicBackendPaths6[0] == subDir1);</div><div class="line"><a name="l00660"></a><span class="lineno">  660</span>&#160;</div><div class="line"><a name="l00661"></a><span class="lineno">  661</span>&#160;    <span class="comment">// Invalid among empty paths</span></div><div class="line"><a name="l00662"></a><span class="lineno">  662</span>&#160;    std::string invalidAmongEmptyDirs(<span class="stringliteral">&quot;:&quot;</span> + subDir4 + <span class="stringliteral">&quot;::&quot;</span>);</div><div class="line"><a name="l00663"></a><span class="lineno">  663</span>&#160;    BOOST_TEST(<a class="code" href="class_test_dynamic_backend_utils.xhtml#ae905a2c700ca7d4b71fd64fe01e5580d">TestDynamicBackendUtils::GetBackendPathsImplTest</a>(invalidAmongEmptyDirs).empty());</div><div class="line"><a name="l00664"></a><span class="lineno">  664</span>&#160;</div><div class="line"><a name="l00665"></a><span class="lineno">  665</span>&#160;    <span class="comment">// Valid, invalid and empty paths</span></div><div class="line"><a name="l00666"></a><span class="lineno">  666</span>&#160;    std::string validInvalidEmptyDirs(subDir1 + <span class="stringliteral">&quot;:&quot;</span> + subDir4 + <span class="stringliteral">&quot;:&quot;</span>);</div><div class="line"><a name="l00667"></a><span class="lineno">  667</span>&#160;    std::vector&lt;std::string&gt; DynamicBackendPaths8 =</div><div class="line"><a name="l00668"></a><span class="lineno">  668</span>&#160;        <a class="code" href="class_test_dynamic_backend_utils.xhtml#ae905a2c700ca7d4b71fd64fe01e5580d">TestDynamicBackendUtils::GetBackendPathsImplTest</a>(validInvalidEmptyDirs);</div><div class="line"><a name="l00669"></a><span class="lineno">  669</span>&#160;    BOOST_TEST(DynamicBackendPaths8.size() == 1);</div><div class="line"><a name="l00670"></a><span class="lineno">  670</span>&#160;    BOOST_TEST(DynamicBackendPaths8[0] == subDir1);</div><div class="line"><a name="l00671"></a><span class="lineno">  671</span>&#160;</div><div class="line"><a name="l00672"></a><span class="lineno">  672</span>&#160;    <span class="comment">// Mix of duplicates of valid, invalid and empty paths</span></div><div class="line"><a name="l00673"></a><span class="lineno">  673</span>&#160;    std::string duplicateValidInvalidEmptyDirs(validInvalidEmptyDirs + <span class="stringliteral">&quot;:&quot;</span> + validInvalidEmptyDirs + <span class="stringliteral">&quot;:&quot;</span> +</div><div class="line"><a name="l00674"></a><span class="lineno">  674</span>&#160;                                               subDir2 + <span class="stringliteral">&quot;:&quot;</span> + subDir2);</div><div class="line"><a name="l00675"></a><span class="lineno">  675</span>&#160;    std::vector&lt;std::string&gt; DynamicBackendPaths9 =</div><div class="line"><a name="l00676"></a><span class="lineno">  676</span>&#160;        <a class="code" href="class_test_dynamic_backend_utils.xhtml#ae905a2c700ca7d4b71fd64fe01e5580d">TestDynamicBackendUtils::GetBackendPathsImplTest</a>(duplicateValidInvalidEmptyDirs);</div><div class="line"><a name="l00677"></a><span class="lineno">  677</span>&#160;    BOOST_TEST(DynamicBackendPaths9.size() == 2);</div><div class="line"><a name="l00678"></a><span class="lineno">  678</span>&#160;    BOOST_TEST(DynamicBackendPaths9[0] == subDir1);</div><div class="line"><a name="l00679"></a><span class="lineno">  679</span>&#160;    BOOST_TEST(DynamicBackendPaths9[1] == subDir2);</div><div class="line"><a name="l00680"></a><span class="lineno">  680</span>&#160;}</div><div class="line"><a name="l00681"></a><span class="lineno">  681</span>&#160;</div><div class="line"><a name="l00682"></a><span class="lineno"><a class="line" href="_dynamic_backend_tests_8hpp.xhtml#ab9633d2df7bd3d53a0d6e4d763ec8baf">  682</a></span>&#160;<span class="keywordtype">void</span> <a class="code" href="_dynamic_backend_tests_8hpp.xhtml#ab9633d2df7bd3d53a0d6e4d763ec8baf">GetBackendPathsOverrideTestImpl</a>()</div><div class="line"><a name="l00683"></a><span class="lineno">  683</span>&#160;{</div><div class="line"><a name="l00684"></a><span class="lineno">  684</span>&#160;    <span class="keyword">using namespace </span><a class="code" href="namespacearmnn.xhtml">armnn</a>;</div><div class="line"><a name="l00685"></a><span class="lineno">  685</span>&#160;    <span class="keyword">using namespace </span>fs;</div><div class="line"><a name="l00686"></a><span class="lineno">  686</span>&#160;</div><div class="line"><a name="l00687"></a><span class="lineno">  687</span>&#160;    std::string subDir1 = <a class="code" href="_dynamic_backend_tests_8hpp.xhtml#aa21b882f38be6940c5c0515db9b69508">GetTestSubDirectory</a>(g_TestDynamicBackendsSubDir1);</div><div class="line"><a name="l00688"></a><span class="lineno">  688</span>&#160;    std::string subDir4 = <a class="code" href="_dynamic_backend_tests_8hpp.xhtml#aa21b882f38be6940c5c0515db9b69508">GetTestSubDirectory</a>(g_TestDynamicBackendsSubDir4);</div><div class="line"><a name="l00689"></a><span class="lineno">  689</span>&#160;</div><div class="line"><a name="l00690"></a><span class="lineno">  690</span>&#160;    BOOST_CHECK(exists(subDir1));</div><div class="line"><a name="l00691"></a><span class="lineno">  691</span>&#160;    BOOST_CHECK(!exists(subDir4));</div><div class="line"><a name="l00692"></a><span class="lineno">  692</span>&#160;</div><div class="line"><a name="l00693"></a><span class="lineno">  693</span>&#160;    <span class="comment">// Override with valid path</span></div><div class="line"><a name="l00694"></a><span class="lineno">  694</span>&#160;    std::vector&lt;std::string&gt; validResult = DynamicBackendUtils::GetBackendPaths(subDir1);</div><div class="line"><a name="l00695"></a><span class="lineno">  695</span>&#160;    BOOST_TEST(validResult.size() == 1);</div><div class="line"><a name="l00696"></a><span class="lineno">  696</span>&#160;    BOOST_TEST(validResult[0] == subDir1);</div><div class="line"><a name="l00697"></a><span class="lineno">  697</span>&#160;</div><div class="line"><a name="l00698"></a><span class="lineno">  698</span>&#160;    <span class="comment">// Override with invalid path</span></div><div class="line"><a name="l00699"></a><span class="lineno">  699</span>&#160;    std::vector&lt;std::string&gt; invalidResult = DynamicBackendUtils::GetBackendPaths(subDir4);</div><div class="line"><a name="l00700"></a><span class="lineno">  700</span>&#160;    BOOST_TEST(invalidResult.empty());</div><div class="line"><a name="l00701"></a><span class="lineno">  701</span>&#160;}</div><div class="line"><a name="l00702"></a><span class="lineno">  702</span>&#160;</div><div class="line"><a name="l00703"></a><span class="lineno"><a class="line" href="_dynamic_backend_tests_8hpp.xhtml#a736bd70a8662a4f3679054a2b2cfaa11">  703</a></span>&#160;<span class="keywordtype">void</span> <a class="code" href="_dynamic_backend_tests_8hpp.xhtml#a736bd70a8662a4f3679054a2b2cfaa11">GetSharedObjectsTestImpl</a>()</div><div class="line"><a name="l00704"></a><span class="lineno">  704</span>&#160;{</div><div class="line"><a name="l00705"></a><span class="lineno">  705</span>&#160;    <span class="keyword">using namespace </span><a class="code" href="namespacearmnn.xhtml">armnn</a>;</div><div class="line"><a name="l00706"></a><span class="lineno">  706</span>&#160;    <span class="keyword">using namespace </span>fs;</div><div class="line"><a name="l00707"></a><span class="lineno">  707</span>&#160;</div><div class="line"><a name="l00708"></a><span class="lineno">  708</span>&#160;    <span class="comment">// The test covers four directories:</span></div><div class="line"><a name="l00709"></a><span class="lineno">  709</span>&#160;    <span class="comment">// &lt;unit test path&gt;/src/backends/backendsCommon/test/</span></div><div class="line"><a name="l00710"></a><span class="lineno">  710</span>&#160;    <span class="comment">//                                                ├─ backendsTestPath1/   -&gt; exists, contains files</span></div><div class="line"><a name="l00711"></a><span class="lineno">  711</span>&#160;    <span class="comment">//                                                ├─ backendsTestPath2/   -&gt; exists, contains files</span></div><div class="line"><a name="l00712"></a><span class="lineno">  712</span>&#160;    <span class="comment">//                                                ├─ backendsTestPath3/   -&gt; exists, but empty</span></div><div class="line"><a name="l00713"></a><span class="lineno">  713</span>&#160;    <span class="comment">//                                                └─ backendsTestPath4/   -&gt; does not exist</span></div><div class="line"><a name="l00714"></a><span class="lineno">  714</span>&#160;    <span class="comment">//</span></div><div class="line"><a name="l00715"></a><span class="lineno">  715</span>&#160;    <span class="comment">// The test sub-directory backendsTestPath1/ contains the following test files:</span></div><div class="line"><a name="l00716"></a><span class="lineno">  716</span>&#160;    <span class="comment">//</span></div><div class="line"><a name="l00717"></a><span class="lineno">  717</span>&#160;    <span class="comment">// Arm_GpuAcc_backend.so                                       -&gt; valid (basic backend name)</span></div><div class="line"><a name="l00718"></a><span class="lineno">  718</span>&#160;    <span class="comment">// Arm_GpuAcc_backend.so.1                                     -&gt; valid (single field version number)</span></div><div class="line"><a name="l00719"></a><span class="lineno">  719</span>&#160;    <span class="comment">// Arm_GpuAcc_backend.so.1.2                                   -&gt; valid (multiple field version number)</span></div><div class="line"><a name="l00720"></a><span class="lineno">  720</span>&#160;    <span class="comment">// Arm_GpuAcc_backend.so.1.2.3                                 -&gt; valid (multiple field version number)</span></div><div class="line"><a name="l00721"></a><span class="lineno">  721</span>&#160;    <span class="comment">// Arm_GpuAcc_backend.so.10.1.27                               -&gt; valid (Multiple digit version)</span></div><div class="line"><a name="l00722"></a><span class="lineno">  722</span>&#160;    <span class="comment">// Arm_GpuAcc_backend.so.10.1.33.                              -&gt; not valid (dot not followed by version number)</span></div><div class="line"><a name="l00723"></a><span class="lineno">  723</span>&#160;    <span class="comment">// Arm_GpuAcc_backend.so.3.4..5                                -&gt; not valid (dot not followed by version number)</span></div><div class="line"><a name="l00724"></a><span class="lineno">  724</span>&#160;    <span class="comment">// Arm_GpuAcc_backend.so.1,1.1                                 -&gt; not valid (comma instead of dot in the version)</span></div><div class="line"><a name="l00725"></a><span class="lineno">  725</span>&#160;    <span class="comment">//</span></div><div class="line"><a name="l00726"></a><span class="lineno">  726</span>&#160;    <span class="comment">// Arm123_GpuAcc_backend.so                                    -&gt; valid (digits in vendor name are allowed)</span></div><div class="line"><a name="l00727"></a><span class="lineno">  727</span>&#160;    <span class="comment">// Arm_GpuAcc456_backend.so                                    -&gt; valid (digits in backend id are allowed)</span></div><div class="line"><a name="l00728"></a><span class="lineno">  728</span>&#160;    <span class="comment">// Arm%Co_GpuAcc_backend.so                                    -&gt; not valid (invalid character in vendor name)</span></div><div class="line"><a name="l00729"></a><span class="lineno">  729</span>&#160;    <span class="comment">// Arm_Gpu.Acc_backend.so                                      -&gt; not valid (invalid character in backend id)</span></div><div class="line"><a name="l00730"></a><span class="lineno">  730</span>&#160;    <span class="comment">//</span></div><div class="line"><a name="l00731"></a><span class="lineno">  731</span>&#160;    <span class="comment">// GpuAcc_backend.so                                           -&gt; not valid (missing vendor name)</span></div><div class="line"><a name="l00732"></a><span class="lineno">  732</span>&#160;    <span class="comment">// _GpuAcc_backend.so                                          -&gt; not valid (missing vendor name)</span></div><div class="line"><a name="l00733"></a><span class="lineno">  733</span>&#160;    <span class="comment">// Arm__backend.so                                             -&gt; not valid (missing backend id)</span></div><div class="line"><a name="l00734"></a><span class="lineno">  734</span>&#160;    <span class="comment">// Arm_GpuAcc.so                                               -&gt; not valid (missing &quot;backend&quot; at the end)</span></div><div class="line"><a name="l00735"></a><span class="lineno">  735</span>&#160;    <span class="comment">// __backend.so                                                -&gt; not valid (missing vendor name and backend id)</span></div><div class="line"><a name="l00736"></a><span class="lineno">  736</span>&#160;    <span class="comment">// __.so                                                       -&gt; not valid (missing all fields)</span></div><div class="line"><a name="l00737"></a><span class="lineno">  737</span>&#160;    <span class="comment">//</span></div><div class="line"><a name="l00738"></a><span class="lineno">  738</span>&#160;    <span class="comment">// Arm_GpuAcc_backend                                          -&gt; not valid (missing at least &quot;.so&quot; at the end)</span></div><div class="line"><a name="l00739"></a><span class="lineno">  739</span>&#160;    <span class="comment">// Arm_GpuAcc_backend_v1.2.so                                  -&gt; not valid (extra version info at the end)</span></div><div class="line"><a name="l00740"></a><span class="lineno">  740</span>&#160;    <span class="comment">//</span></div><div class="line"><a name="l00741"></a><span class="lineno">  741</span>&#160;    <span class="comment">// The test sub-directory backendsTestPath1/ contains the following test files:</span></div><div class="line"><a name="l00742"></a><span class="lineno">  742</span>&#160;    <span class="comment">//</span></div><div class="line"><a name="l00743"></a><span class="lineno">  743</span>&#160;    <span class="comment">// Arm_CpuAcc_backend.so                                       -&gt; valid (basic backend name)</span></div><div class="line"><a name="l00744"></a><span class="lineno">  744</span>&#160;    <span class="comment">// Arm_CpuAcc_backend.so.1 -&gt; Arm_CpuAcc_backend.so            -&gt; valid (symlink to valid backend file)</span></div><div class="line"><a name="l00745"></a><span class="lineno">  745</span>&#160;    <span class="comment">// Arm_CpuAcc_backend.so.1.2 -&gt; Arm_CpuAcc_backend.so.1        -&gt; valid (symlink to valid symlink)</span></div><div class="line"><a name="l00746"></a><span class="lineno">  746</span>&#160;    <span class="comment">// Arm_CpuAcc_backend.so.1.2.3 -&gt; Arm_CpuAcc_backend.so.1.2    -&gt; valid (symlink to valid symlink)</span></div><div class="line"><a name="l00747"></a><span class="lineno">  747</span>&#160;    <span class="comment">//</span></div><div class="line"><a name="l00748"></a><span class="lineno">  748</span>&#160;    <span class="comment">// Arm_no_backend.so -&gt; nothing                                -&gt; not valid (symlink resolves to non-existent file)</span></div><div class="line"><a name="l00749"></a><span class="lineno">  749</span>&#160;    <span class="comment">//</span></div><div class="line"><a name="l00750"></a><span class="lineno">  750</span>&#160;    <span class="comment">// Arm_GpuAcc_backend.so                                       -&gt; valid (but duplicated from backendsTestPath1/)</span></div><div class="line"><a name="l00751"></a><span class="lineno">  751</span>&#160;</div><div class="line"><a name="l00752"></a><span class="lineno">  752</span>&#160;    std::string testDynamicBackendsSubDir1 = <a class="code" href="_dynamic_backend_tests_8hpp.xhtml#aa21b882f38be6940c5c0515db9b69508">GetTestSubDirectory</a>(g_TestDynamicBackendsSubDir1);</div><div class="line"><a name="l00753"></a><span class="lineno">  753</span>&#160;    std::string testDynamicBackendsSubDir2 = <a class="code" href="_dynamic_backend_tests_8hpp.xhtml#aa21b882f38be6940c5c0515db9b69508">GetTestSubDirectory</a>(g_TestDynamicBackendsSubDir2);</div><div class="line"><a name="l00754"></a><span class="lineno">  754</span>&#160;    std::string testDynamicBackendsSubDir3 = <a class="code" href="_dynamic_backend_tests_8hpp.xhtml#aa21b882f38be6940c5c0515db9b69508">GetTestSubDirectory</a>(g_TestDynamicBackendsSubDir3);</div><div class="line"><a name="l00755"></a><span class="lineno">  755</span>&#160;    std::string testDynamicBackendsSubDir4 = <a class="code" href="_dynamic_backend_tests_8hpp.xhtml#aa21b882f38be6940c5c0515db9b69508">GetTestSubDirectory</a>(g_TestDynamicBackendsSubDir4);</div><div class="line"><a name="l00756"></a><span class="lineno">  756</span>&#160;    BOOST_CHECK(exists(testDynamicBackendsSubDir1));</div><div class="line"><a name="l00757"></a><span class="lineno">  757</span>&#160;    BOOST_CHECK(exists(testDynamicBackendsSubDir2));</div><div class="line"><a name="l00758"></a><span class="lineno">  758</span>&#160;    BOOST_CHECK(exists(testDynamicBackendsSubDir3));</div><div class="line"><a name="l00759"></a><span class="lineno">  759</span>&#160;    BOOST_CHECK(!exists(testDynamicBackendsSubDir4));</div><div class="line"><a name="l00760"></a><span class="lineno">  760</span>&#160;</div><div class="line"><a name="l00761"></a><span class="lineno">  761</span>&#160;    std::vector&lt;std::string&gt; backendPaths</div><div class="line"><a name="l00762"></a><span class="lineno">  762</span>&#160;    {</div><div class="line"><a name="l00763"></a><span class="lineno">  763</span>&#160;        testDynamicBackendsSubDir1,</div><div class="line"><a name="l00764"></a><span class="lineno">  764</span>&#160;        testDynamicBackendsSubDir2,</div><div class="line"><a name="l00765"></a><span class="lineno">  765</span>&#160;        testDynamicBackendsSubDir3,</div><div class="line"><a name="l00766"></a><span class="lineno">  766</span>&#160;        testDynamicBackendsSubDir4</div><div class="line"><a name="l00767"></a><span class="lineno">  767</span>&#160;    };</div><div class="line"><a name="l00768"></a><span class="lineno">  768</span>&#160;    std::vector&lt;std::string&gt; sharedObjects = DynamicBackendUtils::GetSharedObjects(backendPaths);</div><div class="line"><a name="l00769"></a><span class="lineno">  769</span>&#160;    std::vector&lt;fs::path&gt; expectedSharedObjects</div><div class="line"><a name="l00770"></a><span class="lineno">  770</span>&#160;    {</div><div class="line"><a name="l00771"></a><span class="lineno">  771</span>&#160;        path(testDynamicBackendsSubDir1 + <span class="stringliteral">&quot;Arm123_GpuAcc_backend.so&quot;</span>),      <span class="comment">// Digits in vendor name are allowed</span></div><div class="line"><a name="l00772"></a><span class="lineno">  772</span>&#160;        path(testDynamicBackendsSubDir1 + <span class="stringliteral">&quot;Arm_GpuAcc456_backend.so&quot;</span>),      <span class="comment">// Digits in backend id are allowed</span></div><div class="line"><a name="l00773"></a><span class="lineno">  773</span>&#160;        path(testDynamicBackendsSubDir1 + <span class="stringliteral">&quot;Arm_GpuAcc_backend.so&quot;</span>),         <span class="comment">// Basic backend name</span></div><div class="line"><a name="l00774"></a><span class="lineno">  774</span>&#160;        path(testDynamicBackendsSubDir1 + <span class="stringliteral">&quot;Arm_GpuAcc_backend.so.1&quot;</span>),       <span class="comment">// Single field version number</span></div><div class="line"><a name="l00775"></a><span class="lineno">  775</span>&#160;        path(testDynamicBackendsSubDir1 + <span class="stringliteral">&quot;Arm_GpuAcc_backend.so.1.2&quot;</span>),     <span class="comment">// Multiple field version number</span></div><div class="line"><a name="l00776"></a><span class="lineno">  776</span>&#160;        path(testDynamicBackendsSubDir1 + <span class="stringliteral">&quot;Arm_GpuAcc_backend.so.1.2.3&quot;</span>),   <span class="comment">// Multiple field version number</span></div><div class="line"><a name="l00777"></a><span class="lineno">  777</span>&#160;        path(testDynamicBackendsSubDir1 + <span class="stringliteral">&quot;Arm_GpuAcc_backend.so.10.1.27&quot;</span>), <span class="comment">// Multiple digit version</span></div><div class="line"><a name="l00778"></a><span class="lineno">  778</span>&#160;        path(testDynamicBackendsSubDir2 + <span class="stringliteral">&quot;Arm_CpuAcc_backend.so&quot;</span>),         <span class="comment">// Duplicate symlinks removed</span></div><div class="line"><a name="l00779"></a><span class="lineno">  779</span>&#160;        path(testDynamicBackendsSubDir2 + <span class="stringliteral">&quot;Arm_GpuAcc_backend.so&quot;</span>)          <span class="comment">// Duplicates on different paths are allowed</span></div><div class="line"><a name="l00780"></a><span class="lineno">  780</span>&#160;    };</div><div class="line"><a name="l00781"></a><span class="lineno">  781</span>&#160;</div><div class="line"><a name="l00782"></a><span class="lineno">  782</span>&#160;    BOOST_TEST(sharedObjects.size() == expectedSharedObjects.size());</div><div class="line"><a name="l00783"></a><span class="lineno">  783</span>&#160;    BOOST_TEST(fs::equivalent(path(sharedObjects[0]), expectedSharedObjects[0]));</div><div class="line"><a name="l00784"></a><span class="lineno">  784</span>&#160;    BOOST_TEST(fs::equivalent(path(sharedObjects[1]), expectedSharedObjects[1]));</div><div class="line"><a name="l00785"></a><span class="lineno">  785</span>&#160;    BOOST_TEST(fs::equivalent(path(sharedObjects[2]), expectedSharedObjects[2]));</div><div class="line"><a name="l00786"></a><span class="lineno">  786</span>&#160;    BOOST_TEST(fs::equivalent(path(sharedObjects[3]), expectedSharedObjects[3]));</div><div class="line"><a name="l00787"></a><span class="lineno">  787</span>&#160;    BOOST_TEST(fs::equivalent(path(sharedObjects[4]), expectedSharedObjects[4]));</div><div class="line"><a name="l00788"></a><span class="lineno">  788</span>&#160;    BOOST_TEST(fs::equivalent(path(sharedObjects[5]), expectedSharedObjects[5]));</div><div class="line"><a name="l00789"></a><span class="lineno">  789</span>&#160;    BOOST_TEST(fs::equivalent(path(sharedObjects[6]), expectedSharedObjects[6]));</div><div class="line"><a name="l00790"></a><span class="lineno">  790</span>&#160;    BOOST_TEST(fs::equivalent(path(sharedObjects[7]), expectedSharedObjects[7]));</div><div class="line"><a name="l00791"></a><span class="lineno">  791</span>&#160;    BOOST_TEST(fs::equivalent(path(sharedObjects[8]), expectedSharedObjects[8]));</div><div class="line"><a name="l00792"></a><span class="lineno">  792</span>&#160;}</div><div class="line"><a name="l00793"></a><span class="lineno">  793</span>&#160;</div><div class="line"><a name="l00794"></a><span class="lineno"><a class="line" href="_dynamic_backend_tests_8hpp.xhtml#a76c94b7ce857689477dcac09aba1858f">  794</a></span>&#160;<span class="keywordtype">void</span> <a class="code" href="_dynamic_backend_tests_8hpp.xhtml#a76c94b7ce857689477dcac09aba1858f">CreateDynamicBackendsTestImpl</a>()</div><div class="line"><a name="l00795"></a><span class="lineno">  795</span>&#160;{</div><div class="line"><a name="l00796"></a><span class="lineno">  796</span>&#160;    <span class="keyword">using namespace </span><a class="code" href="namespacearmnn.xhtml">armnn</a>;</div><div class="line"><a name="l00797"></a><span class="lineno">  797</span>&#160;    <span class="keyword">using namespace </span>fs;</div><div class="line"><a name="l00798"></a><span class="lineno">  798</span>&#160;</div><div class="line"><a name="l00799"></a><span class="lineno">  799</span>&#160;    <span class="comment">// The test covers four directories:</span></div><div class="line"><a name="l00800"></a><span class="lineno">  800</span>&#160;    <span class="comment">// &lt;unit test path&gt;/src/backends/backendsCommon/test/</span></div><div class="line"><a name="l00801"></a><span class="lineno">  801</span>&#160;    <span class="comment">//                                                ├─ backendsTestPath5/   -&gt; exists, contains files</span></div><div class="line"><a name="l00802"></a><span class="lineno">  802</span>&#160;    <span class="comment">//                                                ├─ backendsTestPath6/   -&gt; exists, contains files</span></div><div class="line"><a name="l00803"></a><span class="lineno">  803</span>&#160;    <span class="comment">//                                                ├─ backendsTestPath7/   -&gt; exists, but empty</span></div><div class="line"><a name="l00804"></a><span class="lineno">  804</span>&#160;    <span class="comment">//                                                └─ backendsTestPath8/   -&gt; does not exist</span></div><div class="line"><a name="l00805"></a><span class="lineno">  805</span>&#160;    <span class="comment">//</span></div><div class="line"><a name="l00806"></a><span class="lineno">  806</span>&#160;    <span class="comment">// The test sub-directory backendsTestPath5/ contains the following test files:</span></div><div class="line"><a name="l00807"></a><span class="lineno">  807</span>&#160;    <span class="comment">//</span></div><div class="line"><a name="l00808"></a><span class="lineno">  808</span>&#160;    <span class="comment">// Arm_TestValid2_backend.so   -&gt; valid (basic backend name)</span></div><div class="line"><a name="l00809"></a><span class="lineno">  809</span>&#160;    <span class="comment">// Arm_TestValid3_backend.so   -&gt; valid (basic backend name)</span></div><div class="line"><a name="l00810"></a><span class="lineno">  810</span>&#160;    <span class="comment">// Arm_TestInvalid8_backend.so -&gt; not valid (invalid backend id)</span></div><div class="line"><a name="l00811"></a><span class="lineno">  811</span>&#160;    <span class="comment">//</span></div><div class="line"><a name="l00812"></a><span class="lineno">  812</span>&#160;    <span class="comment">// The test sub-directory backendsTestPath6/ contains the following test files:</span></div><div class="line"><a name="l00813"></a><span class="lineno">  813</span>&#160;    <span class="comment">//</span></div><div class="line"><a name="l00814"></a><span class="lineno">  814</span>&#160;    <span class="comment">// Arm_TestValid2_backend.so   -&gt; valid (but duplicated from backendsTestPath5/)</span></div><div class="line"><a name="l00815"></a><span class="lineno">  815</span>&#160;    <span class="comment">// Arm_TestValid4_backend.so   -&gt; valid (it has a different filename,</span></div><div class="line"><a name="l00816"></a><span class="lineno">  816</span>&#160;    <span class="comment">//                                       but it has the same backend id of Arm_TestValid2_backend.so</span></div><div class="line"><a name="l00817"></a><span class="lineno">  817</span>&#160;    <span class="comment">//                                       and the same version)</span></div><div class="line"><a name="l00818"></a><span class="lineno">  818</span>&#160;    <span class="comment">// Arm_TestValid5_backend.so   -&gt; valid (basic backend name)</span></div><div class="line"><a name="l00819"></a><span class="lineno">  819</span>&#160;    <span class="comment">// Arm_TestInvalid9_backend.so -&gt; not valid (it has a different filename,</span></div><div class="line"><a name="l00820"></a><span class="lineno">  820</span>&#160;    <span class="comment">//                                           but it has the same backend id of Arm_TestValid2_backend.so</span></div><div class="line"><a name="l00821"></a><span class="lineno">  821</span>&#160;    <span class="comment">//                                           and a version incompatible with the Backend API)</span></div><div class="line"><a name="l00822"></a><span class="lineno">  822</span>&#160;</div><div class="line"><a name="l00823"></a><span class="lineno">  823</span>&#160;    std::string testDynamicBackendsSubDir5 = <a class="code" href="_dynamic_backend_tests_8hpp.xhtml#aa21b882f38be6940c5c0515db9b69508">GetTestSubDirectory</a>(g_TestDynamicBackendsSubDir5);</div><div class="line"><a name="l00824"></a><span class="lineno">  824</span>&#160;    std::string testDynamicBackendsSubDir6 = <a class="code" href="_dynamic_backend_tests_8hpp.xhtml#aa21b882f38be6940c5c0515db9b69508">GetTestSubDirectory</a>(g_TestDynamicBackendsSubDir6);</div><div class="line"><a name="l00825"></a><span class="lineno">  825</span>&#160;    std::string testDynamicBackendsSubDir7 = <a class="code" href="_dynamic_backend_tests_8hpp.xhtml#aa21b882f38be6940c5c0515db9b69508">GetTestSubDirectory</a>(g_TestDynamicBackendsSubDir7);</div><div class="line"><a name="l00826"></a><span class="lineno">  826</span>&#160;    std::string testDynamicBackendsSubDir8 = <a class="code" href="_dynamic_backend_tests_8hpp.xhtml#aa21b882f38be6940c5c0515db9b69508">GetTestSubDirectory</a>(g_TestDynamicBackendsSubDir8);</div><div class="line"><a name="l00827"></a><span class="lineno">  827</span>&#160;    BOOST_CHECK(exists(testDynamicBackendsSubDir5));</div><div class="line"><a name="l00828"></a><span class="lineno">  828</span>&#160;    BOOST_CHECK(exists(testDynamicBackendsSubDir6));</div><div class="line"><a name="l00829"></a><span class="lineno">  829</span>&#160;    BOOST_CHECK(exists(testDynamicBackendsSubDir7));</div><div class="line"><a name="l00830"></a><span class="lineno">  830</span>&#160;    BOOST_CHECK(!exists(testDynamicBackendsSubDir8));</div><div class="line"><a name="l00831"></a><span class="lineno">  831</span>&#160;</div><div class="line"><a name="l00832"></a><span class="lineno">  832</span>&#160;    std::vector&lt;std::string&gt; backendPaths</div><div class="line"><a name="l00833"></a><span class="lineno">  833</span>&#160;    {</div><div class="line"><a name="l00834"></a><span class="lineno">  834</span>&#160;        testDynamicBackendsSubDir5,</div><div class="line"><a name="l00835"></a><span class="lineno">  835</span>&#160;        testDynamicBackendsSubDir6,</div><div class="line"><a name="l00836"></a><span class="lineno">  836</span>&#160;        testDynamicBackendsSubDir7,</div><div class="line"><a name="l00837"></a><span class="lineno">  837</span>&#160;        testDynamicBackendsSubDir8</div><div class="line"><a name="l00838"></a><span class="lineno">  838</span>&#160;    };</div><div class="line"><a name="l00839"></a><span class="lineno">  839</span>&#160;    std::vector&lt;std::string&gt; sharedObjects = DynamicBackendUtils::GetSharedObjects(backendPaths);</div><div class="line"><a name="l00840"></a><span class="lineno">  840</span>&#160;    std::vector&lt;DynamicBackendPtr&gt; dynamicBackends = DynamicBackendUtils::CreateDynamicBackends(sharedObjects);</div><div class="line"><a name="l00841"></a><span class="lineno">  841</span>&#160;</div><div class="line"><a name="l00842"></a><span class="lineno">  842</span>&#160;    BOOST_TEST(dynamicBackends.size() == 5);</div><div class="line"><a name="l00843"></a><span class="lineno">  843</span>&#160;    BOOST_TEST((dynamicBackends[0] != <span class="keyword">nullptr</span>));</div><div class="line"><a name="l00844"></a><span class="lineno">  844</span>&#160;    BOOST_TEST((dynamicBackends[1] != <span class="keyword">nullptr</span>));</div><div class="line"><a name="l00845"></a><span class="lineno">  845</span>&#160;    BOOST_TEST((dynamicBackends[2] != <span class="keyword">nullptr</span>));</div><div class="line"><a name="l00846"></a><span class="lineno">  846</span>&#160;    BOOST_TEST((dynamicBackends[3] != <span class="keyword">nullptr</span>));</div><div class="line"><a name="l00847"></a><span class="lineno">  847</span>&#160;    BOOST_TEST((dynamicBackends[4] != <span class="keyword">nullptr</span>));</div><div class="line"><a name="l00848"></a><span class="lineno">  848</span>&#160;</div><div class="line"><a name="l00849"></a><span class="lineno">  849</span>&#160;    <span class="comment">// Duplicates are allowed here, they will be skipped later during the backend registration</span></div><div class="line"><a name="l00850"></a><span class="lineno">  850</span>&#160;    BOOST_TEST((dynamicBackends[0]-&gt;<a class="code" href="_test_dynamic_backend_8cpp.xhtml#adaff295134ed2825ae43a8e9281b6f2a">GetBackendId</a>() == <span class="stringliteral">&quot;TestValid2&quot;</span>));</div><div class="line"><a name="l00851"></a><span class="lineno">  851</span>&#160;    BOOST_TEST((dynamicBackends[1]-&gt;<a class="code" href="_test_dynamic_backend_8cpp.xhtml#adaff295134ed2825ae43a8e9281b6f2a">GetBackendId</a>() == <span class="stringliteral">&quot;TestValid3&quot;</span>));</div><div class="line"><a name="l00852"></a><span class="lineno">  852</span>&#160;    BOOST_TEST((dynamicBackends[2]-&gt;<a class="code" href="_test_dynamic_backend_8cpp.xhtml#adaff295134ed2825ae43a8e9281b6f2a">GetBackendId</a>() == <span class="stringliteral">&quot;TestValid2&quot;</span>)); <span class="comment">// From duplicate Arm_TestValid2_backend.so</span></div><div class="line"><a name="l00853"></a><span class="lineno">  853</span>&#160;    BOOST_TEST((dynamicBackends[3]-&gt;<a class="code" href="_test_dynamic_backend_8cpp.xhtml#adaff295134ed2825ae43a8e9281b6f2a">GetBackendId</a>() == <span class="stringliteral">&quot;TestValid2&quot;</span>)); <span class="comment">// From Arm_TestValid4_backend.so</span></div><div class="line"><a name="l00854"></a><span class="lineno">  854</span>&#160;    BOOST_TEST((dynamicBackends[4]-&gt;<a class="code" href="_test_dynamic_backend_8cpp.xhtml#adaff295134ed2825ae43a8e9281b6f2a">GetBackendId</a>() == <span class="stringliteral">&quot;TestValid5&quot;</span>));</div><div class="line"><a name="l00855"></a><span class="lineno">  855</span>&#160;}</div><div class="line"><a name="l00856"></a><span class="lineno">  856</span>&#160;</div><div class="line"><a name="l00857"></a><span class="lineno"><a class="line" href="_dynamic_backend_tests_8hpp.xhtml#a40efe1578a402125bd0efbc29eecb225">  857</a></span>&#160;<span class="keywordtype">void</span> <a class="code" href="_dynamic_backend_tests_8hpp.xhtml#a40efe1578a402125bd0efbc29eecb225">CreateDynamicBackendsNoPathsTestImpl</a>()</div><div class="line"><a name="l00858"></a><span class="lineno">  858</span>&#160;{</div><div class="line"><a name="l00859"></a><span class="lineno">  859</span>&#160;    <span class="keyword">using namespace </span><a class="code" href="namespacearmnn.xhtml">armnn</a>;</div><div class="line"><a name="l00860"></a><span class="lineno">  860</span>&#160;</div><div class="line"><a name="l00861"></a><span class="lineno">  861</span>&#160;    std::vector&lt;DynamicBackendPtr&gt; dynamicBackends = DynamicBackendUtils::CreateDynamicBackends({});</div><div class="line"><a name="l00862"></a><span class="lineno">  862</span>&#160;</div><div class="line"><a name="l00863"></a><span class="lineno">  863</span>&#160;    BOOST_TEST(dynamicBackends.empty());</div><div class="line"><a name="l00864"></a><span class="lineno">  864</span>&#160;}</div><div class="line"><a name="l00865"></a><span class="lineno">  865</span>&#160;</div><div class="line"><a name="l00866"></a><span class="lineno"><a class="line" href="_dynamic_backend_tests_8hpp.xhtml#ae6308c78a8fdab82f4929b07dc439cd9">  866</a></span>&#160;<span class="keywordtype">void</span> <a class="code" href="_dynamic_backend_tests_8hpp.xhtml#ae6308c78a8fdab82f4929b07dc439cd9">CreateDynamicBackendsAllInvalidTestImpl</a>()</div><div class="line"><a name="l00867"></a><span class="lineno">  867</span>&#160;{</div><div class="line"><a name="l00868"></a><span class="lineno">  868</span>&#160;    <span class="keyword">using namespace </span><a class="code" href="namespacearmnn.xhtml">armnn</a>;</div><div class="line"><a name="l00869"></a><span class="lineno">  869</span>&#160;</div><div class="line"><a name="l00870"></a><span class="lineno">  870</span>&#160;    std::vector&lt;std::string&gt; sharedObjects</div><div class="line"><a name="l00871"></a><span class="lineno">  871</span>&#160;    {</div><div class="line"><a name="l00872"></a><span class="lineno">  872</span>&#160;        <span class="stringliteral">&quot;InvalidSharedObject1&quot;</span>,</div><div class="line"><a name="l00873"></a><span class="lineno">  873</span>&#160;        <span class="stringliteral">&quot;InvalidSharedObject2&quot;</span>,</div><div class="line"><a name="l00874"></a><span class="lineno">  874</span>&#160;        <span class="stringliteral">&quot;InvalidSharedObject3&quot;</span>,</div><div class="line"><a name="l00875"></a><span class="lineno">  875</span>&#160;    };</div><div class="line"><a name="l00876"></a><span class="lineno">  876</span>&#160;    std::vector&lt;DynamicBackendPtr&gt; dynamicBackends = DynamicBackendUtils::CreateDynamicBackends(sharedObjects);</div><div class="line"><a name="l00877"></a><span class="lineno">  877</span>&#160;</div><div class="line"><a name="l00878"></a><span class="lineno">  878</span>&#160;    BOOST_TEST(dynamicBackends.empty());</div><div class="line"><a name="l00879"></a><span class="lineno">  879</span>&#160;}</div><div class="line"><a name="l00880"></a><span class="lineno">  880</span>&#160;</div><div class="line"><a name="l00881"></a><span class="lineno"><a class="line" href="_dynamic_backend_tests_8hpp.xhtml#a1f89ff6d66212524954282edcda4082b">  881</a></span>&#160;<span class="keywordtype">void</span> <a class="code" href="_dynamic_backend_tests_8hpp.xhtml#a1f89ff6d66212524954282edcda4082b">CreateDynamicBackendsMixedTypesTestImpl</a>()</div><div class="line"><a name="l00882"></a><span class="lineno">  882</span>&#160;{</div><div class="line"><a name="l00883"></a><span class="lineno">  883</span>&#160;    <span class="keyword">using namespace </span><a class="code" href="namespacearmnn.xhtml">armnn</a>;</div><div class="line"><a name="l00884"></a><span class="lineno">  884</span>&#160;    <span class="keyword">using namespace </span>fs;</div><div class="line"><a name="l00885"></a><span class="lineno">  885</span>&#160;</div><div class="line"><a name="l00886"></a><span class="lineno">  886</span>&#160;    std::string testDynamicBackendsSubDir5 = <a class="code" href="_dynamic_backend_tests_8hpp.xhtml#aa21b882f38be6940c5c0515db9b69508">GetTestSubDirectory</a>(g_TestDynamicBackendsSubDir5);</div><div class="line"><a name="l00887"></a><span class="lineno">  887</span>&#160;    std::string testDynamicBackendsSubDir6 = <a class="code" href="_dynamic_backend_tests_8hpp.xhtml#aa21b882f38be6940c5c0515db9b69508">GetTestSubDirectory</a>(g_TestDynamicBackendsSubDir6);</div><div class="line"><a name="l00888"></a><span class="lineno">  888</span>&#160;    BOOST_CHECK(exists(testDynamicBackendsSubDir5));</div><div class="line"><a name="l00889"></a><span class="lineno">  889</span>&#160;    BOOST_CHECK(exists(testDynamicBackendsSubDir6));</div><div class="line"><a name="l00890"></a><span class="lineno">  890</span>&#160;</div><div class="line"><a name="l00891"></a><span class="lineno">  891</span>&#160;    std::string testValidBackend2FilePath = <a class="code" href="_dynamic_backend_tests_8hpp.xhtml#ad01ee94919c8ecfba3b9e4fe89ed6bbe">GetTestFilePath</a>(testDynamicBackendsSubDir5,</div><div class="line"><a name="l00892"></a><span class="lineno">  892</span>&#160;                                                            g_TestValidBackend2FileName);</div><div class="line"><a name="l00893"></a><span class="lineno">  893</span>&#160;    std::string testInvalidBackend8FilePath = <a class="code" href="_dynamic_backend_tests_8hpp.xhtml#ad01ee94919c8ecfba3b9e4fe89ed6bbe">GetTestFilePath</a>(testDynamicBackendsSubDir5,</div><div class="line"><a name="l00894"></a><span class="lineno">  894</span>&#160;                                                              g_TestInvalidBackend8FileName);</div><div class="line"><a name="l00895"></a><span class="lineno">  895</span>&#160;    std::string testInvalidBackend9FilePath = <a class="code" href="_dynamic_backend_tests_8hpp.xhtml#ad01ee94919c8ecfba3b9e4fe89ed6bbe">GetTestFilePath</a>(testDynamicBackendsSubDir6,</div><div class="line"><a name="l00896"></a><span class="lineno">  896</span>&#160;                                                              g_TestInvalidBackend9FileName);</div><div class="line"><a name="l00897"></a><span class="lineno">  897</span>&#160;    BOOST_CHECK(exists(testValidBackend2FilePath));</div><div class="line"><a name="l00898"></a><span class="lineno">  898</span>&#160;    BOOST_CHECK(exists(testInvalidBackend8FilePath));</div><div class="line"><a name="l00899"></a><span class="lineno">  899</span>&#160;    BOOST_CHECK(exists(testInvalidBackend9FilePath));</div><div class="line"><a name="l00900"></a><span class="lineno">  900</span>&#160;</div><div class="line"><a name="l00901"></a><span class="lineno">  901</span>&#160;    std::vector&lt;std::string&gt; sharedObjects</div><div class="line"><a name="l00902"></a><span class="lineno">  902</span>&#160;    {</div><div class="line"><a name="l00903"></a><span class="lineno">  903</span>&#160;        testValidBackend2FilePath,   <span class="comment">// Arm_TestValid2_backend.so     -&gt; valid (basic backend name)</span></div><div class="line"><a name="l00904"></a><span class="lineno">  904</span>&#160;        testInvalidBackend8FilePath, <span class="comment">// Arm_TestInvalid8_backend.so   -&gt; not valid (invalid backend id)</span></div><div class="line"><a name="l00905"></a><span class="lineno">  905</span>&#160;        testInvalidBackend9FilePath, <span class="comment">// Arm_TestInvalid9_backend.so   -&gt; not valid (incompatible version)</span></div><div class="line"><a name="l00906"></a><span class="lineno">  906</span>&#160;        <span class="stringliteral">&quot;InvalidSharedObject&quot;</span>,       <span class="comment">// The file does not exist</span></div><div class="line"><a name="l00907"></a><span class="lineno">  907</span>&#160;    };</div><div class="line"><a name="l00908"></a><span class="lineno">  908</span>&#160;    std::vector&lt;DynamicBackendPtr&gt; dynamicBackends = DynamicBackendUtils::CreateDynamicBackends(sharedObjects);</div><div class="line"><a name="l00909"></a><span class="lineno">  909</span>&#160;</div><div class="line"><a name="l00910"></a><span class="lineno">  910</span>&#160;    BOOST_TEST(dynamicBackends.size() == 1);</div><div class="line"><a name="l00911"></a><span class="lineno">  911</span>&#160;    BOOST_TEST((dynamicBackends[0] != <span class="keyword">nullptr</span>));</div><div class="line"><a name="l00912"></a><span class="lineno">  912</span>&#160;    BOOST_TEST((dynamicBackends[0]-&gt;<a class="code" href="_test_dynamic_backend_8cpp.xhtml#adaff295134ed2825ae43a8e9281b6f2a">GetBackendId</a>() == <span class="stringliteral">&quot;TestValid2&quot;</span>));</div><div class="line"><a name="l00913"></a><span class="lineno">  913</span>&#160;}</div><div class="line"><a name="l00914"></a><span class="lineno">  914</span>&#160;</div><div class="line"><a name="l00915"></a><span class="lineno">  915</span>&#160;<span class="preprocessor">#if defined(ARMNNREF_ENABLED)</span></div><div class="line"><a name="l00916"></a><span class="lineno">  916</span>&#160;<span class="keywordtype">void</span> RegisterSingleDynamicBackendTestImpl()</div><div class="line"><a name="l00917"></a><span class="lineno">  917</span>&#160;{</div><div class="line"><a name="l00918"></a><span class="lineno">  918</span>&#160;    <span class="keyword">using namespace </span><a class="code" href="namespacearmnn.xhtml">armnn</a>;</div><div class="line"><a name="l00919"></a><span class="lineno">  919</span>&#160;    <span class="keyword">using namespace </span>fs;</div><div class="line"><a name="l00920"></a><span class="lineno">  920</span>&#160;</div><div class="line"><a name="l00921"></a><span class="lineno">  921</span>&#160;    <span class="comment">// Register one valid dynamic backend</span></div><div class="line"><a name="l00922"></a><span class="lineno">  922</span>&#160;</div><div class="line"><a name="l00923"></a><span class="lineno">  923</span>&#160;    <span class="comment">// Dummy registry used for testing</span></div><div class="line"><a name="l00924"></a><span class="lineno">  924</span>&#160;    <a class="code" href="classarmnn_1_1_backend_registry.xhtml">BackendRegistry</a> backendRegistry;</div><div class="line"><a name="l00925"></a><span class="lineno">  925</span>&#160;    BOOST_TEST(backendRegistry.<a class="code" href="classarmnn_1_1_backend_registry.xhtml#a58f4b9e873b7c1c7d512bd9f7d1489d8">Size</a>() == 0);</div><div class="line"><a name="l00926"></a><span class="lineno">  926</span>&#160;</div><div class="line"><a name="l00927"></a><span class="lineno">  927</span>&#160;    std::string testDynamicBackendsSubDir5 = <a class="code" href="_dynamic_backend_tests_8hpp.xhtml#aa21b882f38be6940c5c0515db9b69508">GetTestSubDirectory</a>(g_TestDynamicBackendsSubDir5);</div><div class="line"><a name="l00928"></a><span class="lineno">  928</span>&#160;    BOOST_CHECK(exists(testDynamicBackendsSubDir5));</div><div class="line"><a name="l00929"></a><span class="lineno">  929</span>&#160;</div><div class="line"><a name="l00930"></a><span class="lineno">  930</span>&#160;    std::string testValidBackend2FilePath = <a class="code" href="_dynamic_backend_tests_8hpp.xhtml#ad01ee94919c8ecfba3b9e4fe89ed6bbe">GetTestFilePath</a>(testDynamicBackendsSubDir5, g_TestValidBackend2FileName);</div><div class="line"><a name="l00931"></a><span class="lineno">  931</span>&#160;    BOOST_CHECK(exists(testValidBackend2FilePath));</div><div class="line"><a name="l00932"></a><span class="lineno">  932</span>&#160;</div><div class="line"><a name="l00933"></a><span class="lineno">  933</span>&#160;    std::vector&lt;std::string&gt; sharedObjects{ testValidBackend2FilePath };</div><div class="line"><a name="l00934"></a><span class="lineno">  934</span>&#160;    std::vector&lt;DynamicBackendPtr&gt; dynamicBackends = <a class="code" href="classarmnn_1_1_dynamic_backend_utils.xhtml#a42e250dfa19b9df3abdb273e1d35fa5b">TestDynamicBackendUtils::CreateDynamicBackends</a>(sharedObjects);</div><div class="line"><a name="l00935"></a><span class="lineno">  935</span>&#160;</div><div class="line"><a name="l00936"></a><span class="lineno">  936</span>&#160;    BOOST_TEST(dynamicBackends.size() == 1);</div><div class="line"><a name="l00937"></a><span class="lineno">  937</span>&#160;    BOOST_TEST((dynamicBackends[0] != <span class="keyword">nullptr</span>));</div><div class="line"><a name="l00938"></a><span class="lineno">  938</span>&#160;</div><div class="line"><a name="l00939"></a><span class="lineno">  939</span>&#160;    <a class="code" href="classarmnn_1_1_backend_id.xhtml">BackendId</a> dynamicBackendId = dynamicBackends[0]-&gt;GetBackendId();</div><div class="line"><a name="l00940"></a><span class="lineno">  940</span>&#160;    BOOST_TEST((dynamicBackendId == <span class="stringliteral">&quot;TestValid2&quot;</span>));</div><div class="line"><a name="l00941"></a><span class="lineno">  941</span>&#160;</div><div class="line"><a name="l00942"></a><span class="lineno">  942</span>&#160;    <a class="code" href="structarmnn_1_1_backend_version.xhtml">BackendVersion</a> dynamicBackendVersion = dynamicBackends[0]-&gt;GetBackendVersion();</div><div class="line"><a name="l00943"></a><span class="lineno">  943</span>&#160;    BOOST_TEST(<a class="code" href="classarmnn_1_1_dynamic_backend_utils.xhtml#a6789076aa25c6a10faeff1043359bda8">TestDynamicBackendUtils::IsBackendCompatible</a>(dynamicBackendVersion));</div><div class="line"><a name="l00944"></a><span class="lineno">  944</span>&#160;</div><div class="line"><a name="l00945"></a><span class="lineno">  945</span>&#160;    <a class="code" href="namespacearmnn.xhtml#a1854d9cda81304325664363c1fd0fb27">BackendIdSet</a> registeredBackendIds = <a class="code" href="class_test_dynamic_backend_utils.xhtml#a304e5c5c5afc70590df8927e144fbaa5">TestDynamicBackendUtils::RegisterDynamicBackendsImplTest</a>(backendRegistry,</div><div class="line"><a name="l00946"></a><span class="lineno">  946</span>&#160;                                                                                                 dynamicBackends);</div><div class="line"><a name="l00947"></a><span class="lineno">  947</span>&#160;    BOOST_TEST(backendRegistry.<a class="code" href="classarmnn_1_1_backend_registry.xhtml#a58f4b9e873b7c1c7d512bd9f7d1489d8">Size</a>() == 1);</div><div class="line"><a name="l00948"></a><span class="lineno">  948</span>&#160;    BOOST_TEST(registeredBackendIds.size() == 1);</div><div class="line"><a name="l00949"></a><span class="lineno">  949</span>&#160;</div><div class="line"><a name="l00950"></a><span class="lineno">  950</span>&#160;    <a class="code" href="namespacearmnn.xhtml#a1854d9cda81304325664363c1fd0fb27">BackendIdSet</a> backendIds = backendRegistry.<a class="code" href="classarmnn_1_1_backend_registry.xhtml#a570cb1835ec73000a7954ba75257904f">GetBackendIds</a>();</div><div class="line"><a name="l00951"></a><span class="lineno">  951</span>&#160;    BOOST_TEST(backendIds.size() == 1);</div><div class="line"><a name="l00952"></a><span class="lineno">  952</span>&#160;    BOOST_TEST((backendIds.find(dynamicBackendId) != backendIds.end()));</div><div class="line"><a name="l00953"></a><span class="lineno">  953</span>&#160;    BOOST_TEST((registeredBackendIds.find(dynamicBackendId) != registeredBackendIds.end()));</div><div class="line"><a name="l00954"></a><span class="lineno">  954</span>&#160;</div><div class="line"><a name="l00955"></a><span class="lineno">  955</span>&#160;    <span class="keyword">auto</span> dynamicBackendFactoryFunction = backendRegistry.<a class="code" href="classarmnn_1_1_backend_registry.xhtml#afc0c63ca8db8957b58826f6d7bd231b2">GetFactory</a>(dynamicBackendId);</div><div class="line"><a name="l00956"></a><span class="lineno">  956</span>&#160;    BOOST_TEST((dynamicBackendFactoryFunction != <span class="keyword">nullptr</span>));</div><div class="line"><a name="l00957"></a><span class="lineno">  957</span>&#160;</div><div class="line"><a name="l00958"></a><span class="lineno">  958</span>&#160;    <a class="code" href="namespacearmnn.xhtml#ade0af9dacaa52cafdd701bef2e901c77">IBackendInternalUniquePtr</a> dynamicBackend = dynamicBackendFactoryFunction();</div><div class="line"><a name="l00959"></a><span class="lineno">  959</span>&#160;    BOOST_TEST((dynamicBackend != <span class="keyword">nullptr</span>));</div><div class="line"><a name="l00960"></a><span class="lineno">  960</span>&#160;    BOOST_TEST((dynamicBackend-&gt;GetId() == dynamicBackendId));</div><div class="line"><a name="l00961"></a><span class="lineno">  961</span>&#160;}</div><div class="line"><a name="l00962"></a><span class="lineno">  962</span>&#160;</div><div class="line"><a name="l00963"></a><span class="lineno">  963</span>&#160;<span class="keywordtype">void</span> RegisterMultipleDynamicBackendsTestImpl()</div><div class="line"><a name="l00964"></a><span class="lineno">  964</span>&#160;{</div><div class="line"><a name="l00965"></a><span class="lineno">  965</span>&#160;    <span class="keyword">using namespace </span><a class="code" href="namespacearmnn.xhtml">armnn</a>;</div><div class="line"><a name="l00966"></a><span class="lineno">  966</span>&#160;    <span class="keyword">using namespace </span>fs;</div><div class="line"><a name="l00967"></a><span class="lineno">  967</span>&#160;</div><div class="line"><a name="l00968"></a><span class="lineno">  968</span>&#160;    <span class="comment">// Register many valid dynamic backends</span></div><div class="line"><a name="l00969"></a><span class="lineno">  969</span>&#160;</div><div class="line"><a name="l00970"></a><span class="lineno">  970</span>&#160;    std::string testDynamicBackendsSubDir5 = <a class="code" href="_dynamic_backend_tests_8hpp.xhtml#aa21b882f38be6940c5c0515db9b69508">GetTestSubDirectory</a>(g_TestDynamicBackendsSubDir5);</div><div class="line"><a name="l00971"></a><span class="lineno">  971</span>&#160;    std::string testDynamicBackendsSubDir6 = <a class="code" href="_dynamic_backend_tests_8hpp.xhtml#aa21b882f38be6940c5c0515db9b69508">GetTestSubDirectory</a>(g_TestDynamicBackendsSubDir6);</div><div class="line"><a name="l00972"></a><span class="lineno">  972</span>&#160;    BOOST_CHECK(exists(testDynamicBackendsSubDir5));</div><div class="line"><a name="l00973"></a><span class="lineno">  973</span>&#160;    BOOST_CHECK(exists(testDynamicBackendsSubDir6));</div><div class="line"><a name="l00974"></a><span class="lineno">  974</span>&#160;</div><div class="line"><a name="l00975"></a><span class="lineno">  975</span>&#160;    std::string testValidBackend2FilePath = <a class="code" href="_dynamic_backend_tests_8hpp.xhtml#ad01ee94919c8ecfba3b9e4fe89ed6bbe">GetTestFilePath</a>(testDynamicBackendsSubDir5, g_TestValidBackend2FileName);</div><div class="line"><a name="l00976"></a><span class="lineno">  976</span>&#160;    std::string testValidBackend3FilePath = <a class="code" href="_dynamic_backend_tests_8hpp.xhtml#ad01ee94919c8ecfba3b9e4fe89ed6bbe">GetTestFilePath</a>(testDynamicBackendsSubDir5, g_TestValidBackend3FileName);</div><div class="line"><a name="l00977"></a><span class="lineno">  977</span>&#160;    std::string testValidBackend5FilePath = <a class="code" href="_dynamic_backend_tests_8hpp.xhtml#ad01ee94919c8ecfba3b9e4fe89ed6bbe">GetTestFilePath</a>(testDynamicBackendsSubDir6, g_TestValidBackend5FileName);</div><div class="line"><a name="l00978"></a><span class="lineno">  978</span>&#160;    BOOST_CHECK(exists(testValidBackend2FilePath));</div><div class="line"><a name="l00979"></a><span class="lineno">  979</span>&#160;    BOOST_CHECK(exists(testValidBackend3FilePath));</div><div class="line"><a name="l00980"></a><span class="lineno">  980</span>&#160;    BOOST_CHECK(exists(testValidBackend5FilePath));</div><div class="line"><a name="l00981"></a><span class="lineno">  981</span>&#160;</div><div class="line"><a name="l00982"></a><span class="lineno">  982</span>&#160;    std::vector&lt;std::string&gt; sharedObjects</div><div class="line"><a name="l00983"></a><span class="lineno">  983</span>&#160;    {</div><div class="line"><a name="l00984"></a><span class="lineno">  984</span>&#160;        testValidBackend2FilePath,</div><div class="line"><a name="l00985"></a><span class="lineno">  985</span>&#160;        testValidBackend3FilePath,</div><div class="line"><a name="l00986"></a><span class="lineno">  986</span>&#160;        testValidBackend5FilePath</div><div class="line"><a name="l00987"></a><span class="lineno">  987</span>&#160;    };</div><div class="line"><a name="l00988"></a><span class="lineno">  988</span>&#160;    std::vector&lt;DynamicBackendPtr&gt; dynamicBackends = <a class="code" href="classarmnn_1_1_dynamic_backend_utils.xhtml#a42e250dfa19b9df3abdb273e1d35fa5b">TestDynamicBackendUtils::CreateDynamicBackends</a>(sharedObjects);</div><div class="line"><a name="l00989"></a><span class="lineno">  989</span>&#160;</div><div class="line"><a name="l00990"></a><span class="lineno">  990</span>&#160;    BOOST_TEST(dynamicBackends.size() == 3);</div><div class="line"><a name="l00991"></a><span class="lineno">  991</span>&#160;    BOOST_TEST((dynamicBackends[0] != <span class="keyword">nullptr</span>));</div><div class="line"><a name="l00992"></a><span class="lineno">  992</span>&#160;    BOOST_TEST((dynamicBackends[1] != <span class="keyword">nullptr</span>));</div><div class="line"><a name="l00993"></a><span class="lineno">  993</span>&#160;    BOOST_TEST((dynamicBackends[2] != <span class="keyword">nullptr</span>));</div><div class="line"><a name="l00994"></a><span class="lineno">  994</span>&#160;</div><div class="line"><a name="l00995"></a><span class="lineno">  995</span>&#160;    <a class="code" href="classarmnn_1_1_backend_id.xhtml">BackendId</a> dynamicBackendId1 = dynamicBackends[0]-&gt;GetBackendId();</div><div class="line"><a name="l00996"></a><span class="lineno">  996</span>&#160;    <a class="code" href="classarmnn_1_1_backend_id.xhtml">BackendId</a> dynamicBackendId2 = dynamicBackends[1]-&gt;GetBackendId();</div><div class="line"><a name="l00997"></a><span class="lineno">  997</span>&#160;    <a class="code" href="classarmnn_1_1_backend_id.xhtml">BackendId</a> dynamicBackendId3 = dynamicBackends[2]-&gt;GetBackendId();</div><div class="line"><a name="l00998"></a><span class="lineno">  998</span>&#160;    BOOST_TEST((dynamicBackendId1 == <span class="stringliteral">&quot;TestValid2&quot;</span>));</div><div class="line"><a name="l00999"></a><span class="lineno">  999</span>&#160;    BOOST_TEST((dynamicBackendId2 == <span class="stringliteral">&quot;TestValid3&quot;</span>));</div><div class="line"><a name="l01000"></a><span class="lineno"> 1000</span>&#160;    BOOST_TEST((dynamicBackendId3 == <span class="stringliteral">&quot;TestValid5&quot;</span>));</div><div class="line"><a name="l01001"></a><span class="lineno"> 1001</span>&#160;</div><div class="line"><a name="l01002"></a><span class="lineno"> 1002</span>&#160;    <span class="keywordflow">for</span> (<span class="keywordtype">size_t</span> i = 0; i &lt; dynamicBackends.size(); i++)</div><div class="line"><a name="l01003"></a><span class="lineno"> 1003</span>&#160;    {</div><div class="line"><a name="l01004"></a><span class="lineno"> 1004</span>&#160;        <a class="code" href="structarmnn_1_1_backend_version.xhtml">BackendVersion</a> dynamicBackendVersion = dynamicBackends[i]-&gt;GetBackendVersion();</div><div class="line"><a name="l01005"></a><span class="lineno"> 1005</span>&#160;        BOOST_TEST(<a class="code" href="classarmnn_1_1_dynamic_backend_utils.xhtml#a6789076aa25c6a10faeff1043359bda8">TestDynamicBackendUtils::IsBackendCompatible</a>(dynamicBackendVersion));</div><div class="line"><a name="l01006"></a><span class="lineno"> 1006</span>&#160;    }</div><div class="line"><a name="l01007"></a><span class="lineno"> 1007</span>&#160;</div><div class="line"><a name="l01008"></a><span class="lineno"> 1008</span>&#160;    <span class="comment">// Dummy registry used for testing</span></div><div class="line"><a name="l01009"></a><span class="lineno"> 1009</span>&#160;    <a class="code" href="classarmnn_1_1_backend_registry.xhtml">BackendRegistry</a> backendRegistry;</div><div class="line"><a name="l01010"></a><span class="lineno"> 1010</span>&#160;    BOOST_TEST(backendRegistry.<a class="code" href="classarmnn_1_1_backend_registry.xhtml#a58f4b9e873b7c1c7d512bd9f7d1489d8">Size</a>() == 0);</div><div class="line"><a name="l01011"></a><span class="lineno"> 1011</span>&#160;</div><div class="line"><a name="l01012"></a><span class="lineno"> 1012</span>&#160;    <a class="code" href="namespacearmnn.xhtml#a1854d9cda81304325664363c1fd0fb27">BackendIdSet</a> registeredBackendIds = <a class="code" href="class_test_dynamic_backend_utils.xhtml#a304e5c5c5afc70590df8927e144fbaa5">TestDynamicBackendUtils::RegisterDynamicBackendsImplTest</a>(backendRegistry,</div><div class="line"><a name="l01013"></a><span class="lineno"> 1013</span>&#160;                                                                                                 dynamicBackends);</div><div class="line"><a name="l01014"></a><span class="lineno"> 1014</span>&#160;    BOOST_TEST(backendRegistry.<a class="code" href="classarmnn_1_1_backend_registry.xhtml#a58f4b9e873b7c1c7d512bd9f7d1489d8">Size</a>() == 3);</div><div class="line"><a name="l01015"></a><span class="lineno"> 1015</span>&#160;    BOOST_TEST(registeredBackendIds.size() == 3);</div><div class="line"><a name="l01016"></a><span class="lineno"> 1016</span>&#160;</div><div class="line"><a name="l01017"></a><span class="lineno"> 1017</span>&#160;    <a class="code" href="namespacearmnn.xhtml#a1854d9cda81304325664363c1fd0fb27">BackendIdSet</a> backendIds = backendRegistry.<a class="code" href="classarmnn_1_1_backend_registry.xhtml#a570cb1835ec73000a7954ba75257904f">GetBackendIds</a>();</div><div class="line"><a name="l01018"></a><span class="lineno"> 1018</span>&#160;    BOOST_TEST(backendIds.size() == 3);</div><div class="line"><a name="l01019"></a><span class="lineno"> 1019</span>&#160;    BOOST_TEST((backendIds.find(dynamicBackendId1) != backendIds.end()));</div><div class="line"><a name="l01020"></a><span class="lineno"> 1020</span>&#160;    BOOST_TEST((backendIds.find(dynamicBackendId2) != backendIds.end()));</div><div class="line"><a name="l01021"></a><span class="lineno"> 1021</span>&#160;    BOOST_TEST((backendIds.find(dynamicBackendId3) != backendIds.end()));</div><div class="line"><a name="l01022"></a><span class="lineno"> 1022</span>&#160;    BOOST_TEST((registeredBackendIds.find(dynamicBackendId1) != registeredBackendIds.end()));</div><div class="line"><a name="l01023"></a><span class="lineno"> 1023</span>&#160;    BOOST_TEST((registeredBackendIds.find(dynamicBackendId2) != registeredBackendIds.end()));</div><div class="line"><a name="l01024"></a><span class="lineno"> 1024</span>&#160;    BOOST_TEST((registeredBackendIds.find(dynamicBackendId3) != registeredBackendIds.end()));</div><div class="line"><a name="l01025"></a><span class="lineno"> 1025</span>&#160;</div><div class="line"><a name="l01026"></a><span class="lineno"> 1026</span>&#160;    <span class="keywordflow">for</span> (<span class="keywordtype">size_t</span> i = 0; i &lt; dynamicBackends.size(); i++)</div><div class="line"><a name="l01027"></a><span class="lineno"> 1027</span>&#160;    {</div><div class="line"><a name="l01028"></a><span class="lineno"> 1028</span>&#160;        <a class="code" href="classarmnn_1_1_backend_id.xhtml">BackendId</a> dynamicBackendId = dynamicBackends[i]-&gt;GetBackendId();</div><div class="line"><a name="l01029"></a><span class="lineno"> 1029</span>&#160;</div><div class="line"><a name="l01030"></a><span class="lineno"> 1030</span>&#160;        <span class="keyword">auto</span> dynamicBackendFactoryFunction = backendRegistry.<a class="code" href="classarmnn_1_1_backend_registry.xhtml#afc0c63ca8db8957b58826f6d7bd231b2">GetFactory</a>(dynamicBackendId);</div><div class="line"><a name="l01031"></a><span class="lineno"> 1031</span>&#160;        BOOST_TEST((dynamicBackendFactoryFunction != <span class="keyword">nullptr</span>));</div><div class="line"><a name="l01032"></a><span class="lineno"> 1032</span>&#160;</div><div class="line"><a name="l01033"></a><span class="lineno"> 1033</span>&#160;        <a class="code" href="namespacearmnn.xhtml#ade0af9dacaa52cafdd701bef2e901c77">IBackendInternalUniquePtr</a> dynamicBackend = dynamicBackendFactoryFunction();</div><div class="line"><a name="l01034"></a><span class="lineno"> 1034</span>&#160;        BOOST_TEST((dynamicBackend != <span class="keyword">nullptr</span>));</div><div class="line"><a name="l01035"></a><span class="lineno"> 1035</span>&#160;        BOOST_TEST((dynamicBackend-&gt;GetId() == dynamicBackendId));</div><div class="line"><a name="l01036"></a><span class="lineno"> 1036</span>&#160;    }</div><div class="line"><a name="l01037"></a><span class="lineno"> 1037</span>&#160;}</div><div class="line"><a name="l01038"></a><span class="lineno"> 1038</span>&#160;</div><div class="line"><a name="l01039"></a><span class="lineno"> 1039</span>&#160;<span class="keywordtype">void</span> RegisterMixedDynamicBackendsTestImpl()</div><div class="line"><a name="l01040"></a><span class="lineno"> 1040</span>&#160;{</div><div class="line"><a name="l01041"></a><span class="lineno"> 1041</span>&#160;    <span class="keyword">using namespace </span><a class="code" href="namespacearmnn.xhtml">armnn</a>;</div><div class="line"><a name="l01042"></a><span class="lineno"> 1042</span>&#160;    <span class="keyword">using namespace </span>fs;</div><div class="line"><a name="l01043"></a><span class="lineno"> 1043</span>&#160;</div><div class="line"><a name="l01044"></a><span class="lineno"> 1044</span>&#160;    <span class="comment">// The test covers five directories:</span></div><div class="line"><a name="l01045"></a><span class="lineno"> 1045</span>&#160;    <span class="comment">// &lt;unit test path&gt;/src/backends/backendsCommon/test/</span></div><div class="line"><a name="l01046"></a><span class="lineno"> 1046</span>&#160;    <span class="comment">//                                                ├─ backendsTestPath5/   -&gt; exists, contains files</span></div><div class="line"><a name="l01047"></a><span class="lineno"> 1047</span>&#160;    <span class="comment">//                                                ├─ backendsTestPath6/   -&gt; exists, contains files</span></div><div class="line"><a name="l01048"></a><span class="lineno"> 1048</span>&#160;    <span class="comment">//                                                ├─ backendsTestPath7/   -&gt; exists, but empty</span></div><div class="line"><a name="l01049"></a><span class="lineno"> 1049</span>&#160;    <span class="comment">//                                                ├─ backendsTestPath8/   -&gt; does not exist</span></div><div class="line"><a name="l01050"></a><span class="lineno"> 1050</span>&#160;    <span class="comment">//                                                └─ backendsTestPath9/   -&gt; exists, contains files</span></div><div class="line"><a name="l01051"></a><span class="lineno"> 1051</span>&#160;    <span class="comment">//</span></div><div class="line"><a name="l01052"></a><span class="lineno"> 1052</span>&#160;    <span class="comment">// The test sub-directory backendsTestPath5/ contains the following test files:</span></div><div class="line"><a name="l01053"></a><span class="lineno"> 1053</span>&#160;    <span class="comment">//</span></div><div class="line"><a name="l01054"></a><span class="lineno"> 1054</span>&#160;    <span class="comment">// Arm_TestValid2_backend.so   -&gt; valid (basic backend name)</span></div><div class="line"><a name="l01055"></a><span class="lineno"> 1055</span>&#160;    <span class="comment">// Arm_TestValid3_backend.so   -&gt; valid (basic backend name)</span></div><div class="line"><a name="l01056"></a><span class="lineno"> 1056</span>&#160;    <span class="comment">// Arm_TestInvalid8_backend.so -&gt; not valid (invalid backend id)</span></div><div class="line"><a name="l01057"></a><span class="lineno"> 1057</span>&#160;    <span class="comment">//</span></div><div class="line"><a name="l01058"></a><span class="lineno"> 1058</span>&#160;    <span class="comment">// The test sub-directory backendsTestPath6/ contains the following test files:</span></div><div class="line"><a name="l01059"></a><span class="lineno"> 1059</span>&#160;    <span class="comment">//</span></div><div class="line"><a name="l01060"></a><span class="lineno"> 1060</span>&#160;    <span class="comment">// Arm_TestValid2_backend.so   -&gt; valid (but duplicated from backendsTestPath5/)</span></div><div class="line"><a name="l01061"></a><span class="lineno"> 1061</span>&#160;    <span class="comment">// Arm_TestValid4_backend.so   -&gt; valid (it has a different filename,</span></div><div class="line"><a name="l01062"></a><span class="lineno"> 1062</span>&#160;    <span class="comment">//                                       but it has the same backend id of Arm_TestValid2_backend.so</span></div><div class="line"><a name="l01063"></a><span class="lineno"> 1063</span>&#160;    <span class="comment">//                                       and the same version)</span></div><div class="line"><a name="l01064"></a><span class="lineno"> 1064</span>&#160;    <span class="comment">// Arm_TestValid5_backend.so   -&gt; valid (basic backend name)</span></div><div class="line"><a name="l01065"></a><span class="lineno"> 1065</span>&#160;    <span class="comment">// Arm_TestInvalid9_backend.so -&gt; not valid (it has a different filename,</span></div><div class="line"><a name="l01066"></a><span class="lineno"> 1066</span>&#160;    <span class="comment">//                                           but it has the same backend id of Arm_TestValid2_backend.so</span></div><div class="line"><a name="l01067"></a><span class="lineno"> 1067</span>&#160;    <span class="comment">//                                           and a version incompatible with the Backend API)</span></div><div class="line"><a name="l01068"></a><span class="lineno"> 1068</span>&#160;    <span class="comment">//</span></div><div class="line"><a name="l01069"></a><span class="lineno"> 1069</span>&#160;    <span class="comment">// The test sub-directory backendsTestPath9/ contains the following test files:</span></div><div class="line"><a name="l01070"></a><span class="lineno"> 1070</span>&#160;    <span class="comment">//</span></div><div class="line"><a name="l01071"></a><span class="lineno"> 1071</span>&#160;    <span class="comment">// Arm_TestInvalid10_backend.so -&gt; not valid (empty backend id)</span></div><div class="line"><a name="l01072"></a><span class="lineno"> 1072</span>&#160;    <span class="comment">// Arm_TestInvalid11_backend.so -&gt; not valid (&quot;Unknown&quot; backend id)</span></div><div class="line"><a name="l01073"></a><span class="lineno"> 1073</span>&#160;</div><div class="line"><a name="l01074"></a><span class="lineno"> 1074</span>&#160;    std::string testDynamicBackendsSubDir5 = <a class="code" href="_dynamic_backend_tests_8hpp.xhtml#aa21b882f38be6940c5c0515db9b69508">GetTestSubDirectory</a>(g_TestDynamicBackendsSubDir5);</div><div class="line"><a name="l01075"></a><span class="lineno"> 1075</span>&#160;    std::string testDynamicBackendsSubDir6 = <a class="code" href="_dynamic_backend_tests_8hpp.xhtml#aa21b882f38be6940c5c0515db9b69508">GetTestSubDirectory</a>(g_TestDynamicBackendsSubDir6);</div><div class="line"><a name="l01076"></a><span class="lineno"> 1076</span>&#160;    std::string testDynamicBackendsSubDir7 = <a class="code" href="_dynamic_backend_tests_8hpp.xhtml#aa21b882f38be6940c5c0515db9b69508">GetTestSubDirectory</a>(g_TestDynamicBackendsSubDir7);</div><div class="line"><a name="l01077"></a><span class="lineno"> 1077</span>&#160;    std::string testDynamicBackendsSubDir8 = <a class="code" href="_dynamic_backend_tests_8hpp.xhtml#aa21b882f38be6940c5c0515db9b69508">GetTestSubDirectory</a>(g_TestDynamicBackendsSubDir8);</div><div class="line"><a name="l01078"></a><span class="lineno"> 1078</span>&#160;    std::string testDynamicBackendsSubDir9 = <a class="code" href="_dynamic_backend_tests_8hpp.xhtml#aa21b882f38be6940c5c0515db9b69508">GetTestSubDirectory</a>(g_TestDynamicBackendsSubDir9);</div><div class="line"><a name="l01079"></a><span class="lineno"> 1079</span>&#160;    BOOST_CHECK(exists(testDynamicBackendsSubDir5));</div><div class="line"><a name="l01080"></a><span class="lineno"> 1080</span>&#160;    BOOST_CHECK(exists(testDynamicBackendsSubDir6));</div><div class="line"><a name="l01081"></a><span class="lineno"> 1081</span>&#160;    BOOST_CHECK(exists(testDynamicBackendsSubDir7));</div><div class="line"><a name="l01082"></a><span class="lineno"> 1082</span>&#160;    BOOST_CHECK(!exists(testDynamicBackendsSubDir8));</div><div class="line"><a name="l01083"></a><span class="lineno"> 1083</span>&#160;    BOOST_CHECK(exists(testDynamicBackendsSubDir9));</div><div class="line"><a name="l01084"></a><span class="lineno"> 1084</span>&#160;</div><div class="line"><a name="l01085"></a><span class="lineno"> 1085</span>&#160;    std::string testValidBackend2FilePath    = <a class="code" href="_dynamic_backend_tests_8hpp.xhtml#ad01ee94919c8ecfba3b9e4fe89ed6bbe">GetTestFilePath</a>(testDynamicBackendsSubDir5, g_TestValidBackend2FileName);</div><div class="line"><a name="l01086"></a><span class="lineno"> 1086</span>&#160;    std::string testValidBackend3FilePath    = <a class="code" href="_dynamic_backend_tests_8hpp.xhtml#ad01ee94919c8ecfba3b9e4fe89ed6bbe">GetTestFilePath</a>(testDynamicBackendsSubDir5, g_TestValidBackend3FileName);</div><div class="line"><a name="l01087"></a><span class="lineno"> 1087</span>&#160;    std::string testValidBackend2DupFilePath = <a class="code" href="_dynamic_backend_tests_8hpp.xhtml#ad01ee94919c8ecfba3b9e4fe89ed6bbe">GetTestFilePath</a>(testDynamicBackendsSubDir6, g_TestValidBackend2FileName);</div><div class="line"><a name="l01088"></a><span class="lineno"> 1088</span>&#160;    std::string testValidBackend4FilePath    = <a class="code" href="_dynamic_backend_tests_8hpp.xhtml#ad01ee94919c8ecfba3b9e4fe89ed6bbe">GetTestFilePath</a>(testDynamicBackendsSubDir6, g_TestValidBackend4FileName);</div><div class="line"><a name="l01089"></a><span class="lineno"> 1089</span>&#160;    std::string testValidBackend5FilePath    = <a class="code" href="_dynamic_backend_tests_8hpp.xhtml#ad01ee94919c8ecfba3b9e4fe89ed6bbe">GetTestFilePath</a>(testDynamicBackendsSubDir6, g_TestValidBackend5FileName);</div><div class="line"><a name="l01090"></a><span class="lineno"> 1090</span>&#160;    std::string testInvalidBackend8FilePath  = <a class="code" href="_dynamic_backend_tests_8hpp.xhtml#ad01ee94919c8ecfba3b9e4fe89ed6bbe">GetTestFilePath</a>(testDynamicBackendsSubDir5,</div><div class="line"><a name="l01091"></a><span class="lineno"> 1091</span>&#160;                                                               g_TestInvalidBackend8FileName);</div><div class="line"><a name="l01092"></a><span class="lineno"> 1092</span>&#160;    std::string testInvalidBackend9FilePath  = <a class="code" href="_dynamic_backend_tests_8hpp.xhtml#ad01ee94919c8ecfba3b9e4fe89ed6bbe">GetTestFilePath</a>(testDynamicBackendsSubDir6,</div><div class="line"><a name="l01093"></a><span class="lineno"> 1093</span>&#160;                                                               g_TestInvalidBackend9FileName);</div><div class="line"><a name="l01094"></a><span class="lineno"> 1094</span>&#160;    std::string testInvalidBackend10FilePath = <a class="code" href="_dynamic_backend_tests_8hpp.xhtml#ad01ee94919c8ecfba3b9e4fe89ed6bbe">GetTestFilePath</a>(testDynamicBackendsSubDir9,</div><div class="line"><a name="l01095"></a><span class="lineno"> 1095</span>&#160;                                                               g_TestInvalidBackend10FileName);</div><div class="line"><a name="l01096"></a><span class="lineno"> 1096</span>&#160;    std::string testInvalidBackend11FilePath = <a class="code" href="_dynamic_backend_tests_8hpp.xhtml#ad01ee94919c8ecfba3b9e4fe89ed6bbe">GetTestFilePath</a>(testDynamicBackendsSubDir9,</div><div class="line"><a name="l01097"></a><span class="lineno"> 1097</span>&#160;                                                               g_TestInvalidBackend11FileName);</div><div class="line"><a name="l01098"></a><span class="lineno"> 1098</span>&#160;    BOOST_CHECK(exists(testValidBackend2FilePath));</div><div class="line"><a name="l01099"></a><span class="lineno"> 1099</span>&#160;    BOOST_CHECK(exists(testValidBackend3FilePath));</div><div class="line"><a name="l01100"></a><span class="lineno"> 1100</span>&#160;    BOOST_CHECK(exists(testValidBackend2DupFilePath));</div><div class="line"><a name="l01101"></a><span class="lineno"> 1101</span>&#160;    BOOST_CHECK(exists(testValidBackend4FilePath));</div><div class="line"><a name="l01102"></a><span class="lineno"> 1102</span>&#160;    BOOST_CHECK(exists(testValidBackend5FilePath));</div><div class="line"><a name="l01103"></a><span class="lineno"> 1103</span>&#160;    BOOST_CHECK(exists(testInvalidBackend8FilePath));</div><div class="line"><a name="l01104"></a><span class="lineno"> 1104</span>&#160;    BOOST_CHECK(exists(testInvalidBackend9FilePath));</div><div class="line"><a name="l01105"></a><span class="lineno"> 1105</span>&#160;    BOOST_CHECK(exists(testInvalidBackend10FilePath));</div><div class="line"><a name="l01106"></a><span class="lineno"> 1106</span>&#160;    BOOST_CHECK(exists(testInvalidBackend11FilePath));</div><div class="line"><a name="l01107"></a><span class="lineno"> 1107</span>&#160;</div><div class="line"><a name="l01108"></a><span class="lineno"> 1108</span>&#160;    std::vector&lt;std::string&gt; sharedObjects</div><div class="line"><a name="l01109"></a><span class="lineno"> 1109</span>&#160;    {</div><div class="line"><a name="l01110"></a><span class="lineno"> 1110</span>&#160;        testValidBackend2FilePath,</div><div class="line"><a name="l01111"></a><span class="lineno"> 1111</span>&#160;        testValidBackend3FilePath,</div><div class="line"><a name="l01112"></a><span class="lineno"> 1112</span>&#160;        testValidBackend2DupFilePath,</div><div class="line"><a name="l01113"></a><span class="lineno"> 1113</span>&#160;        testValidBackend4FilePath,</div><div class="line"><a name="l01114"></a><span class="lineno"> 1114</span>&#160;        testValidBackend5FilePath,</div><div class="line"><a name="l01115"></a><span class="lineno"> 1115</span>&#160;        testInvalidBackend8FilePath,</div><div class="line"><a name="l01116"></a><span class="lineno"> 1116</span>&#160;        testInvalidBackend9FilePath,</div><div class="line"><a name="l01117"></a><span class="lineno"> 1117</span>&#160;        testInvalidBackend10FilePath,</div><div class="line"><a name="l01118"></a><span class="lineno"> 1118</span>&#160;        testInvalidBackend11FilePath,</div><div class="line"><a name="l01119"></a><span class="lineno"> 1119</span>&#160;        <span class="stringliteral">&quot;InvalidSharedObject&quot;</span></div><div class="line"><a name="l01120"></a><span class="lineno"> 1120</span>&#160;    };</div><div class="line"><a name="l01121"></a><span class="lineno"> 1121</span>&#160;    std::vector&lt;DynamicBackendPtr&gt; dynamicBackends = <a class="code" href="classarmnn_1_1_dynamic_backend_utils.xhtml#a42e250dfa19b9df3abdb273e1d35fa5b">TestDynamicBackendUtils::CreateDynamicBackends</a>(sharedObjects);</div><div class="line"><a name="l01122"></a><span class="lineno"> 1122</span>&#160;</div><div class="line"><a name="l01123"></a><span class="lineno"> 1123</span>&#160;    BOOST_TEST(dynamicBackends.size() == 7);</div><div class="line"><a name="l01124"></a><span class="lineno"> 1124</span>&#160;    BOOST_TEST((dynamicBackends[0] != <span class="keyword">nullptr</span>));</div><div class="line"><a name="l01125"></a><span class="lineno"> 1125</span>&#160;    BOOST_TEST((dynamicBackends[1] != <span class="keyword">nullptr</span>));</div><div class="line"><a name="l01126"></a><span class="lineno"> 1126</span>&#160;    BOOST_TEST((dynamicBackends[2] != <span class="keyword">nullptr</span>));</div><div class="line"><a name="l01127"></a><span class="lineno"> 1127</span>&#160;    BOOST_TEST((dynamicBackends[3] != <span class="keyword">nullptr</span>));</div><div class="line"><a name="l01128"></a><span class="lineno"> 1128</span>&#160;    BOOST_TEST((dynamicBackends[4] != <span class="keyword">nullptr</span>));</div><div class="line"><a name="l01129"></a><span class="lineno"> 1129</span>&#160;    BOOST_TEST((dynamicBackends[5] != <span class="keyword">nullptr</span>));</div><div class="line"><a name="l01130"></a><span class="lineno"> 1130</span>&#160;    BOOST_TEST((dynamicBackends[6] != <span class="keyword">nullptr</span>));</div><div class="line"><a name="l01131"></a><span class="lineno"> 1131</span>&#160;</div><div class="line"><a name="l01132"></a><span class="lineno"> 1132</span>&#160;    <a class="code" href="classarmnn_1_1_backend_id.xhtml">BackendId</a> dynamicBackendId1 = dynamicBackends[0]-&gt;GetBackendId();</div><div class="line"><a name="l01133"></a><span class="lineno"> 1133</span>&#160;    <a class="code" href="classarmnn_1_1_backend_id.xhtml">BackendId</a> dynamicBackendId2 = dynamicBackends[1]-&gt;GetBackendId();</div><div class="line"><a name="l01134"></a><span class="lineno"> 1134</span>&#160;    <a class="code" href="classarmnn_1_1_backend_id.xhtml">BackendId</a> dynamicBackendId3 = dynamicBackends[2]-&gt;GetBackendId();</div><div class="line"><a name="l01135"></a><span class="lineno"> 1135</span>&#160;    <a class="code" href="classarmnn_1_1_backend_id.xhtml">BackendId</a> dynamicBackendId4 = dynamicBackends[3]-&gt;GetBackendId();</div><div class="line"><a name="l01136"></a><span class="lineno"> 1136</span>&#160;    <a class="code" href="classarmnn_1_1_backend_id.xhtml">BackendId</a> dynamicBackendId5 = dynamicBackends[4]-&gt;GetBackendId();</div><div class="line"><a name="l01137"></a><span class="lineno"> 1137</span>&#160;    <a class="code" href="classarmnn_1_1_backend_id.xhtml">BackendId</a> dynamicBackendId6 = dynamicBackends[5]-&gt;GetBackendId();</div><div class="line"><a name="l01138"></a><span class="lineno"> 1138</span>&#160;    <a class="code" href="classarmnn_1_1_backend_id.xhtml">BackendId</a> dynamicBackendId7 = dynamicBackends[6]-&gt;GetBackendId();</div><div class="line"><a name="l01139"></a><span class="lineno"> 1139</span>&#160;    BOOST_TEST((dynamicBackendId1 == <span class="stringliteral">&quot;TestValid2&quot;</span>));</div><div class="line"><a name="l01140"></a><span class="lineno"> 1140</span>&#160;    BOOST_TEST((dynamicBackendId2 == <span class="stringliteral">&quot;TestValid3&quot;</span>));</div><div class="line"><a name="l01141"></a><span class="lineno"> 1141</span>&#160;    BOOST_TEST((dynamicBackendId3 == <span class="stringliteral">&quot;TestValid2&quot;</span>)); <span class="comment">// From duplicate Arm_TestValid2_backend.so</span></div><div class="line"><a name="l01142"></a><span class="lineno"> 1142</span>&#160;    BOOST_TEST((dynamicBackendId4 == <span class="stringliteral">&quot;TestValid2&quot;</span>)); <span class="comment">// From Arm_TestValid4_backend.so</span></div><div class="line"><a name="l01143"></a><span class="lineno"> 1143</span>&#160;    BOOST_TEST((dynamicBackendId5 == <span class="stringliteral">&quot;TestValid5&quot;</span>));</div><div class="line"><a name="l01144"></a><span class="lineno"> 1144</span>&#160;    BOOST_TEST((dynamicBackendId6 == <span class="stringliteral">&quot;&quot;</span>));</div><div class="line"><a name="l01145"></a><span class="lineno"> 1145</span>&#160;    BOOST_TEST((dynamicBackendId7 == <span class="stringliteral">&quot;Unknown&quot;</span>));</div><div class="line"><a name="l01146"></a><span class="lineno"> 1146</span>&#160;</div><div class="line"><a name="l01147"></a><span class="lineno"> 1147</span>&#160;    <span class="keywordflow">for</span> (<span class="keywordtype">size_t</span> i = 0; i &lt; dynamicBackends.size(); i++)</div><div class="line"><a name="l01148"></a><span class="lineno"> 1148</span>&#160;    {</div><div class="line"><a name="l01149"></a><span class="lineno"> 1149</span>&#160;        <a class="code" href="structarmnn_1_1_backend_version.xhtml">BackendVersion</a> dynamicBackendVersion = dynamicBackends[i]-&gt;GetBackendVersion();</div><div class="line"><a name="l01150"></a><span class="lineno"> 1150</span>&#160;        BOOST_TEST(<a class="code" href="classarmnn_1_1_dynamic_backend_utils.xhtml#a6789076aa25c6a10faeff1043359bda8">TestDynamicBackendUtils::IsBackendCompatible</a>(dynamicBackendVersion));</div><div class="line"><a name="l01151"></a><span class="lineno"> 1151</span>&#160;    }</div><div class="line"><a name="l01152"></a><span class="lineno"> 1152</span>&#160;</div><div class="line"><a name="l01153"></a><span class="lineno"> 1153</span>&#160;    <span class="comment">// Dummy registry used for testing</span></div><div class="line"><a name="l01154"></a><span class="lineno"> 1154</span>&#160;    <a class="code" href="classarmnn_1_1_backend_registry.xhtml">BackendRegistry</a> backendRegistry;</div><div class="line"><a name="l01155"></a><span class="lineno"> 1155</span>&#160;    BOOST_TEST(backendRegistry.<a class="code" href="classarmnn_1_1_backend_registry.xhtml#a58f4b9e873b7c1c7d512bd9f7d1489d8">Size</a>() == 0);</div><div class="line"><a name="l01156"></a><span class="lineno"> 1156</span>&#160;</div><div class="line"><a name="l01157"></a><span class="lineno"> 1157</span>&#160;    std::vector&lt;BackendId&gt; expectedRegisteredbackendIds</div><div class="line"><a name="l01158"></a><span class="lineno"> 1158</span>&#160;    {</div><div class="line"><a name="l01159"></a><span class="lineno"> 1159</span>&#160;        <span class="stringliteral">&quot;TestValid2&quot;</span>,</div><div class="line"><a name="l01160"></a><span class="lineno"> 1160</span>&#160;        <span class="stringliteral">&quot;TestValid3&quot;</span>,</div><div class="line"><a name="l01161"></a><span class="lineno"> 1161</span>&#160;        <span class="stringliteral">&quot;TestValid5&quot;</span></div><div class="line"><a name="l01162"></a><span class="lineno"> 1162</span>&#160;    };</div><div class="line"><a name="l01163"></a><span class="lineno"> 1163</span>&#160;</div><div class="line"><a name="l01164"></a><span class="lineno"> 1164</span>&#160;    <a class="code" href="namespacearmnn.xhtml#a1854d9cda81304325664363c1fd0fb27">BackendIdSet</a> registeredBackendIds = <a class="code" href="class_test_dynamic_backend_utils.xhtml#a304e5c5c5afc70590df8927e144fbaa5">TestDynamicBackendUtils::RegisterDynamicBackendsImplTest</a>(backendRegistry,</div><div class="line"><a name="l01165"></a><span class="lineno"> 1165</span>&#160;                                                                                                 dynamicBackends);</div><div class="line"><a name="l01166"></a><span class="lineno"> 1166</span>&#160;    BOOST_TEST(backendRegistry.<a class="code" href="classarmnn_1_1_backend_registry.xhtml#a58f4b9e873b7c1c7d512bd9f7d1489d8">Size</a>() == expectedRegisteredbackendIds.size());</div><div class="line"><a name="l01167"></a><span class="lineno"> 1167</span>&#160;    BOOST_TEST(registeredBackendIds.size() == expectedRegisteredbackendIds.size());</div><div class="line"><a name="l01168"></a><span class="lineno"> 1168</span>&#160;</div><div class="line"><a name="l01169"></a><span class="lineno"> 1169</span>&#160;    <a class="code" href="namespacearmnn.xhtml#a1854d9cda81304325664363c1fd0fb27">BackendIdSet</a> backendIds = backendRegistry.<a class="code" href="classarmnn_1_1_backend_registry.xhtml#a570cb1835ec73000a7954ba75257904f">GetBackendIds</a>();</div><div class="line"><a name="l01170"></a><span class="lineno"> 1170</span>&#160;    BOOST_TEST(backendIds.size() == expectedRegisteredbackendIds.size());</div><div class="line"><a name="l01171"></a><span class="lineno"> 1171</span>&#160;    <span class="keywordflow">for</span> (<span class="keyword">const</span> <a class="code" href="classarmnn_1_1_backend_id.xhtml">BackendId</a>&amp; expectedRegisteredbackendId : expectedRegisteredbackendIds)</div><div class="line"><a name="l01172"></a><span class="lineno"> 1172</span>&#160;    {</div><div class="line"><a name="l01173"></a><span class="lineno"> 1173</span>&#160;        BOOST_TEST((backendIds.find(expectedRegisteredbackendId) != backendIds.end()));</div><div class="line"><a name="l01174"></a><span class="lineno"> 1174</span>&#160;        BOOST_TEST((registeredBackendIds.find(expectedRegisteredbackendId) != registeredBackendIds.end()));</div><div class="line"><a name="l01175"></a><span class="lineno"> 1175</span>&#160;</div><div class="line"><a name="l01176"></a><span class="lineno"> 1176</span>&#160;        <span class="keyword">auto</span> dynamicBackendFactoryFunction = backendRegistry.<a class="code" href="classarmnn_1_1_backend_registry.xhtml#afc0c63ca8db8957b58826f6d7bd231b2">GetFactory</a>(expectedRegisteredbackendId);</div><div class="line"><a name="l01177"></a><span class="lineno"> 1177</span>&#160;        BOOST_TEST((dynamicBackendFactoryFunction != <span class="keyword">nullptr</span>));</div><div class="line"><a name="l01178"></a><span class="lineno"> 1178</span>&#160;</div><div class="line"><a name="l01179"></a><span class="lineno"> 1179</span>&#160;        <a class="code" href="namespacearmnn.xhtml#ade0af9dacaa52cafdd701bef2e901c77">IBackendInternalUniquePtr</a> dynamicBackend = dynamicBackendFactoryFunction();</div><div class="line"><a name="l01180"></a><span class="lineno"> 1180</span>&#160;        BOOST_TEST((dynamicBackend != <span class="keyword">nullptr</span>));</div><div class="line"><a name="l01181"></a><span class="lineno"> 1181</span>&#160;        BOOST_TEST((dynamicBackend-&gt;GetId() == expectedRegisteredbackendId));</div><div class="line"><a name="l01182"></a><span class="lineno"> 1182</span>&#160;    }</div><div class="line"><a name="l01183"></a><span class="lineno"> 1183</span>&#160;}</div><div class="line"><a name="l01184"></a><span class="lineno"> 1184</span>&#160;<span class="preprocessor">#endif</span></div><div class="line"><a name="l01185"></a><span class="lineno"> 1185</span>&#160;</div><div class="line"><a name="l01186"></a><span class="lineno"><a class="line" href="_dynamic_backend_tests_8hpp.xhtml#a98bdeaf1b8289ba5fa6ac2b0e45a13d0"> 1186</a></span>&#160;<span class="keywordtype">void</span> <a class="code" href="_dynamic_backend_tests_8hpp.xhtml#a98bdeaf1b8289ba5fa6ac2b0e45a13d0">RegisterMultipleInvalidDynamicBackendsTestImpl</a>()</div><div class="line"><a name="l01187"></a><span class="lineno"> 1187</span>&#160;{</div><div class="line"><a name="l01188"></a><span class="lineno"> 1188</span>&#160;    <span class="keyword">using namespace </span><a class="code" href="namespacearmnn.xhtml">armnn</a>;</div><div class="line"><a name="l01189"></a><span class="lineno"> 1189</span>&#160;    <span class="keyword">using namespace </span>fs;</div><div class="line"><a name="l01190"></a><span class="lineno"> 1190</span>&#160;</div><div class="line"><a name="l01191"></a><span class="lineno"> 1191</span>&#160;    <span class="comment">// Try to register many invalid dynamic backends</span></div><div class="line"><a name="l01192"></a><span class="lineno"> 1192</span>&#160;</div><div class="line"><a name="l01193"></a><span class="lineno"> 1193</span>&#160;    <span class="comment">// The test covers one directory:</span></div><div class="line"><a name="l01194"></a><span class="lineno"> 1194</span>&#160;    <span class="comment">// &lt;unit test path&gt;/src/backends/backendsCommon/test/</span></div><div class="line"><a name="l01195"></a><span class="lineno"> 1195</span>&#160;    <span class="comment">//                                                └─ backendsTestPath9/   -&gt; exists, contains files</span></div><div class="line"><a name="l01196"></a><span class="lineno"> 1196</span>&#160;    <span class="comment">//</span></div><div class="line"><a name="l01197"></a><span class="lineno"> 1197</span>&#160;    <span class="comment">// The test sub-directory backendsTestPath9/ contains the following test files:</span></div><div class="line"><a name="l01198"></a><span class="lineno"> 1198</span>&#160;    <span class="comment">//</span></div><div class="line"><a name="l01199"></a><span class="lineno"> 1199</span>&#160;    <span class="comment">// Arm_TestInvalid10_backend.so -&gt; not valid (invalid backend id)</span></div><div class="line"><a name="l01200"></a><span class="lineno"> 1200</span>&#160;    <span class="comment">// Arm_TestInvalid11_backend.so -&gt; not valid (invalid backend id)</span></div><div class="line"><a name="l01201"></a><span class="lineno"> 1201</span>&#160;</div><div class="line"><a name="l01202"></a><span class="lineno"> 1202</span>&#160;    std::string testDynamicBackendsSubDir9 = <a class="code" href="_dynamic_backend_tests_8hpp.xhtml#aa21b882f38be6940c5c0515db9b69508">GetTestSubDirectory</a>(g_TestDynamicBackendsSubDir9);</div><div class="line"><a name="l01203"></a><span class="lineno"> 1203</span>&#160;    BOOST_CHECK(exists(testDynamicBackendsSubDir9));</div><div class="line"><a name="l01204"></a><span class="lineno"> 1204</span>&#160;</div><div class="line"><a name="l01205"></a><span class="lineno"> 1205</span>&#160;    std::string testInvalidBackend10FilePath = <a class="code" href="_dynamic_backend_tests_8hpp.xhtml#ad01ee94919c8ecfba3b9e4fe89ed6bbe">GetTestFilePath</a>(testDynamicBackendsSubDir9,</div><div class="line"><a name="l01206"></a><span class="lineno"> 1206</span>&#160;                                                               g_TestInvalidBackend10FileName);</div><div class="line"><a name="l01207"></a><span class="lineno"> 1207</span>&#160;    std::string testInvalidBackend11FilePath = <a class="code" href="_dynamic_backend_tests_8hpp.xhtml#ad01ee94919c8ecfba3b9e4fe89ed6bbe">GetTestFilePath</a>(testDynamicBackendsSubDir9,</div><div class="line"><a name="l01208"></a><span class="lineno"> 1208</span>&#160;                                                               g_TestInvalidBackend11FileName);</div><div class="line"><a name="l01209"></a><span class="lineno"> 1209</span>&#160;    BOOST_CHECK(exists(testInvalidBackend10FilePath));</div><div class="line"><a name="l01210"></a><span class="lineno"> 1210</span>&#160;    BOOST_CHECK(exists(testInvalidBackend11FilePath));</div><div class="line"><a name="l01211"></a><span class="lineno"> 1211</span>&#160;</div><div class="line"><a name="l01212"></a><span class="lineno"> 1212</span>&#160;    std::vector&lt;std::string&gt; sharedObjects</div><div class="line"><a name="l01213"></a><span class="lineno"> 1213</span>&#160;    {</div><div class="line"><a name="l01214"></a><span class="lineno"> 1214</span>&#160;        testInvalidBackend10FilePath,</div><div class="line"><a name="l01215"></a><span class="lineno"> 1215</span>&#160;        testInvalidBackend11FilePath,</div><div class="line"><a name="l01216"></a><span class="lineno"> 1216</span>&#160;        <span class="stringliteral">&quot;InvalidSharedObject&quot;</span></div><div class="line"><a name="l01217"></a><span class="lineno"> 1217</span>&#160;    };</div><div class="line"><a name="l01218"></a><span class="lineno"> 1218</span>&#160;    std::vector&lt;DynamicBackendPtr&gt; dynamicBackends = <a class="code" href="classarmnn_1_1_dynamic_backend_utils.xhtml#a42e250dfa19b9df3abdb273e1d35fa5b">TestDynamicBackendUtils::CreateDynamicBackends</a>(sharedObjects);</div><div class="line"><a name="l01219"></a><span class="lineno"> 1219</span>&#160;</div><div class="line"><a name="l01220"></a><span class="lineno"> 1220</span>&#160;    BOOST_TEST(dynamicBackends.size() == 2);</div><div class="line"><a name="l01221"></a><span class="lineno"> 1221</span>&#160;    BOOST_TEST((dynamicBackends[0] != <span class="keyword">nullptr</span>));</div><div class="line"><a name="l01222"></a><span class="lineno"> 1222</span>&#160;    BOOST_TEST((dynamicBackends[1] != <span class="keyword">nullptr</span>));</div><div class="line"><a name="l01223"></a><span class="lineno"> 1223</span>&#160;</div><div class="line"><a name="l01224"></a><span class="lineno"> 1224</span>&#160;    <a class="code" href="classarmnn_1_1_backend_id.xhtml">BackendId</a> dynamicBackendId1 = dynamicBackends[0]-&gt;GetBackendId();</div><div class="line"><a name="l01225"></a><span class="lineno"> 1225</span>&#160;    <a class="code" href="classarmnn_1_1_backend_id.xhtml">BackendId</a> dynamicBackendId2 = dynamicBackends[1]-&gt;GetBackendId();</div><div class="line"><a name="l01226"></a><span class="lineno"> 1226</span>&#160;    BOOST_TEST((dynamicBackendId1 == <span class="stringliteral">&quot;&quot;</span>));</div><div class="line"><a name="l01227"></a><span class="lineno"> 1227</span>&#160;    BOOST_TEST((dynamicBackendId2 == <span class="stringliteral">&quot;Unknown&quot;</span>));</div><div class="line"><a name="l01228"></a><span class="lineno"> 1228</span>&#160;</div><div class="line"><a name="l01229"></a><span class="lineno"> 1229</span>&#160;    <span class="keywordflow">for</span> (<span class="keywordtype">size_t</span> i = 0; i &lt; dynamicBackends.size(); i++)</div><div class="line"><a name="l01230"></a><span class="lineno"> 1230</span>&#160;    {</div><div class="line"><a name="l01231"></a><span class="lineno"> 1231</span>&#160;        <a class="code" href="structarmnn_1_1_backend_version.xhtml">BackendVersion</a> dynamicBackendVersion = dynamicBackends[i]-&gt;GetBackendVersion();</div><div class="line"><a name="l01232"></a><span class="lineno"> 1232</span>&#160;        BOOST_TEST(<a class="code" href="classarmnn_1_1_dynamic_backend_utils.xhtml#a6789076aa25c6a10faeff1043359bda8">TestDynamicBackendUtils::IsBackendCompatible</a>(dynamicBackendVersion));</div><div class="line"><a name="l01233"></a><span class="lineno"> 1233</span>&#160;    }</div><div class="line"><a name="l01234"></a><span class="lineno"> 1234</span>&#160;</div><div class="line"><a name="l01235"></a><span class="lineno"> 1235</span>&#160;    <span class="comment">// Dummy registry used for testing</span></div><div class="line"><a name="l01236"></a><span class="lineno"> 1236</span>&#160;    <a class="code" href="classarmnn_1_1_backend_registry.xhtml">BackendRegistry</a> backendRegistry;</div><div class="line"><a name="l01237"></a><span class="lineno"> 1237</span>&#160;    BOOST_TEST(backendRegistry.<a class="code" href="classarmnn_1_1_backend_registry.xhtml#a58f4b9e873b7c1c7d512bd9f7d1489d8">Size</a>() == 0);</div><div class="line"><a name="l01238"></a><span class="lineno"> 1238</span>&#160;</div><div class="line"><a name="l01239"></a><span class="lineno"> 1239</span>&#160;    <span class="comment">// Check that no dynamic backend got registered</span></div><div class="line"><a name="l01240"></a><span class="lineno"> 1240</span>&#160;    <a class="code" href="namespacearmnn.xhtml#a1854d9cda81304325664363c1fd0fb27">BackendIdSet</a> registeredBackendIds = <a class="code" href="class_test_dynamic_backend_utils.xhtml#a304e5c5c5afc70590df8927e144fbaa5">TestDynamicBackendUtils::RegisterDynamicBackendsImplTest</a>(backendRegistry,</div><div class="line"><a name="l01241"></a><span class="lineno"> 1241</span>&#160;                                                                                                 dynamicBackends);</div><div class="line"><a name="l01242"></a><span class="lineno"> 1242</span>&#160;    BOOST_TEST(backendRegistry.<a class="code" href="classarmnn_1_1_backend_registry.xhtml#a58f4b9e873b7c1c7d512bd9f7d1489d8">Size</a>() == 0);</div><div class="line"><a name="l01243"></a><span class="lineno"> 1243</span>&#160;    BOOST_TEST(registeredBackendIds.empty());</div><div class="line"><a name="l01244"></a><span class="lineno"> 1244</span>&#160;}</div><div class="line"><a name="l01245"></a><span class="lineno"> 1245</span>&#160;</div><div class="line"><a name="l01246"></a><span class="lineno"> 1246</span>&#160;<span class="preprocessor">#if !defined(ARMNN_DYNAMIC_BACKEND_ENABLED)</span></div><div class="line"><a name="l01247"></a><span class="lineno"> 1247</span>&#160;</div><div class="line"><a name="l01248"></a><span class="lineno"><a class="line" href="_dynamic_backend_tests_8hpp.xhtml#a4967976a2407f1e67482235953328fba"> 1248</a></span>&#160;<span class="keywordtype">void</span> <a class="code" href="_dynamic_backend_tests_8hpp.xhtml#a4967976a2407f1e67482235953328fba">RuntimeEmptyTestImpl</a>()</div><div class="line"><a name="l01249"></a><span class="lineno"> 1249</span>&#160;{</div><div class="line"><a name="l01250"></a><span class="lineno"> 1250</span>&#160;    <span class="keyword">using namespace </span><a class="code" href="namespacearmnn.xhtml">armnn</a>;</div><div class="line"><a name="l01251"></a><span class="lineno"> 1251</span>&#160;</div><div class="line"><a name="l01252"></a><span class="lineno"> 1252</span>&#160;    <span class="comment">// Swapping the backend registry storage for testing</span></div><div class="line"><a name="l01253"></a><span class="lineno"> 1253</span>&#160;    <a class="code" href="class_test_backend_registry.xhtml">TestBackendRegistry</a> testBackendRegistry;</div><div class="line"><a name="l01254"></a><span class="lineno"> 1254</span>&#160;</div><div class="line"><a name="l01255"></a><span class="lineno"> 1255</span>&#160;    <span class="keyword">const</span> <a class="code" href="classarmnn_1_1_backend_registry.xhtml">BackendRegistry</a>&amp; backendRegistry = <a class="code" href="namespacearmnn.xhtml#ac2807505b850738bc8a1991ce669dd47">BackendRegistryInstance</a>();</div><div class="line"><a name="l01256"></a><span class="lineno"> 1256</span>&#160;    BOOST_TEST(backendRegistry.<a class="code" href="classarmnn_1_1_backend_registry.xhtml#a58f4b9e873b7c1c7d512bd9f7d1489d8">Size</a>() == 0);</div><div class="line"><a name="l01257"></a><span class="lineno"> 1257</span>&#160;</div><div class="line"><a name="l01258"></a><span class="lineno"> 1258</span>&#160;    <a class="code" href="structarmnn_1_1_i_runtime_1_1_creation_options.xhtml">IRuntime::CreationOptions</a> creationOptions;</div><div class="line"><a name="l01259"></a><span class="lineno"> 1259</span>&#160;    <a class="code" href="namespacearmnn.xhtml#a150468a02bd7b2d2d061c4aaaee939f0">IRuntimePtr</a> runtime = IRuntime::Create(creationOptions);</div><div class="line"><a name="l01260"></a><span class="lineno"> 1260</span>&#160;</div><div class="line"><a name="l01261"></a><span class="lineno"> 1261</span>&#160;    <span class="keyword">const</span> <a class="code" href="classarmnn_1_1_device_spec.xhtml">DeviceSpec</a>&amp; deviceSpec = *PolymorphicDowncast&lt;const DeviceSpec*&gt;(&amp;runtime-&gt;GetDeviceSpec());</div><div class="line"><a name="l01262"></a><span class="lineno"> 1262</span>&#160;    <a class="code" href="namespacearmnn.xhtml#a1854d9cda81304325664363c1fd0fb27">BackendIdSet</a> supportedBackendIds = deviceSpec.<a class="code" href="classarmnn_1_1_device_spec.xhtml#a89d4c29e22db837f787e2171b8a71892">GetSupportedBackends</a>();</div><div class="line"><a name="l01263"></a><span class="lineno"> 1263</span>&#160;    BOOST_TEST(supportedBackendIds.empty());</div><div class="line"><a name="l01264"></a><span class="lineno"> 1264</span>&#160;</div><div class="line"><a name="l01265"></a><span class="lineno"> 1265</span>&#160;    BOOST_TEST(backendRegistry.<a class="code" href="classarmnn_1_1_backend_registry.xhtml#a58f4b9e873b7c1c7d512bd9f7d1489d8">Size</a>() == 0);</div><div class="line"><a name="l01266"></a><span class="lineno"> 1266</span>&#160;}</div><div class="line"><a name="l01267"></a><span class="lineno"> 1267</span>&#160;</div><div class="line"><a name="l01268"></a><span class="lineno"> 1268</span>&#160;<span class="preprocessor">#endif</span></div><div class="line"><a name="l01269"></a><span class="lineno"> 1269</span>&#160;</div><div class="line"><a name="l01270"></a><span class="lineno"><a class="line" href="_dynamic_backend_tests_8hpp.xhtml#a2a3715f6c83f6dd0c62035ecd2dbb386"> 1270</a></span>&#160;<span class="keywordtype">void</span> <a class="code" href="_dynamic_backend_tests_8hpp.xhtml#a2a3715f6c83f6dd0c62035ecd2dbb386">RuntimeDynamicBackendsTestImpl</a>()</div><div class="line"><a name="l01271"></a><span class="lineno"> 1271</span>&#160;{</div><div class="line"><a name="l01272"></a><span class="lineno"> 1272</span>&#160;    <span class="keyword">using namespace </span><a class="code" href="namespacearmnn.xhtml">armnn</a>;</div><div class="line"><a name="l01273"></a><span class="lineno"> 1273</span>&#160;    <span class="keyword">using namespace </span>fs;</div><div class="line"><a name="l01274"></a><span class="lineno"> 1274</span>&#160;</div><div class="line"><a name="l01275"></a><span class="lineno"> 1275</span>&#160;    <span class="comment">// Swapping the backend registry storage for testing</span></div><div class="line"><a name="l01276"></a><span class="lineno"> 1276</span>&#160;    <a class="code" href="class_test_backend_registry.xhtml">TestBackendRegistry</a> testBackendRegistry;</div><div class="line"><a name="l01277"></a><span class="lineno"> 1277</span>&#160;</div><div class="line"><a name="l01278"></a><span class="lineno"> 1278</span>&#160;    <span class="comment">// This directory contains valid and invalid backends</span></div><div class="line"><a name="l01279"></a><span class="lineno"> 1279</span>&#160;    std::string testDynamicBackendsSubDir5 = <a class="code" href="_dynamic_backend_tests_8hpp.xhtml#aa21b882f38be6940c5c0515db9b69508">GetTestSubDirectory</a>(g_TestDynamicBackendsSubDir5);</div><div class="line"><a name="l01280"></a><span class="lineno"> 1280</span>&#160;    BOOST_CHECK(exists(testDynamicBackendsSubDir5));</div><div class="line"><a name="l01281"></a><span class="lineno"> 1281</span>&#160;</div><div class="line"><a name="l01282"></a><span class="lineno"> 1282</span>&#160;    <span class="comment">// Using the path override in CreationOptions to load some test dynamic backends</span></div><div class="line"><a name="l01283"></a><span class="lineno"> 1283</span>&#160;    <a class="code" href="structarmnn_1_1_i_runtime_1_1_creation_options.xhtml">IRuntime::CreationOptions</a> creationOptions;</div><div class="line"><a name="l01284"></a><span class="lineno"> 1284</span>&#160;    creationOptions.<a class="code" href="structarmnn_1_1_i_runtime_1_1_creation_options.xhtml#ae43cf4b5df0068ee6a9151c98947248b">m_DynamicBackendsPath</a> = testDynamicBackendsSubDir5;</div><div class="line"><a name="l01285"></a><span class="lineno"> 1285</span>&#160;    <a class="code" href="namespacearmnn.xhtml#a150468a02bd7b2d2d061c4aaaee939f0">IRuntimePtr</a> runtime = IRuntime::Create(creationOptions);</div><div class="line"><a name="l01286"></a><span class="lineno"> 1286</span>&#160;</div><div class="line"><a name="l01287"></a><span class="lineno"> 1287</span>&#160;    std::vector&lt;BackendId&gt; expectedRegisteredbackendIds</div><div class="line"><a name="l01288"></a><span class="lineno"> 1288</span>&#160;    {</div><div class="line"><a name="l01289"></a><span class="lineno"> 1289</span>&#160;        <span class="stringliteral">&quot;TestValid2&quot;</span>,</div><div class="line"><a name="l01290"></a><span class="lineno"> 1290</span>&#160;        <span class="stringliteral">&quot;TestValid3&quot;</span></div><div class="line"><a name="l01291"></a><span class="lineno"> 1291</span>&#160;    };</div><div class="line"><a name="l01292"></a><span class="lineno"> 1292</span>&#160;</div><div class="line"><a name="l01293"></a><span class="lineno"> 1293</span>&#160;    <span class="keyword">const</span> <a class="code" href="classarmnn_1_1_backend_registry.xhtml">BackendRegistry</a>&amp; backendRegistry = <a class="code" href="namespacearmnn.xhtml#ac2807505b850738bc8a1991ce669dd47">BackendRegistryInstance</a>();</div><div class="line"><a name="l01294"></a><span class="lineno"> 1294</span>&#160;    BOOST_TEST(backendRegistry.<a class="code" href="classarmnn_1_1_backend_registry.xhtml#a58f4b9e873b7c1c7d512bd9f7d1489d8">Size</a>() == expectedRegisteredbackendIds.size());</div><div class="line"><a name="l01295"></a><span class="lineno"> 1295</span>&#160;</div><div class="line"><a name="l01296"></a><span class="lineno"> 1296</span>&#160;    <a class="code" href="namespacearmnn.xhtml#a1854d9cda81304325664363c1fd0fb27">BackendIdSet</a> backendIds = backendRegistry.<a class="code" href="classarmnn_1_1_backend_registry.xhtml#a570cb1835ec73000a7954ba75257904f">GetBackendIds</a>();</div><div class="line"><a name="l01297"></a><span class="lineno"> 1297</span>&#160;    <span class="keywordflow">for</span> (<span class="keyword">const</span> <a class="code" href="classarmnn_1_1_backend_id.xhtml">BackendId</a>&amp; expectedRegisteredbackendId : expectedRegisteredbackendIds)</div><div class="line"><a name="l01298"></a><span class="lineno"> 1298</span>&#160;    {</div><div class="line"><a name="l01299"></a><span class="lineno"> 1299</span>&#160;        BOOST_TEST((backendIds.find(expectedRegisteredbackendId) != backendIds.end()));</div><div class="line"><a name="l01300"></a><span class="lineno"> 1300</span>&#160;    }</div><div class="line"><a name="l01301"></a><span class="lineno"> 1301</span>&#160;</div><div class="line"><a name="l01302"></a><span class="lineno"> 1302</span>&#160;    <span class="keyword">const</span> <a class="code" href="classarmnn_1_1_device_spec.xhtml">DeviceSpec</a>&amp; deviceSpec = *PolymorphicDowncast&lt;const DeviceSpec*&gt;(&amp;runtime-&gt;GetDeviceSpec());</div><div class="line"><a name="l01303"></a><span class="lineno"> 1303</span>&#160;    <a class="code" href="namespacearmnn.xhtml#a1854d9cda81304325664363c1fd0fb27">BackendIdSet</a> supportedBackendIds = deviceSpec.<a class="code" href="classarmnn_1_1_device_spec.xhtml#a89d4c29e22db837f787e2171b8a71892">GetSupportedBackends</a>();</div><div class="line"><a name="l01304"></a><span class="lineno"> 1304</span>&#160;    BOOST_TEST(supportedBackendIds.size() == expectedRegisteredbackendIds.size());</div><div class="line"><a name="l01305"></a><span class="lineno"> 1305</span>&#160;    <span class="keywordflow">for</span> (<span class="keyword">const</span> <a class="code" href="classarmnn_1_1_backend_id.xhtml">BackendId</a>&amp; expectedRegisteredbackendId : expectedRegisteredbackendIds)</div><div class="line"><a name="l01306"></a><span class="lineno"> 1306</span>&#160;    {</div><div class="line"><a name="l01307"></a><span class="lineno"> 1307</span>&#160;        BOOST_TEST((supportedBackendIds.find(expectedRegisteredbackendId) != supportedBackendIds.end()));</div><div class="line"><a name="l01308"></a><span class="lineno"> 1308</span>&#160;    }</div><div class="line"><a name="l01309"></a><span class="lineno"> 1309</span>&#160;}</div><div class="line"><a name="l01310"></a><span class="lineno"> 1310</span>&#160;</div><div class="line"><a name="l01311"></a><span class="lineno"><a class="line" href="_dynamic_backend_tests_8hpp.xhtml#a805c0fe55cb42d8507a081c7c7659408"> 1311</a></span>&#160;<span class="keywordtype">void</span> <a class="code" href="_dynamic_backend_tests_8hpp.xhtml#a805c0fe55cb42d8507a081c7c7659408">RuntimeDuplicateDynamicBackendsTestImpl</a>()</div><div class="line"><a name="l01312"></a><span class="lineno"> 1312</span>&#160;{</div><div class="line"><a name="l01313"></a><span class="lineno"> 1313</span>&#160;    <span class="keyword">using namespace </span><a class="code" href="namespacearmnn.xhtml">armnn</a>;</div><div class="line"><a name="l01314"></a><span class="lineno"> 1314</span>&#160;    <span class="keyword">using namespace </span>fs;</div><div class="line"><a name="l01315"></a><span class="lineno"> 1315</span>&#160;</div><div class="line"><a name="l01316"></a><span class="lineno"> 1316</span>&#160;    <span class="comment">// Swapping the backend registry storage for testing</span></div><div class="line"><a name="l01317"></a><span class="lineno"> 1317</span>&#160;    <a class="code" href="class_test_backend_registry.xhtml">TestBackendRegistry</a> testBackendRegistry;</div><div class="line"><a name="l01318"></a><span class="lineno"> 1318</span>&#160;</div><div class="line"><a name="l01319"></a><span class="lineno"> 1319</span>&#160;    <span class="comment">// This directory contains valid, invalid and duplicate backends</span></div><div class="line"><a name="l01320"></a><span class="lineno"> 1320</span>&#160;    std::string testDynamicBackendsSubDir6 = <a class="code" href="_dynamic_backend_tests_8hpp.xhtml#aa21b882f38be6940c5c0515db9b69508">GetTestSubDirectory</a>(g_TestDynamicBackendsSubDir6);</div><div class="line"><a name="l01321"></a><span class="lineno"> 1321</span>&#160;    BOOST_CHECK(exists(testDynamicBackendsSubDir6));</div><div class="line"><a name="l01322"></a><span class="lineno"> 1322</span>&#160;</div><div class="line"><a name="l01323"></a><span class="lineno"> 1323</span>&#160;    <span class="comment">// Using the path override in CreationOptions to load some test dynamic backends</span></div><div class="line"><a name="l01324"></a><span class="lineno"> 1324</span>&#160;    <a class="code" href="structarmnn_1_1_i_runtime_1_1_creation_options.xhtml">IRuntime::CreationOptions</a> creationOptions;</div><div class="line"><a name="l01325"></a><span class="lineno"> 1325</span>&#160;    creationOptions.<a class="code" href="structarmnn_1_1_i_runtime_1_1_creation_options.xhtml#ae43cf4b5df0068ee6a9151c98947248b">m_DynamicBackendsPath</a> = testDynamicBackendsSubDir6;</div><div class="line"><a name="l01326"></a><span class="lineno"> 1326</span>&#160;    <a class="code" href="namespacearmnn.xhtml#a150468a02bd7b2d2d061c4aaaee939f0">IRuntimePtr</a> runtime = IRuntime::Create(creationOptions);</div><div class="line"><a name="l01327"></a><span class="lineno"> 1327</span>&#160;</div><div class="line"><a name="l01328"></a><span class="lineno"> 1328</span>&#160;    std::vector&lt;BackendId&gt; expectedRegisteredbackendIds</div><div class="line"><a name="l01329"></a><span class="lineno"> 1329</span>&#160;    {</div><div class="line"><a name="l01330"></a><span class="lineno"> 1330</span>&#160;        <span class="stringliteral">&quot;TestValid2&quot;</span>,</div><div class="line"><a name="l01331"></a><span class="lineno"> 1331</span>&#160;        <span class="stringliteral">&quot;TestValid5&quot;</span></div><div class="line"><a name="l01332"></a><span class="lineno"> 1332</span>&#160;    };</div><div class="line"><a name="l01333"></a><span class="lineno"> 1333</span>&#160;</div><div class="line"><a name="l01334"></a><span class="lineno"> 1334</span>&#160;    <span class="keyword">const</span> <a class="code" href="classarmnn_1_1_backend_registry.xhtml">BackendRegistry</a>&amp; backendRegistry = <a class="code" href="namespacearmnn.xhtml#ac2807505b850738bc8a1991ce669dd47">BackendRegistryInstance</a>();</div><div class="line"><a name="l01335"></a><span class="lineno"> 1335</span>&#160;    BOOST_TEST(backendRegistry.<a class="code" href="classarmnn_1_1_backend_registry.xhtml#a58f4b9e873b7c1c7d512bd9f7d1489d8">Size</a>() == expectedRegisteredbackendIds.size());</div><div class="line"><a name="l01336"></a><span class="lineno"> 1336</span>&#160;</div><div class="line"><a name="l01337"></a><span class="lineno"> 1337</span>&#160;    <a class="code" href="namespacearmnn.xhtml#a1854d9cda81304325664363c1fd0fb27">BackendIdSet</a> backendIds = backendRegistry.<a class="code" href="classarmnn_1_1_backend_registry.xhtml#a570cb1835ec73000a7954ba75257904f">GetBackendIds</a>();</div><div class="line"><a name="l01338"></a><span class="lineno"> 1338</span>&#160;    <span class="keywordflow">for</span> (<span class="keyword">const</span> <a class="code" href="classarmnn_1_1_backend_id.xhtml">BackendId</a>&amp; expectedRegisteredbackendId : expectedRegisteredbackendIds)</div><div class="line"><a name="l01339"></a><span class="lineno"> 1339</span>&#160;    {</div><div class="line"><a name="l01340"></a><span class="lineno"> 1340</span>&#160;        BOOST_TEST((backendIds.find(expectedRegisteredbackendId) != backendIds.end()));</div><div class="line"><a name="l01341"></a><span class="lineno"> 1341</span>&#160;    }</div><div class="line"><a name="l01342"></a><span class="lineno"> 1342</span>&#160;</div><div class="line"><a name="l01343"></a><span class="lineno"> 1343</span>&#160;    <span class="keyword">const</span> <a class="code" href="classarmnn_1_1_device_spec.xhtml">DeviceSpec</a>&amp; deviceSpec = *PolymorphicDowncast&lt;const DeviceSpec*&gt;(&amp;runtime-&gt;GetDeviceSpec());</div><div class="line"><a name="l01344"></a><span class="lineno"> 1344</span>&#160;    <a class="code" href="namespacearmnn.xhtml#a1854d9cda81304325664363c1fd0fb27">BackendIdSet</a> supportedBackendIds = deviceSpec.<a class="code" href="classarmnn_1_1_device_spec.xhtml#a89d4c29e22db837f787e2171b8a71892">GetSupportedBackends</a>();</div><div class="line"><a name="l01345"></a><span class="lineno"> 1345</span>&#160;    BOOST_TEST(supportedBackendIds.size() == expectedRegisteredbackendIds.size());</div><div class="line"><a name="l01346"></a><span class="lineno"> 1346</span>&#160;    <span class="keywordflow">for</span> (<span class="keyword">const</span> <a class="code" href="classarmnn_1_1_backend_id.xhtml">BackendId</a>&amp; expectedRegisteredbackendId : expectedRegisteredbackendIds)</div><div class="line"><a name="l01347"></a><span class="lineno"> 1347</span>&#160;    {</div><div class="line"><a name="l01348"></a><span class="lineno"> 1348</span>&#160;        BOOST_TEST((supportedBackendIds.find(expectedRegisteredbackendId) != supportedBackendIds.end()));</div><div class="line"><a name="l01349"></a><span class="lineno"> 1349</span>&#160;    }</div><div class="line"><a name="l01350"></a><span class="lineno"> 1350</span>&#160;}</div><div class="line"><a name="l01351"></a><span class="lineno"> 1351</span>&#160;</div><div class="line"><a name="l01352"></a><span class="lineno"><a class="line" href="_dynamic_backend_tests_8hpp.xhtml#afe972850015352cf8ae3e073ac31abcd"> 1352</a></span>&#160;<span class="keywordtype">void</span> <a class="code" href="_dynamic_backend_tests_8hpp.xhtml#afe972850015352cf8ae3e073ac31abcd">RuntimeInvalidDynamicBackendsTestImpl</a>()</div><div class="line"><a name="l01353"></a><span class="lineno"> 1353</span>&#160;{</div><div class="line"><a name="l01354"></a><span class="lineno"> 1354</span>&#160;    <span class="keyword">using namespace </span><a class="code" href="namespacearmnn.xhtml">armnn</a>;</div><div class="line"><a name="l01355"></a><span class="lineno"> 1355</span>&#160;    <span class="keyword">using namespace </span>fs;</div><div class="line"><a name="l01356"></a><span class="lineno"> 1356</span>&#160;</div><div class="line"><a name="l01357"></a><span class="lineno"> 1357</span>&#160;    <span class="comment">// Swapping the backend registry storage for testing</span></div><div class="line"><a name="l01358"></a><span class="lineno"> 1358</span>&#160;    <a class="code" href="class_test_backend_registry.xhtml">TestBackendRegistry</a> testBackendRegistry;</div><div class="line"><a name="l01359"></a><span class="lineno"> 1359</span>&#160;</div><div class="line"><a name="l01360"></a><span class="lineno"> 1360</span>&#160;    <span class="comment">// This directory contains only invalid backends</span></div><div class="line"><a name="l01361"></a><span class="lineno"> 1361</span>&#160;    std::string testDynamicBackendsSubDir9 = <a class="code" href="_dynamic_backend_tests_8hpp.xhtml#aa21b882f38be6940c5c0515db9b69508">GetTestSubDirectory</a>(g_TestDynamicBackendsSubDir9);</div><div class="line"><a name="l01362"></a><span class="lineno"> 1362</span>&#160;    BOOST_CHECK(exists(testDynamicBackendsSubDir9));</div><div class="line"><a name="l01363"></a><span class="lineno"> 1363</span>&#160;</div><div class="line"><a name="l01364"></a><span class="lineno"> 1364</span>&#160;    <span class="comment">// Using the path override in CreationOptions to load some test dynamic backends</span></div><div class="line"><a name="l01365"></a><span class="lineno"> 1365</span>&#160;    <a class="code" href="structarmnn_1_1_i_runtime_1_1_creation_options.xhtml">IRuntime::CreationOptions</a> creationOptions;</div><div class="line"><a name="l01366"></a><span class="lineno"> 1366</span>&#160;    creationOptions.<a class="code" href="structarmnn_1_1_i_runtime_1_1_creation_options.xhtml#ae43cf4b5df0068ee6a9151c98947248b">m_DynamicBackendsPath</a> = testDynamicBackendsSubDir9;</div><div class="line"><a name="l01367"></a><span class="lineno"> 1367</span>&#160;    <a class="code" href="namespacearmnn.xhtml#a150468a02bd7b2d2d061c4aaaee939f0">IRuntimePtr</a> runtime = IRuntime::Create(creationOptions);</div><div class="line"><a name="l01368"></a><span class="lineno"> 1368</span>&#160;</div><div class="line"><a name="l01369"></a><span class="lineno"> 1369</span>&#160;    <span class="keyword">const</span> <a class="code" href="classarmnn_1_1_backend_registry.xhtml">BackendRegistry</a>&amp; backendRegistry = <a class="code" href="namespacearmnn.xhtml#ac2807505b850738bc8a1991ce669dd47">BackendRegistryInstance</a>();</div><div class="line"><a name="l01370"></a><span class="lineno"> 1370</span>&#160;    BOOST_TEST(backendRegistry.<a class="code" href="classarmnn_1_1_backend_registry.xhtml#a58f4b9e873b7c1c7d512bd9f7d1489d8">Size</a>() == 0);</div><div class="line"><a name="l01371"></a><span class="lineno"> 1371</span>&#160;</div><div class="line"><a name="l01372"></a><span class="lineno"> 1372</span>&#160;    <span class="keyword">const</span> <a class="code" href="classarmnn_1_1_device_spec.xhtml">DeviceSpec</a>&amp; deviceSpec = *PolymorphicDowncast&lt;const DeviceSpec*&gt;(&amp;runtime-&gt;GetDeviceSpec());</div><div class="line"><a name="l01373"></a><span class="lineno"> 1373</span>&#160;    <a class="code" href="namespacearmnn.xhtml#a1854d9cda81304325664363c1fd0fb27">BackendIdSet</a> supportedBackendIds = deviceSpec.<a class="code" href="classarmnn_1_1_device_spec.xhtml#a89d4c29e22db837f787e2171b8a71892">GetSupportedBackends</a>();</div><div class="line"><a name="l01374"></a><span class="lineno"> 1374</span>&#160;    BOOST_TEST(supportedBackendIds.empty());</div><div class="line"><a name="l01375"></a><span class="lineno"> 1375</span>&#160;}</div><div class="line"><a name="l01376"></a><span class="lineno"> 1376</span>&#160;</div><div class="line"><a name="l01377"></a><span class="lineno"><a class="line" href="_dynamic_backend_tests_8hpp.xhtml#a05f580df8c6c039d41d42c838cd97014"> 1377</a></span>&#160;<span class="keywordtype">void</span> <a class="code" href="_dynamic_backend_tests_8hpp.xhtml#a05f580df8c6c039d41d42c838cd97014">RuntimeInvalidOverridePathTestImpl</a>()</div><div class="line"><a name="l01378"></a><span class="lineno"> 1378</span>&#160;{</div><div class="line"><a name="l01379"></a><span class="lineno"> 1379</span>&#160;    <span class="keyword">using namespace </span><a class="code" href="namespacearmnn.xhtml">armnn</a>;</div><div class="line"><a name="l01380"></a><span class="lineno"> 1380</span>&#160;</div><div class="line"><a name="l01381"></a><span class="lineno"> 1381</span>&#160;    <span class="comment">// Swapping the backend registry storage for testing</span></div><div class="line"><a name="l01382"></a><span class="lineno"> 1382</span>&#160;    <a class="code" href="class_test_backend_registry.xhtml">TestBackendRegistry</a> testBackendRegistry;</div><div class="line"><a name="l01383"></a><span class="lineno"> 1383</span>&#160;</div><div class="line"><a name="l01384"></a><span class="lineno"> 1384</span>&#160;    <span class="comment">// Using the path override in CreationOptions to load some test dynamic backends</span></div><div class="line"><a name="l01385"></a><span class="lineno"> 1385</span>&#160;    <a class="code" href="structarmnn_1_1_i_runtime_1_1_creation_options.xhtml">IRuntime::CreationOptions</a> creationOptions;</div><div class="line"><a name="l01386"></a><span class="lineno"> 1386</span>&#160;    creationOptions.<a class="code" href="structarmnn_1_1_i_runtime_1_1_creation_options.xhtml#ae43cf4b5df0068ee6a9151c98947248b">m_DynamicBackendsPath</a> = <span class="stringliteral">&quot;InvalidPath&quot;</span>;</div><div class="line"><a name="l01387"></a><span class="lineno"> 1387</span>&#160;    <a class="code" href="namespacearmnn.xhtml#a150468a02bd7b2d2d061c4aaaee939f0">IRuntimePtr</a> runtime = IRuntime::Create(creationOptions);</div><div class="line"><a name="l01388"></a><span class="lineno"> 1388</span>&#160;</div><div class="line"><a name="l01389"></a><span class="lineno"> 1389</span>&#160;    <span class="keyword">const</span> <a class="code" href="classarmnn_1_1_backend_registry.xhtml">BackendRegistry</a>&amp; backendRegistry = <a class="code" href="namespacearmnn.xhtml#ac2807505b850738bc8a1991ce669dd47">BackendRegistryInstance</a>();</div><div class="line"><a name="l01390"></a><span class="lineno"> 1390</span>&#160;    BOOST_TEST(backendRegistry.<a class="code" href="classarmnn_1_1_backend_registry.xhtml#a58f4b9e873b7c1c7d512bd9f7d1489d8">Size</a>() == 0);</div><div class="line"><a name="l01391"></a><span class="lineno"> 1391</span>&#160;</div><div class="line"><a name="l01392"></a><span class="lineno"> 1392</span>&#160;    <span class="keyword">const</span> <a class="code" href="classarmnn_1_1_device_spec.xhtml">DeviceSpec</a>&amp; deviceSpec = *PolymorphicDowncast&lt;const DeviceSpec*&gt;(&amp;runtime-&gt;GetDeviceSpec());</div><div class="line"><a name="l01393"></a><span class="lineno"> 1393</span>&#160;    <a class="code" href="namespacearmnn.xhtml#a1854d9cda81304325664363c1fd0fb27">BackendIdSet</a> supportedBackendIds = deviceSpec.<a class="code" href="classarmnn_1_1_device_spec.xhtml#a89d4c29e22db837f787e2171b8a71892">GetSupportedBackends</a>();</div><div class="line"><a name="l01394"></a><span class="lineno"> 1394</span>&#160;    BOOST_TEST(supportedBackendIds.empty());</div><div class="line"><a name="l01395"></a><span class="lineno"> 1395</span>&#160;}</div><div class="line"><a name="l01396"></a><span class="lineno"> 1396</span>&#160;</div><div class="line"><a name="l01397"></a><span class="lineno"> 1397</span>&#160;<span class="preprocessor">#if defined(ARMNNREF_ENABLED)</span></div><div class="line"><a name="l01398"></a><span class="lineno"> 1398</span>&#160;</div><div class="line"><a name="l01399"></a><span class="lineno"> 1399</span>&#160;<span class="comment">// This test unit needs the reference backend, it&#39;s not available if the reference backend is not built</span></div><div class="line"><a name="l01400"></a><span class="lineno"> 1400</span>&#160;</div><div class="line"><a name="l01401"></a><span class="lineno"> 1401</span>&#160;<span class="keywordtype">void</span> CreateReferenceDynamicBackendTestImpl()</div><div class="line"><a name="l01402"></a><span class="lineno"> 1402</span>&#160;{</div><div class="line"><a name="l01403"></a><span class="lineno"> 1403</span>&#160;    <span class="keyword">using namespace </span><a class="code" href="namespacearmnn.xhtml">armnn</a>;</div><div class="line"><a name="l01404"></a><span class="lineno"> 1404</span>&#160;    <span class="keyword">using namespace </span>fs;</div><div class="line"><a name="l01405"></a><span class="lineno"> 1405</span>&#160;</div><div class="line"><a name="l01406"></a><span class="lineno"> 1406</span>&#160;    <span class="comment">// Swapping the backend registry storage for testing</span></div><div class="line"><a name="l01407"></a><span class="lineno"> 1407</span>&#160;    <a class="code" href="class_test_backend_registry.xhtml">TestBackendRegistry</a> testBackendRegistry;</div><div class="line"><a name="l01408"></a><span class="lineno"> 1408</span>&#160;</div><div class="line"><a name="l01409"></a><span class="lineno"> 1409</span>&#160;    <span class="comment">// This directory contains the reference dynamic backend</span></div><div class="line"><a name="l01410"></a><span class="lineno"> 1410</span>&#160;    std::string dynamicBackendsBaseDir = <a class="code" href="_dynamic_backend_tests_8hpp.xhtml#a232b6171adb0f163b616059ba9ddab07">GetDynamicBackendsBasePath</a>();</div><div class="line"><a name="l01411"></a><span class="lineno"> 1411</span>&#160;    std::string referenceDynamicBackendSubDir = <a class="code" href="_dynamic_backend_tests_8hpp.xhtml#aa21b882f38be6940c5c0515db9b69508">GetTestSubDirectory</a>(dynamicBackendsBaseDir,</div><div class="line"><a name="l01412"></a><span class="lineno"> 1412</span>&#160;                                                                    g_ReferenceDynamicBackendSubDir);</div><div class="line"><a name="l01413"></a><span class="lineno"> 1413</span>&#160;    BOOST_CHECK(exists(referenceDynamicBackendSubDir));</div><div class="line"><a name="l01414"></a><span class="lineno"> 1414</span>&#160;</div><div class="line"><a name="l01415"></a><span class="lineno"> 1415</span>&#160;    <span class="comment">// Check that the reference dynamic backend file exists</span></div><div class="line"><a name="l01416"></a><span class="lineno"> 1416</span>&#160;    std::string referenceBackendFilePath = <a class="code" href="_dynamic_backend_tests_8hpp.xhtml#ad01ee94919c8ecfba3b9e4fe89ed6bbe">GetTestFilePath</a>(referenceDynamicBackendSubDir,</div><div class="line"><a name="l01417"></a><span class="lineno"> 1417</span>&#160;                                                           g_ReferenceBackendFileName);</div><div class="line"><a name="l01418"></a><span class="lineno"> 1418</span>&#160;    BOOST_CHECK(exists(referenceBackendFilePath));</div><div class="line"><a name="l01419"></a><span class="lineno"> 1419</span>&#160;</div><div class="line"><a name="l01420"></a><span class="lineno"> 1420</span>&#160;    <span class="comment">// Using the path override in CreationOptions to load the reference dynamic backend</span></div><div class="line"><a name="l01421"></a><span class="lineno"> 1421</span>&#160;    <a class="code" href="structarmnn_1_1_i_runtime_1_1_creation_options.xhtml">IRuntime::CreationOptions</a> creationOptions;</div><div class="line"><a name="l01422"></a><span class="lineno"> 1422</span>&#160;    creationOptions.<a class="code" href="structarmnn_1_1_i_runtime_1_1_creation_options.xhtml#ae43cf4b5df0068ee6a9151c98947248b">m_DynamicBackendsPath</a> = referenceDynamicBackendSubDir;</div><div class="line"><a name="l01423"></a><span class="lineno"> 1423</span>&#160;    <a class="code" href="namespacearmnn.xhtml#a150468a02bd7b2d2d061c4aaaee939f0">IRuntimePtr</a> runtime = IRuntime::Create(creationOptions);</div><div class="line"><a name="l01424"></a><span class="lineno"> 1424</span>&#160;</div><div class="line"><a name="l01425"></a><span class="lineno"> 1425</span>&#160;    <span class="keyword">const</span> <a class="code" href="classarmnn_1_1_backend_registry.xhtml">BackendRegistry</a>&amp; backendRegistry = <a class="code" href="namespacearmnn.xhtml#ac2807505b850738bc8a1991ce669dd47">BackendRegistryInstance</a>();</div><div class="line"><a name="l01426"></a><span class="lineno"> 1426</span>&#160;    BOOST_TEST(backendRegistry.<a class="code" href="classarmnn_1_1_backend_registry.xhtml#a58f4b9e873b7c1c7d512bd9f7d1489d8">Size</a>() == 1);</div><div class="line"><a name="l01427"></a><span class="lineno"> 1427</span>&#160;</div><div class="line"><a name="l01428"></a><span class="lineno"> 1428</span>&#160;    <a class="code" href="namespacearmnn.xhtml#a1854d9cda81304325664363c1fd0fb27">BackendIdSet</a> backendIds = backendRegistry.<a class="code" href="classarmnn_1_1_backend_registry.xhtml#a570cb1835ec73000a7954ba75257904f">GetBackendIds</a>();</div><div class="line"><a name="l01429"></a><span class="lineno"> 1429</span>&#160;    BOOST_TEST((backendIds.find(<span class="stringliteral">&quot;CpuRef&quot;</span>) != backendIds.end()));</div><div class="line"><a name="l01430"></a><span class="lineno"> 1430</span>&#160;</div><div class="line"><a name="l01431"></a><span class="lineno"> 1431</span>&#160;    <span class="keyword">const</span> <a class="code" href="classarmnn_1_1_device_spec.xhtml">DeviceSpec</a>&amp; deviceSpec = *PolymorphicDowncast&lt;const DeviceSpec*&gt;(&amp;runtime-&gt;GetDeviceSpec());</div><div class="line"><a name="l01432"></a><span class="lineno"> 1432</span>&#160;    <a class="code" href="namespacearmnn.xhtml#a1854d9cda81304325664363c1fd0fb27">BackendIdSet</a> supportedBackendIds = deviceSpec.<a class="code" href="classarmnn_1_1_device_spec.xhtml#a89d4c29e22db837f787e2171b8a71892">GetSupportedBackends</a>();</div><div class="line"><a name="l01433"></a><span class="lineno"> 1433</span>&#160;    BOOST_TEST(supportedBackendIds.size() == 1);</div><div class="line"><a name="l01434"></a><span class="lineno"> 1434</span>&#160;    BOOST_TEST((supportedBackendIds.find(<span class="stringliteral">&quot;CpuRef&quot;</span>) != supportedBackendIds.end()));</div><div class="line"><a name="l01435"></a><span class="lineno"> 1435</span>&#160;</div><div class="line"><a name="l01436"></a><span class="lineno"> 1436</span>&#160;    <span class="comment">// Get the factory function</span></div><div class="line"><a name="l01437"></a><span class="lineno"> 1437</span>&#160;    <span class="keyword">auto</span> referenceDynamicBackendFactoryFunction = backendRegistry.<a class="code" href="classarmnn_1_1_backend_registry.xhtml#afc0c63ca8db8957b58826f6d7bd231b2">GetFactory</a>(<span class="stringliteral">&quot;CpuRef&quot;</span>);</div><div class="line"><a name="l01438"></a><span class="lineno"> 1438</span>&#160;    BOOST_TEST((referenceDynamicBackendFactoryFunction != <span class="keyword">nullptr</span>));</div><div class="line"><a name="l01439"></a><span class="lineno"> 1439</span>&#160;</div><div class="line"><a name="l01440"></a><span class="lineno"> 1440</span>&#160;    <span class="comment">// Use the factory function to create an instance of the reference backend</span></div><div class="line"><a name="l01441"></a><span class="lineno"> 1441</span>&#160;    <a class="code" href="namespacearmnn.xhtml#ade0af9dacaa52cafdd701bef2e901c77">IBackendInternalUniquePtr</a> referenceDynamicBackend = referenceDynamicBackendFactoryFunction();</div><div class="line"><a name="l01442"></a><span class="lineno"> 1442</span>&#160;    BOOST_TEST((referenceDynamicBackend != <span class="keyword">nullptr</span>));</div><div class="line"><a name="l01443"></a><span class="lineno"> 1443</span>&#160;    BOOST_TEST((referenceDynamicBackend-&gt;GetId() == <span class="stringliteral">&quot;CpuRef&quot;</span>));</div><div class="line"><a name="l01444"></a><span class="lineno"> 1444</span>&#160;</div><div class="line"><a name="l01445"></a><span class="lineno"> 1445</span>&#160;    <span class="comment">// Test the backend instance by querying the layer support</span></div><div class="line"><a name="l01446"></a><span class="lineno"> 1446</span>&#160;    <a class="code" href="classarmnn_1_1_i_backend_internal.xhtml#a11fa919c11fe46aad613b2e960fcfe90">IBackendInternal::ILayerSupportSharedPtr</a> referenceLayerSupport = referenceDynamicBackend-&gt;GetLayerSupport();</div><div class="line"><a name="l01447"></a><span class="lineno"> 1447</span>&#160;    BOOST_TEST((referenceLayerSupport != <span class="keyword">nullptr</span>));</div><div class="line"><a name="l01448"></a><span class="lineno"> 1448</span>&#160;</div><div class="line"><a name="l01449"></a><span class="lineno"> 1449</span>&#160;    <a class="code" href="classarmnn_1_1_tensor_shape.xhtml">TensorShape</a> inputShape {  1, 16, 16, 16 };</div><div class="line"><a name="l01450"></a><span class="lineno"> 1450</span>&#160;    <a class="code" href="classarmnn_1_1_tensor_shape.xhtml">TensorShape</a> outputShape{  1, 16, 16, 16 };</div><div class="line"><a name="l01451"></a><span class="lineno"> 1451</span>&#160;    <a class="code" href="classarmnn_1_1_tensor_shape.xhtml">TensorShape</a> weightShape{ 16,  1,  1, 16 };</div><div class="line"><a name="l01452"></a><span class="lineno"> 1452</span>&#160;    <a class="code" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a> inputInfo (inputShape,  DataType::Float32);</div><div class="line"><a name="l01453"></a><span class="lineno"> 1453</span>&#160;    <a class="code" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a> outputInfo(outputShape, DataType::Float32);</div><div class="line"><a name="l01454"></a><span class="lineno"> 1454</span>&#160;    <a class="code" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a> weightInfo(weightShape, DataType::Float32);</div><div class="line"><a name="l01455"></a><span class="lineno"> 1455</span>&#160;    <a class="code" href="structarmnn_1_1_convolution2d_descriptor.xhtml">Convolution2dDescriptor</a> convolution2dDescriptor;</div><div class="line"><a name="l01456"></a><span class="lineno"> 1456</span>&#160;    <span class="keywordtype">bool</span> referenceConvolution2dSupported =</div><div class="line"><a name="l01457"></a><span class="lineno"> 1457</span>&#160;            referenceLayerSupport-&gt;IsConvolution2dSupported(inputInfo,</div><div class="line"><a name="l01458"></a><span class="lineno"> 1458</span>&#160;                                                            outputInfo,</div><div class="line"><a name="l01459"></a><span class="lineno"> 1459</span>&#160;                                                            convolution2dDescriptor,</div><div class="line"><a name="l01460"></a><span class="lineno"> 1460</span>&#160;                                                            weightInfo,</div><div class="line"><a name="l01461"></a><span class="lineno"> 1461</span>&#160;                                                            <a class="code" href="structarmnn_1_1_empty_optional.xhtml">EmptyOptional</a>());</div><div class="line"><a name="l01462"></a><span class="lineno"> 1462</span>&#160;    BOOST_TEST(referenceConvolution2dSupported);</div><div class="line"><a name="l01463"></a><span class="lineno"> 1463</span>&#160;</div><div class="line"><a name="l01464"></a><span class="lineno"> 1464</span>&#160;    <span class="comment">// Test the backend instance by creating a workload</span></div><div class="line"><a name="l01465"></a><span class="lineno"> 1465</span>&#160;    <a class="code" href="classarmnn_1_1_i_backend_internal.xhtml#a72ca1cf423bda4b0a9ffb789627126de">IBackendInternal::IWorkloadFactoryPtr</a> referenceWorkloadFactory = referenceDynamicBackend-&gt;CreateWorkloadFactory();</div><div class="line"><a name="l01466"></a><span class="lineno"> 1466</span>&#160;    BOOST_TEST((referenceWorkloadFactory != <span class="keyword">nullptr</span>));</div><div class="line"><a name="l01467"></a><span class="lineno"> 1467</span>&#160;</div><div class="line"><a name="l01468"></a><span class="lineno"> 1468</span>&#160;    <span class="comment">// Create dummy settings for the workload</span></div><div class="line"><a name="l01469"></a><span class="lineno"> 1469</span>&#160;    <a class="code" href="structarmnn_1_1_convolution2d_queue_descriptor.xhtml">Convolution2dQueueDescriptor</a> convolution2dQueueDescriptor;</div><div class="line"><a name="l01470"></a><span class="lineno"> 1470</span>&#160;    <a class="code" href="structarmnn_1_1_workload_info.xhtml">WorkloadInfo</a> workloadInfo</div><div class="line"><a name="l01471"></a><span class="lineno"> 1471</span>&#160;    {</div><div class="line"><a name="l01472"></a><span class="lineno"> 1472</span>&#160;        { inputInfo },</div><div class="line"><a name="l01473"></a><span class="lineno"> 1473</span>&#160;        { outputInfo }</div><div class="line"><a name="l01474"></a><span class="lineno"> 1474</span>&#160;    };</div><div class="line"><a name="l01475"></a><span class="lineno"> 1475</span>&#160;    convolution2dQueueDescriptor.<a class="code" href="structarmnn_1_1_queue_descriptor.xhtml#a4b50e46a6810018f3edecfb68b2a76b3">m_Inputs</a>.push_back(<span class="keyword">nullptr</span>);</div><div class="line"><a name="l01476"></a><span class="lineno"> 1476</span>&#160;    <span class="keyword">auto</span> weights = std::make_unique&lt;ScopedCpuTensorHandle&gt;(weightInfo);</div><div class="line"><a name="l01477"></a><span class="lineno"> 1477</span>&#160;    convolution2dQueueDescriptor.<a class="code" href="structarmnn_1_1_convolution2d_queue_descriptor.xhtml#a3369b66d9316a773a41711e3f590c041">m_Weight</a> = weights.get();</div><div class="line"><a name="l01478"></a><span class="lineno"> 1478</span>&#160;</div><div class="line"><a name="l01479"></a><span class="lineno"> 1479</span>&#160;    <span class="comment">// Create a convolution workload with the dummy settings</span></div><div class="line"><a name="l01480"></a><span class="lineno"> 1480</span>&#160;    <span class="keyword">auto</span> workload = referenceWorkloadFactory-&gt;CreateConvolution2d(convolution2dQueueDescriptor, workloadInfo);</div><div class="line"><a name="l01481"></a><span class="lineno"> 1481</span>&#160;    BOOST_TEST((workload != <span class="keyword">nullptr</span>));</div><div class="line"><a name="l01482"></a><span class="lineno"> 1482</span>&#160;    BOOST_TEST(workload.get() == PolymorphicDowncast&lt;RefConvolution2dWorkload*&gt;(workload.get()));</div><div class="line"><a name="l01483"></a><span class="lineno"> 1483</span>&#160;}</div><div class="line"><a name="l01484"></a><span class="lineno"> 1484</span>&#160;</div><div class="line"><a name="l01485"></a><span class="lineno"> 1485</span>&#160;<span class="preprocessor">#endif</span></div><div class="line"><a name="l01486"></a><span class="lineno"> 1486</span>&#160;</div><div class="line"><a name="l01487"></a><span class="lineno"> 1487</span>&#160;<span class="preprocessor">#if defined(SAMPLE_DYNAMIC_BACKEND_ENABLED)</span></div><div class="line"><a name="l01488"></a><span class="lineno"> 1488</span>&#160;</div><div class="line"><a name="l01489"></a><span class="lineno"> 1489</span>&#160;<span class="keywordtype">void</span> CheckSampleDynamicBackendLoaded()</div><div class="line"><a name="l01490"></a><span class="lineno"> 1490</span>&#160;{</div><div class="line"><a name="l01491"></a><span class="lineno"> 1491</span>&#160;    <span class="keyword">using namespace </span><a class="code" href="namespacearmnn.xhtml">armnn</a>;</div><div class="line"><a name="l01492"></a><span class="lineno"> 1492</span>&#160;    <span class="comment">// At this point we expect DYNAMIC_BACKEND_PATHS to include a path to where libArm_SampleDynamic_backend.so is.</span></div><div class="line"><a name="l01493"></a><span class="lineno"> 1493</span>&#160;    <span class="comment">// If it hasn&#39;t been loaded there&#39;s no point continuing with the rest of the tests.</span></div><div class="line"><a name="l01494"></a><span class="lineno"> 1494</span>&#160;    <a class="code" href="namespacearmnn.xhtml#a1854d9cda81304325664363c1fd0fb27">BackendIdSet</a> backendIds = <a class="code" href="namespacearmnn.xhtml#ac2807505b850738bc8a1991ce669dd47">BackendRegistryInstance</a>().<a class="code" href="classarmnn_1_1_backend_registry.xhtml#a570cb1835ec73000a7954ba75257904f">GetBackendIds</a>();</div><div class="line"><a name="l01495"></a><span class="lineno"> 1495</span>&#160;    <span class="keywordflow">if</span> (backendIds.find(<span class="stringliteral">&quot;SampleDynamic&quot;</span>) == backendIds.end())</div><div class="line"><a name="l01496"></a><span class="lineno"> 1496</span>&#160;    {</div><div class="line"><a name="l01497"></a><span class="lineno"> 1497</span>&#160;        std::string message = <span class="stringliteral">&quot;The SampleDynamic backend has not been loaded. This may be a build configuration error. &quot;</span></div><div class="line"><a name="l01498"></a><span class="lineno"> 1498</span>&#160;                              <span class="stringliteral">&quot;Ensure a DYNAMIC_BACKEND_PATHS was set at compile time to the location of &quot;</span></div><div class="line"><a name="l01499"></a><span class="lineno"> 1499</span>&#160;                              <span class="stringliteral">&quot;libArm_SampleDynamic_backend.so. &quot;</span></div><div class="line"><a name="l01500"></a><span class="lineno"> 1500</span>&#160;                              <span class="stringliteral">&quot;To disable this test recompile with: -DSAMPLE_DYNAMIC_BACKEND_ENABLED=0&quot;</span>;</div><div class="line"><a name="l01501"></a><span class="lineno"> 1501</span>&#160;        BOOST_FAIL(message);</div><div class="line"><a name="l01502"></a><span class="lineno"> 1502</span>&#160;    }</div><div class="line"><a name="l01503"></a><span class="lineno"> 1503</span>&#160;}</div><div class="line"><a name="l01504"></a><span class="lineno"> 1504</span>&#160;</div><div class="line"><a name="l01505"></a><span class="lineno"> 1505</span>&#160;<span class="keywordtype">void</span> CreateSampleDynamicBackendTestImpl()</div><div class="line"><a name="l01506"></a><span class="lineno"> 1506</span>&#160;{</div><div class="line"><a name="l01507"></a><span class="lineno"> 1507</span>&#160;    <span class="keyword">using namespace </span><a class="code" href="namespacearmnn.xhtml">armnn</a>;</div><div class="line"><a name="l01508"></a><span class="lineno"> 1508</span>&#160;    <span class="comment">// Using the path override in CreationOptions to load the reference dynamic backend</span></div><div class="line"><a name="l01509"></a><span class="lineno"> 1509</span>&#160;    <a class="code" href="structarmnn_1_1_i_runtime_1_1_creation_options.xhtml">IRuntime::CreationOptions</a> creationOptions;</div><div class="line"><a name="l01510"></a><span class="lineno"> 1510</span>&#160;    <a class="code" href="namespacearmnn.xhtml#a150468a02bd7b2d2d061c4aaaee939f0">IRuntimePtr</a> runtime = IRuntime::Create(creationOptions);</div><div class="line"><a name="l01511"></a><span class="lineno"> 1511</span>&#160;    <span class="keyword">const</span> <a class="code" href="classarmnn_1_1_backend_registry.xhtml">BackendRegistry</a>&amp; backendRegistry = <a class="code" href="namespacearmnn.xhtml#ac2807505b850738bc8a1991ce669dd47">BackendRegistryInstance</a>();</div><div class="line"><a name="l01512"></a><span class="lineno"> 1512</span>&#160;    BOOST_TEST(backendRegistry.<a class="code" href="classarmnn_1_1_backend_registry.xhtml#a58f4b9e873b7c1c7d512bd9f7d1489d8">Size</a>() &gt;= 1);</div><div class="line"><a name="l01513"></a><span class="lineno"> 1513</span>&#160;    CheckSampleDynamicBackendLoaded();</div><div class="line"><a name="l01514"></a><span class="lineno"> 1514</span>&#160;    <span class="keyword">const</span> <a class="code" href="classarmnn_1_1_device_spec.xhtml">DeviceSpec</a>&amp; deviceSpec = *PolymorphicDowncast&lt;const DeviceSpec*&gt;(&amp;runtime-&gt;GetDeviceSpec());</div><div class="line"><a name="l01515"></a><span class="lineno"> 1515</span>&#160;    <a class="code" href="namespacearmnn.xhtml#a1854d9cda81304325664363c1fd0fb27">BackendIdSet</a> supportedBackendIds = deviceSpec.<a class="code" href="classarmnn_1_1_device_spec.xhtml#a89d4c29e22db837f787e2171b8a71892">GetSupportedBackends</a>();</div><div class="line"><a name="l01516"></a><span class="lineno"> 1516</span>&#160;    BOOST_TEST(supportedBackendIds.size()&gt;= 1);</div><div class="line"><a name="l01517"></a><span class="lineno"> 1517</span>&#160;    BOOST_TEST((supportedBackendIds.find(<span class="stringliteral">&quot;SampleDynamic&quot;</span>) != supportedBackendIds.end()));</div><div class="line"><a name="l01518"></a><span class="lineno"> 1518</span>&#160;</div><div class="line"><a name="l01519"></a><span class="lineno"> 1519</span>&#160;    <span class="comment">// Get the factory function</span></div><div class="line"><a name="l01520"></a><span class="lineno"> 1520</span>&#160;    <span class="keyword">auto</span> sampleDynamicBackendFactoryFunction = backendRegistry.<a class="code" href="classarmnn_1_1_backend_registry.xhtml#afc0c63ca8db8957b58826f6d7bd231b2">GetFactory</a>(<span class="stringliteral">&quot;SampleDynamic&quot;</span>);</div><div class="line"><a name="l01521"></a><span class="lineno"> 1521</span>&#160;    BOOST_TEST((sampleDynamicBackendFactoryFunction != <span class="keyword">nullptr</span>));</div><div class="line"><a name="l01522"></a><span class="lineno"> 1522</span>&#160;</div><div class="line"><a name="l01523"></a><span class="lineno"> 1523</span>&#160;    <span class="comment">// Use the factory function to create an instance of the dynamic backend</span></div><div class="line"><a name="l01524"></a><span class="lineno"> 1524</span>&#160;    <a class="code" href="namespacearmnn.xhtml#ade0af9dacaa52cafdd701bef2e901c77">IBackendInternalUniquePtr</a> sampleDynamicBackend = sampleDynamicBackendFactoryFunction();</div><div class="line"><a name="l01525"></a><span class="lineno"> 1525</span>&#160;    BOOST_TEST((sampleDynamicBackend != <span class="keyword">nullptr</span>));</div><div class="line"><a name="l01526"></a><span class="lineno"> 1526</span>&#160;    BOOST_TEST((sampleDynamicBackend-&gt;GetId() == <span class="stringliteral">&quot;SampleDynamic&quot;</span>));</div><div class="line"><a name="l01527"></a><span class="lineno"> 1527</span>&#160;</div><div class="line"><a name="l01528"></a><span class="lineno"> 1528</span>&#160;    <span class="comment">// Test the backend instance by querying the layer support</span></div><div class="line"><a name="l01529"></a><span class="lineno"> 1529</span>&#160;    <a class="code" href="classarmnn_1_1_i_backend_internal.xhtml#a11fa919c11fe46aad613b2e960fcfe90">IBackendInternal::ILayerSupportSharedPtr</a> sampleLayerSupport = sampleDynamicBackend-&gt;GetLayerSupport();</div><div class="line"><a name="l01530"></a><span class="lineno"> 1530</span>&#160;    BOOST_TEST((sampleLayerSupport != <span class="keyword">nullptr</span>));</div><div class="line"><a name="l01531"></a><span class="lineno"> 1531</span>&#160;</div><div class="line"><a name="l01532"></a><span class="lineno"> 1532</span>&#160;    <a class="code" href="classarmnn_1_1_tensor_shape.xhtml">TensorShape</a> inputShape {  1, 16, 16, 16 };</div><div class="line"><a name="l01533"></a><span class="lineno"> 1533</span>&#160;    <a class="code" href="classarmnn_1_1_tensor_shape.xhtml">TensorShape</a> outputShape{  1, 16, 16, 16 };</div><div class="line"><a name="l01534"></a><span class="lineno"> 1534</span>&#160;    <a class="code" href="classarmnn_1_1_tensor_shape.xhtml">TensorShape</a> weightShape{ 16,  1,  1, 16 };</div><div class="line"><a name="l01535"></a><span class="lineno"> 1535</span>&#160;    <a class="code" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a> inputInfo (inputShape,  DataType::Float32);</div><div class="line"><a name="l01536"></a><span class="lineno"> 1536</span>&#160;    <a class="code" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a> outputInfo(outputShape, DataType::Float32);</div><div class="line"><a name="l01537"></a><span class="lineno"> 1537</span>&#160;    <a class="code" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a> weightInfo(weightShape, DataType::Float32);</div><div class="line"><a name="l01538"></a><span class="lineno"> 1538</span>&#160;    <a class="code" href="structarmnn_1_1_convolution2d_descriptor.xhtml">Convolution2dDescriptor</a> convolution2dDescriptor;</div><div class="line"><a name="l01539"></a><span class="lineno"> 1539</span>&#160;    <span class="keywordtype">bool</span> sampleConvolution2dSupported =</div><div class="line"><a name="l01540"></a><span class="lineno"> 1540</span>&#160;            sampleLayerSupport-&gt;IsConvolution2dSupported(inputInfo,</div><div class="line"><a name="l01541"></a><span class="lineno"> 1541</span>&#160;                                                         outputInfo,</div><div class="line"><a name="l01542"></a><span class="lineno"> 1542</span>&#160;                                                         convolution2dDescriptor,</div><div class="line"><a name="l01543"></a><span class="lineno"> 1543</span>&#160;                                                         weightInfo,</div><div class="line"><a name="l01544"></a><span class="lineno"> 1544</span>&#160;                                                         <a class="code" href="structarmnn_1_1_empty_optional.xhtml">EmptyOptional</a>());</div><div class="line"><a name="l01545"></a><span class="lineno"> 1545</span>&#160;    BOOST_TEST(!sampleConvolution2dSupported);</div><div class="line"><a name="l01546"></a><span class="lineno"> 1546</span>&#160;</div><div class="line"><a name="l01547"></a><span class="lineno"> 1547</span>&#160;    <span class="comment">// Test the backend instance by creating a workload</span></div><div class="line"><a name="l01548"></a><span class="lineno"> 1548</span>&#160;    <a class="code" href="classarmnn_1_1_i_backend_internal.xhtml#a72ca1cf423bda4b0a9ffb789627126de">IBackendInternal::IWorkloadFactoryPtr</a> sampleWorkloadFactory = sampleDynamicBackend-&gt;CreateWorkloadFactory();</div><div class="line"><a name="l01549"></a><span class="lineno"> 1549</span>&#160;    BOOST_TEST((sampleWorkloadFactory != <span class="keyword">nullptr</span>));</div><div class="line"><a name="l01550"></a><span class="lineno"> 1550</span>&#160;</div><div class="line"><a name="l01551"></a><span class="lineno"> 1551</span>&#160;    <span class="comment">// Create dummy settings for the workload</span></div><div class="line"><a name="l01552"></a><span class="lineno"> 1552</span>&#160;    <a class="code" href="structarmnn_1_1_addition_queue_descriptor.xhtml">AdditionQueueDescriptor</a> additionQueueDescriptor;</div><div class="line"><a name="l01553"></a><span class="lineno"> 1553</span>&#160;    <a class="code" href="structarmnn_1_1_workload_info.xhtml">WorkloadInfo</a> workloadInfo</div><div class="line"><a name="l01554"></a><span class="lineno"> 1554</span>&#160;    {</div><div class="line"><a name="l01555"></a><span class="lineno"> 1555</span>&#160;        { inputInfo, inputInfo },</div><div class="line"><a name="l01556"></a><span class="lineno"> 1556</span>&#160;        { outputInfo }</div><div class="line"><a name="l01557"></a><span class="lineno"> 1557</span>&#160;    };</div><div class="line"><a name="l01558"></a><span class="lineno"> 1558</span>&#160;</div><div class="line"><a name="l01559"></a><span class="lineno"> 1559</span>&#160;    <span class="comment">// Create a addition workload</span></div><div class="line"><a name="l01560"></a><span class="lineno"> 1560</span>&#160;    <span class="keyword">auto</span> workload = sampleWorkloadFactory-&gt;CreateAddition(additionQueueDescriptor, workloadInfo);</div><div class="line"><a name="l01561"></a><span class="lineno"> 1561</span>&#160;    BOOST_TEST((workload != <span class="keyword">nullptr</span>));</div><div class="line"><a name="l01562"></a><span class="lineno"> 1562</span>&#160;}</div><div class="line"><a name="l01563"></a><span class="lineno"> 1563</span>&#160;</div><div class="line"><a name="l01564"></a><span class="lineno"> 1564</span>&#160;<span class="keywordtype">void</span> SampleDynamicBackendEndToEndTestImpl()</div><div class="line"><a name="l01565"></a><span class="lineno"> 1565</span>&#160;{</div><div class="line"><a name="l01566"></a><span class="lineno"> 1566</span>&#160;    <span class="keyword">using namespace </span><a class="code" href="namespacearmnn.xhtml">armnn</a>;</div><div class="line"><a name="l01567"></a><span class="lineno"> 1567</span>&#160;    <span class="comment">// Create runtime in which test will run</span></div><div class="line"><a name="l01568"></a><span class="lineno"> 1568</span>&#160;    <a class="code" href="structarmnn_1_1_i_runtime_1_1_creation_options.xhtml">IRuntime::CreationOptions</a> options;</div><div class="line"><a name="l01569"></a><span class="lineno"> 1569</span>&#160;    <a class="code" href="namespacearmnn.xhtml#a150468a02bd7b2d2d061c4aaaee939f0">IRuntimePtr</a> runtime(IRuntime::Create(options));</div><div class="line"><a name="l01570"></a><span class="lineno"> 1570</span>&#160;    CheckSampleDynamicBackendLoaded();</div><div class="line"><a name="l01571"></a><span class="lineno"> 1571</span>&#160;    <span class="comment">// Builds up the structure of the network.</span></div><div class="line"><a name="l01572"></a><span class="lineno"> 1572</span>&#160;    <a class="code" href="namespacearmnn.xhtml#ace74f6f9feb95a964a49d79458232703">INetworkPtr</a> net(INetwork::Create());</div><div class="line"><a name="l01573"></a><span class="lineno"> 1573</span>&#160;</div><div class="line"><a name="l01574"></a><span class="lineno"> 1574</span>&#160;    <a class="code" href="classarmnn_1_1_i_connectable_layer.xhtml">IConnectableLayer</a>* input0 = net-&gt;AddInputLayer(0);</div><div class="line"><a name="l01575"></a><span class="lineno"> 1575</span>&#160;    <a class="code" href="classarmnn_1_1_i_connectable_layer.xhtml">IConnectableLayer</a>* input1 = net-&gt;AddInputLayer(1);</div><div class="line"><a name="l01576"></a><span class="lineno"> 1576</span>&#160;    <a class="code" href="classarmnn_1_1_i_connectable_layer.xhtml">IConnectableLayer</a>* add = net-&gt;AddAdditionLayer();</div><div class="line"><a name="l01577"></a><span class="lineno"> 1577</span>&#160;    <a class="code" href="classarmnn_1_1_i_connectable_layer.xhtml">IConnectableLayer</a>* output = net-&gt;AddOutputLayer(0);</div><div class="line"><a name="l01578"></a><span class="lineno"> 1578</span>&#160;</div><div class="line"><a name="l01579"></a><span class="lineno"> 1579</span>&#160;    input0-&gt;<a class="code" href="classarmnn_1_1_i_connectable_layer.xhtml#a80ac4eda2e7f2757ec9dd96fc96dbd16">GetOutputSlot</a>(0).<a class="code" href="classarmnn_1_1_i_output_slot.xhtml#ac1835f8756a9f03c02fcf9664e3a0fce">Connect</a>(add-&gt;<a class="code" href="classarmnn_1_1_i_connectable_layer.xhtml#a6ec9e0eb66d7d6a01240492a0b18104c">GetInputSlot</a>(0));</div><div class="line"><a name="l01580"></a><span class="lineno"> 1580</span>&#160;    input1-&gt;<a class="code" href="classarmnn_1_1_i_connectable_layer.xhtml#a80ac4eda2e7f2757ec9dd96fc96dbd16">GetOutputSlot</a>(0).<a class="code" href="classarmnn_1_1_i_output_slot.xhtml#ac1835f8756a9f03c02fcf9664e3a0fce">Connect</a>(add-&gt;<a class="code" href="classarmnn_1_1_i_connectable_layer.xhtml#a6ec9e0eb66d7d6a01240492a0b18104c">GetInputSlot</a>(1));</div><div class="line"><a name="l01581"></a><span class="lineno"> 1581</span>&#160;    add-&gt;<a class="code" href="classarmnn_1_1_i_connectable_layer.xhtml#a80ac4eda2e7f2757ec9dd96fc96dbd16">GetOutputSlot</a>(0).<a class="code" href="classarmnn_1_1_i_output_slot.xhtml#ac1835f8756a9f03c02fcf9664e3a0fce">Connect</a>(output-&gt;<a class="code" href="classarmnn_1_1_i_connectable_layer.xhtml#a6ec9e0eb66d7d6a01240492a0b18104c">GetInputSlot</a>(0));</div><div class="line"><a name="l01582"></a><span class="lineno"> 1582</span>&#160;</div><div class="line"><a name="l01583"></a><span class="lineno"> 1583</span>&#160;    <a class="code" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a> tensorInfo(<a class="code" href="classarmnn_1_1_tensor_shape.xhtml">TensorShape</a>({2, 1}), DataType::Float32);</div><div class="line"><a name="l01584"></a><span class="lineno"> 1584</span>&#160;    input0-&gt;<a class="code" href="classarmnn_1_1_i_connectable_layer.xhtml#a80ac4eda2e7f2757ec9dd96fc96dbd16">GetOutputSlot</a>(0).<a class="code" href="classarmnn_1_1_i_output_slot.xhtml#a5ee4a6c9a2481245487b1b1a70d20fd0">SetTensorInfo</a>(tensorInfo);</div><div class="line"><a name="l01585"></a><span class="lineno"> 1585</span>&#160;    input1-&gt;<a class="code" href="classarmnn_1_1_i_connectable_layer.xhtml#a80ac4eda2e7f2757ec9dd96fc96dbd16">GetOutputSlot</a>(0).<a class="code" href="classarmnn_1_1_i_output_slot.xhtml#a5ee4a6c9a2481245487b1b1a70d20fd0">SetTensorInfo</a>(tensorInfo);</div><div class="line"><a name="l01586"></a><span class="lineno"> 1586</span>&#160;    add-&gt;<a class="code" href="classarmnn_1_1_i_connectable_layer.xhtml#a80ac4eda2e7f2757ec9dd96fc96dbd16">GetOutputSlot</a>(0).<a class="code" href="classarmnn_1_1_i_output_slot.xhtml#a5ee4a6c9a2481245487b1b1a70d20fd0">SetTensorInfo</a>(tensorInfo);</div><div class="line"><a name="l01587"></a><span class="lineno"> 1587</span>&#160;</div><div class="line"><a name="l01588"></a><span class="lineno"> 1588</span>&#160;    <span class="comment">// optimize the network</span></div><div class="line"><a name="l01589"></a><span class="lineno"> 1589</span>&#160;    <a class="code" href="namespacearmnn.xhtml#a674efcf6cbdb9e831d653ff0e821fb38">IOptimizedNetworkPtr</a> optNet = <a class="code" href="namespacearmnn.xhtml#a82e98ef05fd67036d1195ba17174d685">Optimize</a>(*net, {<span class="stringliteral">&quot;SampleDynamic&quot;</span>}, runtime-&gt;GetDeviceSpec());</div><div class="line"><a name="l01590"></a><span class="lineno"> 1590</span>&#160;</div><div class="line"><a name="l01591"></a><span class="lineno"> 1591</span>&#160;    <span class="comment">// Loads it into the runtime.</span></div><div class="line"><a name="l01592"></a><span class="lineno"> 1592</span>&#160;    <a class="code" href="namespacearmnn.xhtml#a83015160d8c67d5d77735eb0d4033d9a">NetworkId</a> netId;</div><div class="line"><a name="l01593"></a><span class="lineno"> 1593</span>&#160;    runtime-&gt;LoadNetwork(netId, std::move(optNet));</div><div class="line"><a name="l01594"></a><span class="lineno"> 1594</span>&#160;</div><div class="line"><a name="l01595"></a><span class="lineno"> 1595</span>&#160;    std::vector&lt;float&gt; input0Data{ 5.0f, 3.0f };</div><div class="line"><a name="l01596"></a><span class="lineno"> 1596</span>&#160;    std::vector&lt;float&gt; input1Data{ 10.0f, 8.0f };</div><div class="line"><a name="l01597"></a><span class="lineno"> 1597</span>&#160;    std::vector&lt;float&gt; expectedOutputData{ 15.0f, 11.0f };</div><div class="line"><a name="l01598"></a><span class="lineno"> 1598</span>&#160;    std::vector&lt;float&gt; outputData(2);</div><div class="line"><a name="l01599"></a><span class="lineno"> 1599</span>&#160;</div><div class="line"><a name="l01600"></a><span class="lineno"> 1600</span>&#160;    <a class="code" href="namespacearmnn.xhtml#aa01bce88f89975a5a031db4cc8861527">InputTensors</a> inputTensors</div><div class="line"><a name="l01601"></a><span class="lineno"> 1601</span>&#160;        {</div><div class="line"><a name="l01602"></a><span class="lineno"> 1602</span>&#160;            {0,<a class="code" href="classarmnn_1_1_const_tensor.xhtml">armnn::ConstTensor</a>(runtime-&gt;GetInputTensorInfo(netId, 0), input0Data.data())},</div><div class="line"><a name="l01603"></a><span class="lineno"> 1603</span>&#160;            {1,<a class="code" href="classarmnn_1_1_const_tensor.xhtml">armnn::ConstTensor</a>(runtime-&gt;GetInputTensorInfo(netId, 0), input1Data.data())}</div><div class="line"><a name="l01604"></a><span class="lineno"> 1604</span>&#160;        };</div><div class="line"><a name="l01605"></a><span class="lineno"> 1605</span>&#160;    <a class="code" href="namespacearmnn.xhtml#a8f091a512915d1cb29a4ebf13dfc53ea">OutputTensors</a> outputTensors</div><div class="line"><a name="l01606"></a><span class="lineno"> 1606</span>&#160;        {</div><div class="line"><a name="l01607"></a><span class="lineno"> 1607</span>&#160;            {0,<a class="code" href="classarmnn_1_1_tensor.xhtml">armnn::Tensor</a>(runtime-&gt;GetOutputTensorInfo(netId, 0), outputData.data())}</div><div class="line"><a name="l01608"></a><span class="lineno"> 1608</span>&#160;        };</div><div class="line"><a name="l01609"></a><span class="lineno"> 1609</span>&#160;</div><div class="line"><a name="l01610"></a><span class="lineno"> 1610</span>&#160;    <span class="comment">// Does the inference.</span></div><div class="line"><a name="l01611"></a><span class="lineno"> 1611</span>&#160;    runtime-&gt;EnqueueWorkload(netId, inputTensors, outputTensors);</div><div class="line"><a name="l01612"></a><span class="lineno"> 1612</span>&#160;</div><div class="line"><a name="l01613"></a><span class="lineno"> 1613</span>&#160;    <span class="comment">// Checks the results.</span></div><div class="line"><a name="l01614"></a><span class="lineno"> 1614</span>&#160;    BOOST_TEST(outputData == expectedOutputData);</div><div class="line"><a name="l01615"></a><span class="lineno"> 1615</span>&#160;}</div><div class="line"><a name="l01616"></a><span class="lineno"> 1616</span>&#160;<span class="preprocessor">#endif</span></div><div class="ttc" id="_dynamic_backend_tests_8hpp_xhtml_a7d05c0a2fbb1faaeb5d98aa10bfa5cbf"><div class="ttname"><a href="_dynamic_backend_tests_8hpp.xhtml#a7d05c0a2fbb1faaeb5d98aa10bfa5cbf">GetNameMangledEntryPointTestImpl</a></div><div class="ttdeci">void GetNameMangledEntryPointTestImpl()</div><div class="ttdef"><b>Definition:</b> <a href="_dynamic_backend_tests_8hpp_source.xhtml#l00273">DynamicBackendTests.hpp:273</a></div></div>
<div class="ttc" id="_dynamic_backend_tests_8hpp_xhtml_a2ea23607d9c0b55b90744e9e5f74e7f2"><div class="ttname"><a href="_dynamic_backend_tests_8hpp.xhtml#a2ea23607d9c0b55b90744e9e5f74e7f2">GetNoExternEntryPointTestImpl</a></div><div class="ttdeci">void GetNoExternEntryPointTestImpl()</div><div class="ttdef"><b>Definition:</b> <a href="_dynamic_backend_tests_8hpp_source.xhtml#l00294">DynamicBackendTests.hpp:294</a></div></div>
<div class="ttc" id="_dynamic_backend_tests_8hpp_xhtml_a736bd70a8662a4f3679054a2b2cfaa11"><div class="ttname"><a href="_dynamic_backend_tests_8hpp.xhtml#a736bd70a8662a4f3679054a2b2cfaa11">GetSharedObjectsTestImpl</a></div><div class="ttdeci">void GetSharedObjectsTestImpl()</div><div class="ttdef"><b>Definition:</b> <a href="_dynamic_backend_tests_8hpp_source.xhtml#l00703">DynamicBackendTests.hpp:703</a></div></div>
<div class="ttc" id="_dynamic_backend_tests_8hpp_xhtml_a40efe1578a402125bd0efbc29eecb225"><div class="ttname"><a href="_dynamic_backend_tests_8hpp.xhtml#a40efe1578a402125bd0efbc29eecb225">CreateDynamicBackendsNoPathsTestImpl</a></div><div class="ttdeci">void CreateDynamicBackendsNoPathsTestImpl()</div><div class="ttdef"><b>Definition:</b> <a href="_dynamic_backend_tests_8hpp_source.xhtml#l00857">DynamicBackendTests.hpp:857</a></div></div>
<div class="ttc" id="class_test_dynamic_backend_utils_xhtml_a304e5c5c5afc70590df8927e144fbaa5"><div class="ttname"><a href="class_test_dynamic_backend_utils.xhtml#a304e5c5c5afc70590df8927e144fbaa5">TestDynamicBackendUtils::RegisterDynamicBackendsImplTest</a></div><div class="ttdeci">static armnn::BackendIdSet RegisterDynamicBackendsImplTest(armnn::BackendRegistry &amp;backendRegistry, const std::vector&lt; armnn::DynamicBackendPtr &gt; &amp;dynamicBackends)</div><div class="ttdef"><b>Definition:</b> <a href="_dynamic_backend_tests_8hpp_source.xhtml#l00083">DynamicBackendTests.hpp:83</a></div></div>
<div class="ttc" id="classarmnn_1_1_backend_registry_xhtml_afc0c63ca8db8957b58826f6d7bd231b2"><div class="ttname"><a href="classarmnn_1_1_backend_registry.xhtml#afc0c63ca8db8957b58826f6d7bd231b2">armnn::BackendRegistry::GetFactory</a></div><div class="ttdeci">FactoryFunction GetFactory(const BackendId &amp;id) const</div><div class="ttdef"><b>Definition:</b> <a href="_backend_registry_8cpp_source.xhtml#l00054">BackendRegistry.cpp:54</a></div></div>
<div class="ttc" id="classarmnn_1_1_i_backend_internal_xhtml_a72ca1cf423bda4b0a9ffb789627126de"><div class="ttname"><a href="classarmnn_1_1_i_backend_internal.xhtml#a72ca1cf423bda4b0a9ffb789627126de">armnn::IBackendInternal::IWorkloadFactoryPtr</a></div><div class="ttdeci">std::unique_ptr&lt; IWorkloadFactory &gt; IWorkloadFactoryPtr</div><div class="ttdef"><b>Definition:</b> <a href="include_2armnn_2backends_2_i_backend_internal_8hpp_source.xhtml#l00080">IBackendInternal.hpp:80</a></div></div>
<div class="ttc" id="classarmnn_1_1_i_connectable_layer_xhtml"><div class="ttname"><a href="classarmnn_1_1_i_connectable_layer.xhtml">armnn::IConnectableLayer</a></div><div class="ttdoc">Interface for a layer that is connectable to other layers via InputSlots and OutputSlots. </div><div class="ttdef"><b>Definition:</b> <a href="_i_network_8hpp_source.xhtml#l00062">INetwork.hpp:62</a></div></div>
<div class="ttc" id="classarmnn_1_1_backend_registry_xhtml_a570cb1835ec73000a7954ba75257904f"><div class="ttname"><a href="classarmnn_1_1_backend_registry.xhtml#a570cb1835ec73000a7954ba75257904f">armnn::BackendRegistry::GetBackendIds</a></div><div class="ttdeci">BackendIdSet GetBackendIds() const</div><div class="ttdef"><b>Definition:</b> <a href="_backend_registry_8cpp_source.xhtml#l00072">BackendRegistry.cpp:72</a></div></div>
<div class="ttc" id="_dynamic_backend_tests_8hpp_xhtml_a47d1d68ab62ac387a9d8253d08260fc4"><div class="ttname"><a href="_dynamic_backend_tests_8hpp.xhtml#a47d1d68ab62ac387a9d8253d08260fc4">CreateDynamicBackendObjectInvalidInterface3TestImpl</a></div><div class="ttdeci">void CreateDynamicBackendObjectInvalidInterface3TestImpl()</div><div class="ttdef"><b>Definition:</b> <a href="_dynamic_backend_tests_8hpp_source.xhtml#l00479">DynamicBackendTests.hpp:479</a></div></div>
<div class="ttc" id="classarmnn_1_1_backend_registry_xhtml_aa33ac375677ee8436456a585dd6f68d9"><div class="ttname"><a href="classarmnn_1_1_backend_registry.xhtml#aa33ac375677ee8436456a585dd6f68d9">armnn::BackendRegistry::FactoryFunction</a></div><div class="ttdeci">std::function&lt; PointerType()&gt; FactoryFunction</div><div class="ttdef"><b>Definition:</b> <a href="_backend_registry_8hpp_source.xhtml#l00029">BackendRegistry.hpp:29</a></div></div>
<div class="ttc" id="_dynamic_backend_tests_8hpp_xhtml_aa21b882f38be6940c5c0515db9b69508"><div class="ttname"><a href="_dynamic_backend_tests_8hpp.xhtml#aa21b882f38be6940c5c0515db9b69508">GetTestSubDirectory</a></div><div class="ttdeci">std::string GetTestSubDirectory(const std::string &amp;subdir)</div><div class="ttdef"><b>Definition:</b> <a href="_dynamic_backend_tests_8hpp_source.xhtml#l00166">DynamicBackendTests.hpp:166</a></div></div>
<div class="ttc" id="namespacearmnn_xhtml_a1854d9cda81304325664363c1fd0fb27"><div class="ttname"><a href="namespacearmnn.xhtml#a1854d9cda81304325664363c1fd0fb27">armnn::BackendIdSet</a></div><div class="ttdeci">std::unordered_set&lt; BackendId &gt; BackendIdSet</div><div class="ttdef"><b>Definition:</b> <a href="_backend_id_8hpp_source.xhtml#l00191">BackendId.hpp:191</a></div></div>
<div class="ttc" id="_dynamic_backend_tests_8hpp_xhtml_ae6308c78a8fdab82f4929b07dc439cd9"><div class="ttname"><a href="_dynamic_backend_tests_8hpp.xhtml#ae6308c78a8fdab82f4929b07dc439cd9">CreateDynamicBackendsAllInvalidTestImpl</a></div><div class="ttdeci">void CreateDynamicBackendsAllInvalidTestImpl()</div><div class="ttdef"><b>Definition:</b> <a href="_dynamic_backend_tests_8hpp_source.xhtml#l00866">DynamicBackendTests.hpp:866</a></div></div>
<div class="ttc" id="classarmnn_1_1_tensor_info_xhtml"><div class="ttname"><a href="classarmnn_1_1_tensor_info.xhtml">armnn::TensorInfo</a></div><div class="ttdef"><b>Definition:</b> <a href="_tensor_8hpp_source.xhtml#l00152">Tensor.hpp:152</a></div></div>
<div class="ttc" id="classarmnn_1_1_device_spec_xhtml"><div class="ttname"><a href="classarmnn_1_1_device_spec.xhtml">armnn::DeviceSpec</a></div><div class="ttdef"><b>Definition:</b> <a href="_device_spec_8hpp_source.xhtml#l00014">DeviceSpec.hpp:14</a></div></div>
<div class="ttc" id="classarmnn_1_1_dynamic_backend_utils_xhtml_a6789076aa25c6a10faeff1043359bda8"><div class="ttname"><a href="classarmnn_1_1_dynamic_backend_utils.xhtml#a6789076aa25c6a10faeff1043359bda8">armnn::DynamicBackendUtils::IsBackendCompatible</a></div><div class="ttdeci">static bool IsBackendCompatible(const BackendVersion &amp;backendVersion)</div><div class="ttdef"><b>Definition:</b> <a href="_dynamic_backend_utils_8cpp_source.xhtml#l00050">DynamicBackendUtils.cpp:50</a></div></div>
<div class="ttc" id="_ref_convolution2d_workload_8hpp_xhtml"><div class="ttname"><a href="_ref_convolution2d_workload_8hpp.xhtml">RefConvolution2dWorkload.hpp</a></div></div>
<div class="ttc" id="_dynamic_backend_tests_8hpp_xhtml_a6f750fea35638f0442885edb837b5d16"><div class="ttname"><a href="_dynamic_backend_tests_8hpp.xhtml#a6f750fea35638f0442885edb837b5d16">OpenNotSharedObjectTestImpl</a></div><div class="ttdeci">void OpenNotSharedObjectTestImpl()</div><div class="ttdef"><b>Definition:</b> <a href="_dynamic_backend_tests_8hpp_source.xhtml#l00240">DynamicBackendTests.hpp:240</a></div></div>
<div class="ttc" id="structarmnn_1_1_convolution2d_descriptor_xhtml"><div class="ttname"><a href="structarmnn_1_1_convolution2d_descriptor.xhtml">armnn::Convolution2dDescriptor</a></div><div class="ttdoc">A Convolution2dDescriptor for the Convolution2dLayer. </div><div class="ttdef"><b>Definition:</b> <a href="_descriptors_8hpp_source.xhtml#l00408">Descriptors.hpp:408</a></div></div>
<div class="ttc" id="_runtime_8hpp_xhtml"><div class="ttname"><a href="_runtime_8hpp.xhtml">Runtime.hpp</a></div></div>
<div class="ttc" id="_dynamic_backend_tests_8hpp_xhtml_aaa09188eec988bf3318fbcff3d07dd97"><div class="ttname"><a href="_dynamic_backend_tests_8hpp.xhtml#aaa09188eec988bf3318fbcff3d07dd97">GetTestDirectoryBasePath</a></div><div class="ttdeci">std::string GetTestDirectoryBasePath()</div><div class="ttdef"><b>Definition:</b> <a href="_dynamic_backend_tests_8hpp_source.xhtml#l00156">DynamicBackendTests.hpp:156</a></div></div>
<div class="ttc" id="namespacearmnn_xhtml_a150468a02bd7b2d2d061c4aaaee939f0"><div class="ttname"><a href="namespacearmnn.xhtml#a150468a02bd7b2d2d061c4aaaee939f0">armnn::IRuntimePtr</a></div><div class="ttdeci">std::unique_ptr&lt; IRuntime, void(*)(IRuntime *runtime)&gt; IRuntimePtr</div><div class="ttdef"><b>Definition:</b> <a href="_i_runtime_8hpp_source.xhtml#l00026">IRuntime.hpp:26</a></div></div>
<div class="ttc" id="classarmnn_1_1_backend_registry_xhtml_a20fb10b59fccc99291e7fe993cd814bb"><div class="ttname"><a href="classarmnn_1_1_backend_registry.xhtml#a20fb10b59fccc99291e7fe993cd814bb">armnn::BackendRegistry::FactoryStorage</a></div><div class="ttdeci">std::unordered_map&lt; BackendId, FactoryFunction &gt; FactoryStorage</div><div class="ttdef"><b>Definition:</b> <a href="_backend_registry_8hpp_source.xhtml#l00055">BackendRegistry.hpp:55</a></div></div>
<div class="ttc" id="classarmnn_1_1_dynamic_backend_xhtml"><div class="ttname"><a href="classarmnn_1_1_dynamic_backend.xhtml">armnn::DynamicBackend</a></div><div class="ttdef"><b>Definition:</b> <a href="include_2armnn_2backends_2_dynamic_backend_8hpp_source.xhtml#l00018">DynamicBackend.hpp:18</a></div></div>
<div class="ttc" id="namespacearmnn_xhtml_ac2807505b850738bc8a1991ce669dd47"><div class="ttname"><a href="namespacearmnn.xhtml#ac2807505b850738bc8a1991ce669dd47">armnn::BackendRegistryInstance</a></div><div class="ttdeci">BackendRegistry &amp; BackendRegistryInstance()</div><div class="ttdef"><b>Definition:</b> <a href="_backend_registry_8cpp_source.xhtml#l00013">BackendRegistry.cpp:13</a></div></div>
<div class="ttc" id="structarmnn_1_1_addition_queue_descriptor_xhtml"><div class="ttname"><a href="structarmnn_1_1_addition_queue_descriptor.xhtml">armnn::AdditionQueueDescriptor</a></div><div class="ttdef"><b>Definition:</b> <a href="_workload_data_8hpp_source.xhtml#l00240">WorkloadData.hpp:240</a></div></div>
<div class="ttc" id="namespacearmnn_xhtml_aa01bce88f89975a5a031db4cc8861527"><div class="ttname"><a href="namespacearmnn.xhtml#aa01bce88f89975a5a031db4cc8861527">armnn::InputTensors</a></div><div class="ttdeci">std::vector&lt; std::pair&lt; LayerBindingId, class ConstTensor &gt; &gt; InputTensors</div><div class="ttdef"><b>Definition:</b> <a href="_tensor_8hpp_source.xhtml#l00340">Tensor.hpp:340</a></div></div>
<div class="ttc" id="_dynamic_backend_tests_8hpp_xhtml_a8bafc3a98143bd2cef2748edb409aa54"><div class="ttname"><a href="_dynamic_backend_tests_8hpp.xhtml#a8bafc3a98143bd2cef2748edb409aa54">BackendVersioningTestImpl</a></div><div class="ttdeci">void BackendVersioningTestImpl()</div><div class="ttdef"><b>Definition:</b> <a href="_dynamic_backend_tests_8hpp_source.xhtml#l00336">DynamicBackendTests.hpp:336</a></div></div>
<div class="ttc" id="classarmnn_1_1_dynamic_backend_utils_xhtml_a42e250dfa19b9df3abdb273e1d35fa5b"><div class="ttname"><a href="classarmnn_1_1_dynamic_backend_utils.xhtml#a42e250dfa19b9df3abdb273e1d35fa5b">armnn::DynamicBackendUtils::CreateDynamicBackends</a></div><div class="ttdeci">static std::vector&lt; DynamicBackendPtr &gt; CreateDynamicBackends(const std::vector&lt; std::string &gt; &amp;sharedObjects)</div><div class="ttdef"><b>Definition:</b> <a href="_dynamic_backend_utils_8cpp_source.xhtml#l00261">DynamicBackendUtils.cpp:261</a></div></div>
<div class="ttc" id="_dynamic_backend_tests_8hpp_xhtml_ac98b3660d8c88c80c02fdcdab25a534f"><div class="ttname"><a href="_dynamic_backend_tests_8hpp.xhtml#ac98b3660d8c88c80c02fdcdab25a534f">CreateDynamicBackendObjectInvalidHandleTestImpl</a></div><div class="ttdeci">void CreateDynamicBackendObjectInvalidHandleTestImpl()</div><div class="ttdef"><b>Definition:</b> <a href="_dynamic_backend_tests_8hpp_source.xhtml#l00428">DynamicBackendTests.hpp:428</a></div></div>
<div class="ttc" id="namespacearmnn_xhtml_a83015160d8c67d5d77735eb0d4033d9a"><div class="ttname"><a href="namespacearmnn.xhtml#a83015160d8c67d5d77735eb0d4033d9a">armnn::NetworkId</a></div><div class="ttdeci">int NetworkId</div><div class="ttdef"><b>Definition:</b> <a href="_i_runtime_8hpp_source.xhtml#l00020">IRuntime.hpp:20</a></div></div>
<div class="ttc" id="_dynamic_backend_tests_8hpp_xhtml_ad01ee94919c8ecfba3b9e4fe89ed6bbe"><div class="ttname"><a href="_dynamic_backend_tests_8hpp.xhtml#ad01ee94919c8ecfba3b9e4fe89ed6bbe">GetTestFilePath</a></div><div class="ttdeci">std::string GetTestFilePath(const std::string &amp;directory, const std::string &amp;fileName)</div><div class="ttdef"><b>Definition:</b> <a href="_dynamic_backend_tests_8hpp_source.xhtml#l00189">DynamicBackendTests.hpp:189</a></div></div>
<div class="ttc" id="namespacearmnn_xhtml"><div class="ttname"><a href="namespacearmnn.xhtml">armnn</a></div><div class="ttdoc">Copyright (c) 2021 ARM Limited and Contributors. </div><div class="ttdef"><b>Definition:</b> <a href="01__00__software__tools_8dox_source.xhtml#l00006">01_00_software_tools.dox:6</a></div></div>
<div class="ttc" id="classarmnn_1_1_backend_registry_xhtml"><div class="ttname"><a href="classarmnn_1_1_backend_registry.xhtml">armnn::BackendRegistry</a></div><div class="ttdef"><b>Definition:</b> <a href="_backend_registry_8hpp_source.xhtml#l00025">BackendRegistry.hpp:25</a></div></div>
<div class="ttc" id="classarmnn_1_1_tensor_shape_xhtml"><div class="ttname"><a href="classarmnn_1_1_tensor_shape.xhtml">armnn::TensorShape</a></div><div class="ttdef"><b>Definition:</b> <a href="_tensor_8hpp_source.xhtml#l00020">Tensor.hpp:20</a></div></div>
<div class="ttc" id="_dynamic_backend_utils_8hpp_xhtml"><div class="ttname"><a href="_dynamic_backend_utils_8hpp.xhtml">DynamicBackendUtils.hpp</a></div></div>
<div class="ttc" id="_filesystem_8hpp_xhtml"><div class="ttname"><a href="_filesystem_8hpp.xhtml">Filesystem.hpp</a></div></div>
<div class="ttc" id="_backend_registry_8hpp_xhtml"><div class="ttname"><a href="_backend_registry_8hpp.xhtml">BackendRegistry.hpp</a></div></div>
<div class="ttc" id="namespacearmnn_xhtml_a754d43dc24a0fe36ecb3044d8f13a413"><div class="ttname"><a href="namespacearmnn.xhtml#a754d43dc24a0fe36ecb3044d8f13a413">armnn::DynamicBackendPtr</a></div><div class="ttdeci">std::unique_ptr&lt; DynamicBackend &gt; DynamicBackendPtr</div><div class="ttdef"><b>Definition:</b> <a href="include_2armnn_2backends_2_dynamic_backend_8hpp_source.xhtml#l00052">DynamicBackend.hpp:52</a></div></div>
<div class="ttc" id="_dynamic_backend_tests_8hpp_xhtml_a8f879660cb144117a50465429197ce0c"><div class="ttname"><a href="_dynamic_backend_tests_8hpp.xhtml#a8f879660cb144117a50465429197ce0c">CreateDynamicBackendObjectInvalidInterface6TestImpl</a></div><div class="ttdeci">void CreateDynamicBackendObjectInvalidInterface6TestImpl()</div><div class="ttdef"><b>Definition:</b> <a href="_dynamic_backend_tests_8hpp_source.xhtml#l00540">DynamicBackendTests.hpp:540</a></div></div>
<div class="ttc" id="class_test_dynamic_backend_utils_xhtml_ae905a2c700ca7d4b71fd64fe01e5580d"><div class="ttname"><a href="class_test_dynamic_backend_utils.xhtml#ae905a2c700ca7d4b71fd64fe01e5580d">TestDynamicBackendUtils::GetBackendPathsImplTest</a></div><div class="ttdeci">static std::vector&lt; std::string &gt; GetBackendPathsImplTest(const std::string &amp;path)</div><div class="ttdef"><b>Definition:</b> <a href="_dynamic_backend_tests_8hpp_source.xhtml#l00078">DynamicBackendTests.hpp:78</a></div></div>
<div class="ttc" id="classarmnn_1_1_i_output_slot_xhtml_a5ee4a6c9a2481245487b1b1a70d20fd0"><div class="ttname"><a href="classarmnn_1_1_i_output_slot.xhtml#a5ee4a6c9a2481245487b1b1a70d20fd0">armnn::IOutputSlot::SetTensorInfo</a></div><div class="ttdeci">virtual void SetTensorInfo(const TensorInfo &amp;tensorInfo)=0</div></div>
<div class="ttc" id="classarmnn_1_1_tensor_xhtml"><div class="ttname"><a href="classarmnn_1_1_tensor.xhtml">armnn::Tensor</a></div><div class="ttdoc">A tensor defined by a TensorInfo (shape and data type) and a mutable backing store. </div><div class="ttdef"><b>Definition:</b> <a href="_tensor_8hpp_source.xhtml#l00306">Tensor.hpp:306</a></div></div>
<div class="ttc" id="_polymorphic_downcast_8hpp_xhtml"><div class="ttname"><a href="_polymorphic_downcast_8hpp.xhtml">PolymorphicDowncast.hpp</a></div></div>
<div class="ttc" id="structarmnn_1_1_backend_version_xhtml"><div class="ttname"><a href="structarmnn_1_1_backend_version.xhtml">armnn::BackendVersion</a></div><div class="ttdef"><b>Definition:</b> <a href="include_2armnn_2backends_2_i_backend_internal_8hpp_source.xhtml#l00032">IBackendInternal.hpp:32</a></div></div>
<div class="ttc" id="_dynamic_backend_tests_8hpp_xhtml_a2384b592a8946dc96a1ea116d86993bf"><div class="ttname"><a href="_dynamic_backend_tests_8hpp.xhtml#a2384b592a8946dc96a1ea116d86993bf">GetValidEntryPointTestImpl</a></div><div class="ttdeci">void GetValidEntryPointTestImpl()</div><div class="ttdef"><b>Definition:</b> <a href="_dynamic_backend_tests_8hpp_source.xhtml#l00252">DynamicBackendTests.hpp:252</a></div></div>
<div class="ttc" id="_dynamic_backend_tests_8hpp_xhtml_a2a3715f6c83f6dd0c62035ecd2dbb386"><div class="ttname"><a href="_dynamic_backend_tests_8hpp.xhtml#a2a3715f6c83f6dd0c62035ecd2dbb386">RuntimeDynamicBackendsTestImpl</a></div><div class="ttdeci">void RuntimeDynamicBackendsTestImpl()</div><div class="ttdef"><b>Definition:</b> <a href="_dynamic_backend_tests_8hpp_source.xhtml#l01270">DynamicBackendTests.hpp:1270</a></div></div>
<div class="ttc" id="_dynamic_backend_tests_8hpp_xhtml_ab9633d2df7bd3d53a0d6e4d763ec8baf"><div class="ttname"><a href="_dynamic_backend_tests_8hpp.xhtml#ab9633d2df7bd3d53a0d6e4d763ec8baf">GetBackendPathsOverrideTestImpl</a></div><div class="ttdeci">void GetBackendPathsOverrideTestImpl()</div><div class="ttdef"><b>Definition:</b> <a href="_dynamic_backend_tests_8hpp_source.xhtml#l00682">DynamicBackendTests.hpp:682</a></div></div>
<div class="ttc" id="_test_dynamic_backend_8cpp_xhtml_adaff295134ed2825ae43a8e9281b6f2a"><div class="ttname"><a href="_test_dynamic_backend_8cpp.xhtml#adaff295134ed2825ae43a8e9281b6f2a">GetBackendId</a></div><div class="ttdeci">const char * GetBackendId()</div><div class="ttdef"><b>Definition:</b> <a href="_test_dynamic_backend_8cpp_source.xhtml#l00080">TestDynamicBackend.cpp:80</a></div></div>
<div class="ttc" id="namespacearmnn_xhtml_a82e98ef05fd67036d1195ba17174d685"><div class="ttname"><a href="namespacearmnn.xhtml#a82e98ef05fd67036d1195ba17174d685">armnn::Optimize</a></div><div class="ttdeci">IOptimizedNetworkPtr Optimize(const INetwork &amp;network, const std::vector&lt; BackendId &gt; &amp;backendPreferences, const IDeviceSpec &amp;deviceSpec, const OptimizerOptions &amp;options=OptimizerOptions(), Optional&lt; std::vector&lt; std::string &gt; &amp;&gt; messages=EmptyOptional())</div><div class="ttdoc">Create an optimized version of the network. </div><div class="ttdef"><b>Definition:</b> <a href="_network_8cpp_source.xhtml#l01502">Network.cpp:1502</a></div></div>
<div class="ttc" id="include_2armnn_2backends_2_dynamic_backend_8hpp_xhtml"><div class="ttname"><a href="include_2armnn_2backends_2_dynamic_backend_8hpp.xhtml">DynamicBackend.hpp</a></div></div>
<div class="ttc" id="_dynamic_backend_tests_8hpp_xhtml_a925a53b0f85afbe661c251b858b01601"><div class="ttname"><a href="_dynamic_backend_tests_8hpp.xhtml#a925a53b0f85afbe661c251b858b01601">CreateDynamicBackendObjectInvalidInterface5TestImpl</a></div><div class="ttdeci">void CreateDynamicBackendObjectInvalidInterface5TestImpl()</div><div class="ttdef"><b>Definition:</b> <a href="_dynamic_backend_tests_8hpp_source.xhtml#l00519">DynamicBackendTests.hpp:519</a></div></div>
<div class="ttc" id="structarmnn_1_1_convolution2d_queue_descriptor_xhtml_a3369b66d9316a773a41711e3f590c041"><div class="ttname"><a href="structarmnn_1_1_convolution2d_queue_descriptor.xhtml#a3369b66d9316a773a41711e3f590c041">armnn::Convolution2dQueueDescriptor::m_Weight</a></div><div class="ttdeci">const ConstCpuTensorHandle * m_Weight</div><div class="ttdef"><b>Definition:</b> <a href="_workload_data_8hpp_source.xhtml#l00200">WorkloadData.hpp:200</a></div></div>
<div class="ttc" id="classarmnn_1_1_const_tensor_xhtml"><div class="ttname"><a href="classarmnn_1_1_const_tensor.xhtml">armnn::ConstTensor</a></div><div class="ttdoc">A tensor defined by a TensorInfo (shape and data type) and an immutable backing store. </div><div class="ttdef"><b>Definition:</b> <a href="_tensor_8hpp_source.xhtml#l00314">Tensor.hpp:314</a></div></div>
<div class="ttc" id="classarmnn_1_1_backend_registry_xhtml_a58f4b9e873b7c1c7d512bd9f7d1489d8"><div class="ttname"><a href="classarmnn_1_1_backend_registry.xhtml#a58f4b9e873b7c1c7d512bd9f7d1489d8">armnn::BackendRegistry::Size</a></div><div class="ttdeci">size_t Size() const</div><div class="ttdef"><b>Definition:</b> <a href="_backend_registry_8cpp_source.xhtml#l00067">BackendRegistry.cpp:67</a></div></div>
<div class="ttc" id="_dynamic_backend_tests_8hpp_xhtml_a5f525e18ac7373a2250d958dd6cdf94e"><div class="ttname"><a href="_dynamic_backend_tests_8hpp.xhtml#a5f525e18ac7373a2250d958dd6cdf94e">DYNAMIC_BACKEND_BUILD_DIR</a></div><div class="ttdeci">#define DYNAMIC_BACKEND_BUILD_DIR</div><div class="ttdef"><b>Definition:</b> <a href="_dynamic_backend_tests_8hpp_source.xhtml#l00024">DynamicBackendTests.hpp:24</a></div></div>
<div class="ttc" id="_dynamic_backend_tests_8hpp_xhtml_a98bdeaf1b8289ba5fa6ac2b0e45a13d0"><div class="ttname"><a href="_dynamic_backend_tests_8hpp.xhtml#a98bdeaf1b8289ba5fa6ac2b0e45a13d0">RegisterMultipleInvalidDynamicBackendsTestImpl</a></div><div class="ttdeci">void RegisterMultipleInvalidDynamicBackendsTestImpl()</div><div class="ttdef"><b>Definition:</b> <a href="_dynamic_backend_tests_8hpp_source.xhtml#l01186">DynamicBackendTests.hpp:1186</a></div></div>
<div class="ttc" id="classarmnn_1_1_dynamic_backend_utils_xhtml"><div class="ttname"><a href="classarmnn_1_1_dynamic_backend_utils.xhtml">armnn::DynamicBackendUtils</a></div><div class="ttdef"><b>Definition:</b> <a href="_dynamic_backend_utils_8hpp_source.xhtml#l00028">DynamicBackendUtils.hpp:28</a></div></div>
<div class="ttc" id="namespacearmnn_xhtml_a8f091a512915d1cb29a4ebf13dfc53ea"><div class="ttname"><a href="namespacearmnn.xhtml#a8f091a512915d1cb29a4ebf13dfc53ea">armnn::OutputTensors</a></div><div class="ttdeci">std::vector&lt; std::pair&lt; LayerBindingId, class Tensor &gt; &gt; OutputTensors</div><div class="ttdef"><b>Definition:</b> <a href="_tensor_8hpp_source.xhtml#l00341">Tensor.hpp:341</a></div></div>
<div class="ttc" id="_dynamic_backend_tests_8hpp_xhtml_ad4a311ecf0fe6057c01ed11b2df4ed15"><div class="ttname"><a href="_dynamic_backend_tests_8hpp.xhtml#ad4a311ecf0fe6057c01ed11b2df4ed15">GetNotExistingEntryPointTestImpl</a></div><div class="ttdeci">void GetNotExistingEntryPointTestImpl()</div><div class="ttdef"><b>Definition:</b> <a href="_dynamic_backend_tests_8hpp_source.xhtml#l00315">DynamicBackendTests.hpp:315</a></div></div>
<div class="ttc" id="_dynamic_backend_tests_8hpp_xhtml_acfd92844ff506a69381848c62b5f396d"><div class="ttname"><a href="_dynamic_backend_tests_8hpp.xhtml#acfd92844ff506a69381848c62b5f396d">CreateDynamicBackendObjectInvalidInterface1TestImpl</a></div><div class="ttdeci">void CreateDynamicBackendObjectInvalidInterface1TestImpl()</div><div class="ttdef"><b>Definition:</b> <a href="_dynamic_backend_tests_8hpp_source.xhtml#l00440">DynamicBackendTests.hpp:440</a></div></div>
<div class="ttc" id="namespacearmnn_xhtml_a674efcf6cbdb9e831d653ff0e821fb38"><div class="ttname"><a href="namespacearmnn.xhtml#a674efcf6cbdb9e831d653ff0e821fb38">armnn::IOptimizedNetworkPtr</a></div><div class="ttdeci">std::unique_ptr&lt; IOptimizedNetwork, void(*)(IOptimizedNetwork *network)&gt; IOptimizedNetworkPtr</div><div class="ttdef"><b>Definition:</b> <a href="_i_network_8hpp_source.xhtml#l00174">INetwork.hpp:174</a></div></div>
<div class="ttc" id="_i_layer_support_8hpp_xhtml"><div class="ttname"><a href="_i_layer_support_8hpp.xhtml">ILayerSupport.hpp</a></div></div>
<div class="ttc" id="class_test_backend_registry_xhtml"><div class="ttname"><a href="class_test_backend_registry.xhtml">TestBackendRegistry</a></div><div class="ttdef"><b>Definition:</b> <a href="_dynamic_backend_tests_8hpp_source.xhtml#l00092">DynamicBackendTests.hpp:92</a></div></div>
<div class="ttc" id="_dynamic_backend_tests_8hpp_xhtml_a05f580df8c6c039d41d42c838cd97014"><div class="ttname"><a href="_dynamic_backend_tests_8hpp.xhtml#a05f580df8c6c039d41d42c838cd97014">RuntimeInvalidOverridePathTestImpl</a></div><div class="ttdeci">void RuntimeInvalidOverridePathTestImpl()</div><div class="ttdef"><b>Definition:</b> <a href="_dynamic_backend_tests_8hpp_source.xhtml#l01377">DynamicBackendTests.hpp:1377</a></div></div>
<div class="ttc" id="classarmnn_1_1_runtime_exception_xhtml"><div class="ttname"><a href="classarmnn_1_1_runtime_exception.xhtml">armnn::RuntimeException</a></div><div class="ttdef"><b>Definition:</b> <a href="_exceptions_8hpp_source.xhtml#l00120">Exceptions.hpp:120</a></div></div>
<div class="ttc" id="_dynamic_backend_tests_8hpp_xhtml_a76c94b7ce857689477dcac09aba1858f"><div class="ttname"><a href="_dynamic_backend_tests_8hpp.xhtml#a76c94b7ce857689477dcac09aba1858f">CreateDynamicBackendsTestImpl</a></div><div class="ttdeci">void CreateDynamicBackendsTestImpl()</div><div class="ttdef"><b>Definition:</b> <a href="_dynamic_backend_tests_8hpp_source.xhtml#l00794">DynamicBackendTests.hpp:794</a></div></div>
<div class="ttc" id="classarmnn_1_1_invalid_argument_exception_xhtml"><div class="ttname"><a href="classarmnn_1_1_invalid_argument_exception.xhtml">armnn::InvalidArgumentException</a></div><div class="ttdef"><b>Definition:</b> <a href="_exceptions_8hpp_source.xhtml#l00080">Exceptions.hpp:80</a></div></div>
<div class="ttc" id="_dynamic_backend_tests_8hpp_xhtml_a2733fc49ff574659904cbc558c6b2bac"><div class="ttname"><a href="_dynamic_backend_tests_8hpp.xhtml#a2733fc49ff574659904cbc558c6b2bac">CreateDynamicBackendObjectInvalidInterface2TestImpl</a></div><div class="ttdeci">void CreateDynamicBackendObjectInvalidInterface2TestImpl()</div><div class="ttdef"><b>Definition:</b> <a href="_dynamic_backend_tests_8hpp_source.xhtml#l00459">DynamicBackendTests.hpp:459</a></div></div>
<div class="ttc" id="_dynamic_backend_tests_8hpp_xhtml_aec7460101cf2fd4f798d287654783143"><div class="ttname"><a href="_dynamic_backend_tests_8hpp.xhtml#aec7460101cf2fd4f798d287654783143">CloseInvalidHandleTestImpl</a></div><div class="ttdeci">void CloseInvalidHandleTestImpl()</div><div class="ttdef"><b>Definition:</b> <a href="_dynamic_backend_tests_8hpp_source.xhtml#l00214">DynamicBackendTests.hpp:214</a></div></div>
<div class="ttc" id="structarmnn_1_1_i_runtime_1_1_creation_options_xhtml"><div class="ttname"><a href="structarmnn_1_1_i_runtime_1_1_creation_options.xhtml">armnn::IRuntime::CreationOptions</a></div><div class="ttdef"><b>Definition:</b> <a href="_i_runtime_8hpp_source.xhtml#l00043">IRuntime.hpp:43</a></div></div>
<div class="ttc" id="_cpu_tensor_handle_8hpp_xhtml"><div class="ttname"><a href="_cpu_tensor_handle_8hpp.xhtml">CpuTensorHandle.hpp</a></div></div>
<div class="ttc" id="structarmnn_1_1_convolution2d_queue_descriptor_xhtml"><div class="ttname"><a href="structarmnn_1_1_convolution2d_queue_descriptor.xhtml">armnn::Convolution2dQueueDescriptor</a></div><div class="ttdef"><b>Definition:</b> <a href="_workload_data_8hpp_source.xhtml#l00192">WorkloadData.hpp:192</a></div></div>
<div class="ttc" id="classarmnn_1_1_i_backend_internal_xhtml_a11fa919c11fe46aad613b2e960fcfe90"><div class="ttname"><a href="classarmnn_1_1_i_backend_internal.xhtml#a11fa919c11fe46aad613b2e960fcfe90">armnn::IBackendInternal::ILayerSupportSharedPtr</a></div><div class="ttdeci">std::shared_ptr&lt; ILayerSupport &gt; ILayerSupportSharedPtr</div><div class="ttdef"><b>Definition:</b> <a href="include_2armnn_2backends_2_i_backend_internal_8hpp_source.xhtml#l00087">IBackendInternal.hpp:87</a></div></div>
<div class="ttc" id="_dynamic_backend_tests_8hpp_xhtml_a1f89ff6d66212524954282edcda4082b"><div class="ttname"><a href="_dynamic_backend_tests_8hpp.xhtml#a1f89ff6d66212524954282edcda4082b">CreateDynamicBackendsMixedTypesTestImpl</a></div><div class="ttdeci">void CreateDynamicBackendsMixedTypesTestImpl()</div><div class="ttdef"><b>Definition:</b> <a href="_dynamic_backend_tests_8hpp_source.xhtml#l00881">DynamicBackendTests.hpp:881</a></div></div>
<div class="ttc" id="_dynamic_backend_tests_8hpp_xhtml_a22f4f05aa4404afeca52237617335373"><div class="ttname"><a href="_dynamic_backend_tests_8hpp.xhtml#a22f4f05aa4404afeca52237617335373">OpenEmptyFileNameTestImpl</a></div><div class="ttdeci">void OpenEmptyFileNameTestImpl()</div><div class="ttdef"><b>Definition:</b> <a href="_dynamic_backend_tests_8hpp_source.xhtml#l00222">DynamicBackendTests.hpp:222</a></div></div>
<div class="ttc" id="structarmnn_1_1_i_runtime_1_1_creation_options_xhtml_ae43cf4b5df0068ee6a9151c98947248b"><div class="ttname"><a href="structarmnn_1_1_i_runtime_1_1_creation_options.xhtml#ae43cf4b5df0068ee6a9151c98947248b">armnn::IRuntime::CreationOptions::m_DynamicBackendsPath</a></div><div class="ttdeci">std::string m_DynamicBackendsPath</div><div class="ttdoc">Setting this value will override the paths set by the DYNAMIC_BACKEND_PATHS compiler directive Only a...</div><div class="ttdef"><b>Definition:</b> <a href="_i_runtime_8hpp_source.xhtml#l00060">IRuntime.hpp:60</a></div></div>
<div class="ttc" id="classarmnn_1_1_dynamic_backend_utils_xhtml_adb6f50f10cdce40bd5493d42930b58cb"><div class="ttname"><a href="classarmnn_1_1_dynamic_backend_utils.xhtml#adb6f50f10cdce40bd5493d42930b58cb">armnn::DynamicBackendUtils::RegisterDynamicBackendsImpl</a></div><div class="ttdeci">static BackendIdSet RegisterDynamicBackendsImpl(BackendRegistry &amp;backendRegistry, const std::vector&lt; DynamicBackendPtr &gt; &amp;dynamicBackends)</div><div class="ttdef"><b>Definition:</b> <a href="_dynamic_backend_utils_8cpp_source.xhtml#l00333">DynamicBackendUtils.cpp:333</a></div></div>
<div class="ttc" id="structarmnn_1_1_empty_optional_xhtml"><div class="ttname"><a href="structarmnn_1_1_empty_optional.xhtml">armnn::EmptyOptional</a></div><div class="ttdoc">EmptyOptional is used to initialize the Optional class in case we want to have default value for an O...</div><div class="ttdef"><b>Definition:</b> <a href="_optional_8hpp_source.xhtml#l00032">Optional.hpp:32</a></div></div>
<div class="ttc" id="class_test_dynamic_backend_utils_xhtml_a8e34f3a7d4d581864eb93474b8446405"><div class="ttname"><a href="class_test_dynamic_backend_utils.xhtml#a8e34f3a7d4d581864eb93474b8446405">TestDynamicBackendUtils::IsBackendCompatibleTest</a></div><div class="ttdeci">static bool IsBackendCompatibleTest(const armnn::BackendVersion &amp;backendApiVersion, const armnn::BackendVersion &amp;backendVersion)</div><div class="ttdef"><b>Definition:</b> <a href="_dynamic_backend_tests_8hpp_source.xhtml#l00072">DynamicBackendTests.hpp:72</a></div></div>
<div class="ttc" id="classarmnn_1_1_device_spec_xhtml_a89d4c29e22db837f787e2171b8a71892"><div class="ttname"><a href="classarmnn_1_1_device_spec.xhtml#a89d4c29e22db837f787e2171b8a71892">armnn::DeviceSpec::GetSupportedBackends</a></div><div class="ttdeci">virtual const BackendIdSet &amp; GetSupportedBackends() const override</div><div class="ttdef"><b>Definition:</b> <a href="_device_spec_8hpp_source.xhtml#l00025">DeviceSpec.hpp:25</a></div></div>
<div class="ttc" id="_dynamic_backend_tests_8hpp_xhtml_a3c082270ab18262a66e97eb1d6922991"><div class="ttname"><a href="_dynamic_backend_tests_8hpp.xhtml#a3c082270ab18262a66e97eb1d6922991">OpenCloseHandleTestImpl</a></div><div class="ttdeci">void OpenCloseHandleTestImpl()</div><div class="ttdef"><b>Definition:</b> <a href="_dynamic_backend_tests_8hpp_source.xhtml#l00200">DynamicBackendTests.hpp:200</a></div></div>
<div class="ttc" id="_dynamic_backend_tests_8hpp_xhtml_a232b6171adb0f163b616059ba9ddab07"><div class="ttname"><a href="_dynamic_backend_tests_8hpp.xhtml#a232b6171adb0f163b616059ba9ddab07">GetDynamicBackendsBasePath</a></div><div class="ttdeci">std::string GetDynamicBackendsBasePath()</div><div class="ttdef"><b>Definition:</b> <a href="_dynamic_backend_tests_8hpp_source.xhtml#l00161">DynamicBackendTests.hpp:161</a></div></div>
<div class="ttc" id="classarmnn_1_1_i_connectable_layer_xhtml_a6ec9e0eb66d7d6a01240492a0b18104c"><div class="ttname"><a href="classarmnn_1_1_i_connectable_layer.xhtml#a6ec9e0eb66d7d6a01240492a0b18104c">armnn::IConnectableLayer::GetInputSlot</a></div><div class="ttdeci">virtual const IInputSlot &amp; GetInputSlot(unsigned int index) const =0</div><div class="ttdoc">Get a const input slot handle by slot index. </div></div>
<div class="ttc" id="classarmnn_1_1_dynamic_backend_utils_xhtml_aafeb709b667b8554e43d2212b7d46e48"><div class="ttname"><a href="classarmnn_1_1_dynamic_backend_utils.xhtml#aafeb709b667b8554e43d2212b7d46e48">armnn::DynamicBackendUtils::IsBackendCompatibleImpl</a></div><div class="ttdeci">static bool IsBackendCompatibleImpl(const BackendVersion &amp;backendApiVersion, const BackendVersion &amp;backendVersion)</div><div class="ttdoc">Protected methods for testing purposes. </div><div class="ttdef"><b>Definition:</b> <a href="_dynamic_backend_utils_8cpp_source.xhtml#l00057">DynamicBackendUtils.cpp:57</a></div></div>
<div class="ttc" id="_dynamic_backend_tests_8hpp_xhtml_a307ee2e89a7a9dd574674a69da91addd"><div class="ttname"><a href="_dynamic_backend_tests_8hpp.xhtml#a307ee2e89a7a9dd574674a69da91addd">CreateDynamicBackendObjectInvalidInterface4TestImpl</a></div><div class="ttdeci">void CreateDynamicBackendObjectInvalidInterface4TestImpl()</div><div class="ttdef"><b>Definition:</b> <a href="_dynamic_backend_tests_8hpp_source.xhtml#l00499">DynamicBackendTests.hpp:499</a></div></div>
<div class="ttc" id="classarmnn_1_1_dynamic_backend_utils_xhtml_a5d8cade961d9ea50a19a382c974d1ce5"><div class="ttname"><a href="classarmnn_1_1_dynamic_backend_utils.xhtml#a5d8cade961d9ea50a19a382c974d1ce5">armnn::DynamicBackendUtils::GetBackendPathsImpl</a></div><div class="ttdeci">static std::vector&lt; std::string &gt; GetBackendPathsImpl(const std::string &amp;backendPaths)</div><div class="ttdef"><b>Definition:</b> <a href="_dynamic_backend_utils_8cpp_source.xhtml#l00101">DynamicBackendUtils.cpp:101</a></div></div>
<div class="ttc" id="classarmnn_1_1_i_connectable_layer_xhtml_a80ac4eda2e7f2757ec9dd96fc96dbd16"><div class="ttname"><a href="classarmnn_1_1_i_connectable_layer.xhtml#a80ac4eda2e7f2757ec9dd96fc96dbd16">armnn::IConnectableLayer::GetOutputSlot</a></div><div class="ttdeci">virtual const IOutputSlot &amp; GetOutputSlot(unsigned int index) const =0</div><div class="ttdoc">Get the const output slot handle by slot index. </div></div>
<div class="ttc" id="structarmnn_1_1_workload_info_xhtml"><div class="ttname"><a href="structarmnn_1_1_workload_info.xhtml">armnn::WorkloadInfo</a></div><div class="ttdoc">Contains information about inputs and outputs to a layer. </div><div class="ttdef"><b>Definition:</b> <a href="include_2armnn_2backends_2_workload_info_8hpp_source.xhtml#l00016">WorkloadInfo.hpp:16</a></div></div>
<div class="ttc" id="class_test_dynamic_backend_utils_xhtml"><div class="ttname"><a href="class_test_dynamic_backend_utils.xhtml">TestDynamicBackendUtils</a></div><div class="ttdef"><b>Definition:</b> <a href="_dynamic_backend_tests_8hpp_source.xhtml#l00069">DynamicBackendTests.hpp:69</a></div></div>
<div class="ttc" id="_dynamic_backend_tests_8hpp_xhtml_a4967976a2407f1e67482235953328fba"><div class="ttname"><a href="_dynamic_backend_tests_8hpp.xhtml#a4967976a2407f1e67482235953328fba">RuntimeEmptyTestImpl</a></div><div class="ttdeci">void RuntimeEmptyTestImpl()</div><div class="ttdef"><b>Definition:</b> <a href="_dynamic_backend_tests_8hpp_source.xhtml#l01248">DynamicBackendTests.hpp:1248</a></div></div>
<div class="ttc" id="_dynamic_backend_tests_8hpp_xhtml_a805c0fe55cb42d8507a081c7c7659408"><div class="ttname"><a href="_dynamic_backend_tests_8hpp.xhtml#a805c0fe55cb42d8507a081c7c7659408">RuntimeDuplicateDynamicBackendsTestImpl</a></div><div class="ttdeci">void RuntimeDuplicateDynamicBackendsTestImpl()</div><div class="ttdef"><b>Definition:</b> <a href="_dynamic_backend_tests_8hpp_source.xhtml#l01311">DynamicBackendTests.hpp:1311</a></div></div>
<div class="ttc" id="structarmnn_1_1_queue_descriptor_xhtml_a4b50e46a6810018f3edecfb68b2a76b3"><div class="ttname"><a href="structarmnn_1_1_queue_descriptor.xhtml#a4b50e46a6810018f3edecfb68b2a76b3">armnn::QueueDescriptor::m_Inputs</a></div><div class="ttdeci">std::vector&lt; ITensorHandle * &gt; m_Inputs</div><div class="ttdef"><b>Definition:</b> <a href="_workload_data_8hpp_source.xhtml#l00030">WorkloadData.hpp:30</a></div></div>
<div class="ttc" id="namespacearmnn_xhtml_ace74f6f9feb95a964a49d79458232703"><div class="ttname"><a href="namespacearmnn.xhtml#ace74f6f9feb95a964a49d79458232703">armnn::INetworkPtr</a></div><div class="ttdeci">std::unique_ptr&lt; INetwork, void(*)(INetwork *network)&gt; INetworkPtr</div><div class="ttdef"><b>Definition:</b> <a href="_i_network_8hpp_source.xhtml#l00173">INetwork.hpp:173</a></div></div>
<div class="ttc" id="namespacearmnn_xhtml_ade0af9dacaa52cafdd701bef2e901c77"><div class="ttname"><a href="namespacearmnn.xhtml#ade0af9dacaa52cafdd701bef2e901c77">armnn::IBackendInternalUniquePtr</a></div><div class="ttdeci">std::unique_ptr&lt; IBackendInternal &gt; IBackendInternalUniquePtr</div><div class="ttdef"><b>Definition:</b> <a href="_backend_registry_8hpp_source.xhtml#l00023">BackendRegistry.hpp:23</a></div></div>
<div class="ttc" id="_dynamic_backend_tests_8hpp_xhtml_a1ccc02805f5cdcbc45c6c548b5e4c29a"><div class="ttname"><a href="_dynamic_backend_tests_8hpp.xhtml#a1ccc02805f5cdcbc45c6c548b5e4c29a">GetBasePath</a></div><div class="ttdeci">std::string GetBasePath(const std::string &amp;basePath)</div><div class="ttdef"><b>Definition:</b> <a href="_dynamic_backend_tests_8hpp_source.xhtml#l00109">DynamicBackendTests.hpp:109</a></div></div>
<div class="ttc" id="classarmnn_1_1_i_output_slot_xhtml_ac1835f8756a9f03c02fcf9664e3a0fce"><div class="ttname"><a href="classarmnn_1_1_i_output_slot.xhtml#ac1835f8756a9f03c02fcf9664e3a0fce">armnn::IOutputSlot::Connect</a></div><div class="ttdeci">virtual int Connect(IInputSlot &amp;destination)=0</div></div>
<div class="ttc" id="_dynamic_backend_tests_8hpp_xhtml_afe972850015352cf8ae3e073ac31abcd"><div class="ttname"><a href="_dynamic_backend_tests_8hpp.xhtml#afe972850015352cf8ae3e073ac31abcd">RuntimeInvalidDynamicBackendsTestImpl</a></div><div class="ttdeci">void RuntimeInvalidDynamicBackendsTestImpl()</div><div class="ttdef"><b>Definition:</b> <a href="_dynamic_backend_tests_8hpp_source.xhtml#l01352">DynamicBackendTests.hpp:1352</a></div></div>
<div class="ttc" id="class_test_backend_registry_xhtml_acc225f0ce5d9703b1b36b2886993aa8e"><div class="ttname"><a href="class_test_backend_registry.xhtml#acc225f0ce5d9703b1b36b2886993aa8e">TestBackendRegistry::TestBackendRegistry</a></div><div class="ttdeci">TestBackendRegistry()</div><div class="ttdef"><b>Definition:</b> <a href="_dynamic_backend_tests_8hpp_source.xhtml#l00095">DynamicBackendTests.hpp:95</a></div></div>
<div class="ttc" id="_dynamic_backend_tests_8hpp_xhtml_a9cf371447a3219bacc62c0f343c174c0"><div class="ttname"><a href="_dynamic_backend_tests_8hpp.xhtml#a9cf371447a3219bacc62c0f343c174c0">OpenNotExistingFileTestImpl</a></div><div class="ttdeci">void OpenNotExistingFileTestImpl()</div><div class="ttdef"><b>Definition:</b> <a href="_dynamic_backend_tests_8hpp_source.xhtml#l00231">DynamicBackendTests.hpp:231</a></div></div>
<div class="ttc" id="_dynamic_backend_tests_8hpp_xhtml_ab831071920946c5e8562471793882ac4"><div class="ttname"><a href="_dynamic_backend_tests_8hpp.xhtml#ab831071920946c5e8562471793882ac4">CreateDynamicBackendObjectInvalidInterface7TestImpl</a></div><div class="ttdeci">void CreateDynamicBackendObjectInvalidInterface7TestImpl()</div><div class="ttdef"><b>Definition:</b> <a href="_dynamic_backend_tests_8hpp_source.xhtml#l00581">DynamicBackendTests.hpp:581</a></div></div>
<div class="ttc" id="_dynamic_backend_tests_8hpp_xhtml_a48a0ac943ae30935f6d32625bee457f8"><div class="ttname"><a href="_dynamic_backend_tests_8hpp.xhtml#a48a0ac943ae30935f6d32625bee457f8">GetBackendPathsTestImpl</a></div><div class="ttdeci">void GetBackendPathsTestImpl()</div><div class="ttdef"><b>Definition:</b> <a href="_dynamic_backend_tests_8hpp_source.xhtml#l00602">DynamicBackendTests.hpp:602</a></div></div>
<div class="ttc" id="class_test_backend_registry_xhtml_ac93c278f2b24eed88af3d58eb6a08242"><div class="ttname"><a href="class_test_backend_registry.xhtml#ac93c278f2b24eed88af3d58eb6a08242">TestBackendRegistry::~TestBackendRegistry</a></div><div class="ttdeci">~TestBackendRegistry()</div><div class="ttdef"><b>Definition:</b> <a href="_dynamic_backend_tests_8hpp_source.xhtml#l00100">DynamicBackendTests.hpp:100</a></div></div>
<div class="ttc" id="classarmnn_1_1_backend_id_xhtml"><div class="ttname"><a href="classarmnn_1_1_backend_id.xhtml">armnn::BackendId</a></div><div class="ttdef"><b>Definition:</b> <a href="_backend_id_8hpp_source.xhtml#l00075">BackendId.hpp:75</a></div></div>
</div><!-- fragment --></div><!-- contents -->
</div><!-- doc-content -->
<!-- start footer part -->
<div id="nav-path" class="navpath"><!-- id is needed for treeview function! -->
  <ul>
    <li class="navelem"><a class="el" href="dir_68267d1309a1af8e8297ef4c3efbcdba.xhtml">src</a></li><li class="navelem"><a class="el" href="dir_0f3cdec46afbc61a1ded8e1687c9c9a0.xhtml">backends</a></li><li class="navelem"><a class="el" href="dir_797a213d7d01b98ef12d53b0820ea64e.xhtml">backendsCommon</a></li><li class="navelem"><a class="el" href="dir_28bfe507f7e135bdae07c2a6b7f66696.xhtml">test</a></li><li class="navelem"><a class="el" href="_dynamic_backend_tests_8hpp.xhtml">DynamicBackendTests.hpp</a></li>
    <li class="footer">Generated on Thu Feb 25 2021 17:27:50 for ArmNN by
    <a href="http://www.doxygen.org/index.html">
    <img class="footer" src="doxygen.png" alt="doxygen"/></a> 1.8.13 </li>
  </ul>
</div>
</body>
</html>