blob: 802167a3a053a96d8def1f543b27c8a8c2659cb3 [file] [log] [blame]
Aron Virginas-Tar70104002018-10-24 15:33:28 +01001//
2// Copyright © 2017 Arm Ltd. All rights reserved.
3// SPDX-License-Identifier: MIT
4//
5
Aron Virginas-Tarc9cc8042018-11-01 16:15:57 +00006#include <backendsCommon/test/EndToEndTestImpl.hpp>
narpra01db2b1602019-01-23 15:23:11 +00007#include <backendsCommon/test/GatherEndToEndTestImpl.hpp>
narpra01b9546cf2018-11-20 15:21:28 +00008#include <backendsCommon/test/MergerTestImpl.hpp>
FrancisMurtagh2262bbd2018-12-20 16:09:45 +00009#include <backendsCommon/test/ArithmeticTestImpl.hpp>
Aron Virginas-Tar70104002018-10-24 15:33:28 +010010
11#include <boost/test/unit_test.hpp>
Éanna Ó Catháin20e58802018-12-04 10:29:06 +000012#include <boost/test/execution_monitor.hpp>
Aron Virginas-Tar70104002018-10-24 15:33:28 +010013
14BOOST_AUTO_TEST_SUITE(RefEndToEnd)
15
narpra01b9546cf2018-11-20 15:21:28 +000016std::vector<armnn::BackendId> defaultBackends = {armnn::Compute::CpuRef};
17
Aron Virginas-Tar70104002018-10-24 15:33:28 +010018BOOST_AUTO_TEST_CASE(ConstantUsage_Ref_Float32)
19{
narpra01b9546cf2018-11-20 15:21:28 +000020 BOOST_TEST(ConstantUsageFloat32Test(defaultBackends));
Aron Virginas-Tar70104002018-10-24 15:33:28 +010021}
22
23BOOST_AUTO_TEST_CASE(ConstantUsage_Ref_Uint8)
24{
narpra01b9546cf2018-11-20 15:21:28 +000025 BOOST_TEST(ConstantUsageUint8Test(defaultBackends));
Aron Virginas-Tar70104002018-10-24 15:33:28 +010026}
27
28BOOST_AUTO_TEST_CASE(Unsigned8)
29{
30 using namespace armnn;
31
32 // Create runtime in which test will run
33 armnn::IRuntime::CreationOptions options;
34 armnn::IRuntimePtr runtime(armnn::IRuntime::Create(options));
35
36 // Builds up the structure of the network.
37 armnn::INetworkPtr net(INetwork::Create());
38
39 IConnectableLayer* input = net->AddInputLayer(0, "input");
40 IConnectableLayer* softmax = net->AddSoftmaxLayer(SoftmaxDescriptor(), "softmax");
41 IConnectableLayer* output = net->AddOutputLayer(0, "output");
42
43 input->GetOutputSlot(0).Connect(softmax->GetInputSlot(0));
44 softmax->GetOutputSlot(0).Connect(output->GetInputSlot(0));
45
46 // Sets the tensors in the network.
47 TensorInfo inputTensorInfo(TensorShape({1, 5}), DataType::QuantisedAsymm8);
48 inputTensorInfo.SetQuantizationOffset(100);
49 inputTensorInfo.SetQuantizationScale(10000.0f);
50 input->GetOutputSlot(0).SetTensorInfo(inputTensorInfo);
51
52 TensorInfo outputTensorInfo(TensorShape({1, 5}), DataType::QuantisedAsymm8);
53 outputTensorInfo.SetQuantizationOffset(0);
54 outputTensorInfo.SetQuantizationScale(1.0f/255.0f);
55 softmax->GetOutputSlot(0).SetTensorInfo(outputTensorInfo);
56
57 // optimize the network
narpra01b9546cf2018-11-20 15:21:28 +000058 IOptimizedNetworkPtr optNet = Optimize(*net, defaultBackends, runtime->GetDeviceSpec());
Aron Virginas-Tar70104002018-10-24 15:33:28 +010059
60 // Loads it into the runtime.
61 NetworkId netId;
62 auto error = runtime->LoadNetwork(netId, std::move(optNet));
63 BOOST_TEST(error == Status::Success);
64
65 // Creates structures for input & output.
66 std::vector<uint8_t> inputData
67 {
68 1, 10, 3, 200, 5 // Some inputs - one of which is sufficiently larger than the others to saturate softmax.
69 };
70 std::vector<uint8_t> outputData(5);
71
72 armnn::InputTensors inputTensors
73 {
74 {0, armnn::ConstTensor(runtime->GetInputTensorInfo(netId, 0), inputData.data())}
75 };
76 armnn::OutputTensors outputTensors
77 {
78 {0, armnn::Tensor(runtime->GetOutputTensorInfo(netId, 0), outputData.data())}
79 };
80
81 // Does the inference.
82 runtime->EnqueueWorkload(netId, inputTensors, outputTensors);
83
84 // Checks the results.
85 BOOST_TEST(outputData[0] == 0);
86 BOOST_TEST(outputData[1] == 0);
87 BOOST_TEST(outputData[2] == 0);
88 BOOST_TEST(outputData[3] == 255); // softmax has been saturated.
89 BOOST_TEST(outputData[4] == 0);
90}
91
92BOOST_AUTO_TEST_CASE(TrivialAdd)
93{
94 // This test was designed to match "AddTwo" in android nn/runtime/test/TestTrivialModel.cpp.
95
96 using namespace armnn;
97
98 // Create runtime in which test will run
99 armnn::IRuntime::CreationOptions options;
100 armnn::IRuntimePtr runtime(armnn::IRuntime::Create(options));
101
102 // Builds up the structure of the network.
103 armnn::INetworkPtr net(INetwork::Create());
104
105 IConnectableLayer* input1 = net->AddInputLayer(0);
106 IConnectableLayer* input2 = net->AddInputLayer(1);
107 IConnectableLayer* add = net->AddAdditionLayer();
108 IConnectableLayer* output = net->AddOutputLayer(0);
109
110 input1->GetOutputSlot(0).Connect(add->GetInputSlot(0));
111 input2->GetOutputSlot(0).Connect(add->GetInputSlot(1));
112 add->GetOutputSlot(0).Connect(output->GetInputSlot(0));
113
114 // Sets the tensors in the network.
115 TensorInfo tensorInfo(TensorShape({3, 4}), DataType::Float32);
116 input1->GetOutputSlot(0).SetTensorInfo(tensorInfo);
117 input2->GetOutputSlot(0).SetTensorInfo(tensorInfo);
118 add->GetOutputSlot(0).SetTensorInfo(tensorInfo);
119
120 // optimize the network
narpra01b9546cf2018-11-20 15:21:28 +0000121 IOptimizedNetworkPtr optNet = Optimize(*net, defaultBackends, runtime->GetDeviceSpec());
Aron Virginas-Tar70104002018-10-24 15:33:28 +0100122
123 // Loads it into the runtime.
124 NetworkId netId;
125 runtime->LoadNetwork(netId, std::move(optNet));
126
127 // Creates structures for input & output - matching android nn test.
128 std::vector<float> input1Data
129 {
130 1.f, 2.f, 3.f, 4.f, 5.f, 6.f, 7.f, 8.f, 9.f, 10.f, 11.f, 12.f
131 };
132 std::vector<float> input2Data
133 {
134 100.f, 200.f, 300.f, 400.f, 500.f, 600.f, 700.f, 800.f, 900.f, 1000.f, 1100.f, 1200.f
135 };
136 std::vector<float> outputData(12);
137
138 InputTensors inputTensors
139 {
140 {0,armnn::ConstTensor(runtime->GetInputTensorInfo(netId, 0), input1Data.data())},
141 {1,armnn::ConstTensor(runtime->GetInputTensorInfo(netId, 0), input2Data.data())}
142 };
143 OutputTensors outputTensors
144 {
145 {0,armnn::Tensor(runtime->GetOutputTensorInfo(netId, 0), outputData.data())}
146 };
147
148 // Does the inference.
149 runtime->EnqueueWorkload(netId, inputTensors, outputTensors);
150
151 // Checks the results
152 BOOST_TEST(outputData[0] == 101);
153 BOOST_TEST(outputData[1] == 202);
154 BOOST_TEST(outputData[2] == 303);
155 BOOST_TEST(outputData[3] == 404);
156 BOOST_TEST(outputData[4] == 505);
157 BOOST_TEST(outputData[5] == 606);
158 BOOST_TEST(outputData[6] == 707);
159 BOOST_TEST(outputData[7] == 808);
160 BOOST_TEST(outputData[8] == 909);
161 BOOST_TEST(outputData[9] == 1010);
162 BOOST_TEST(outputData[10] == 1111);
163 BOOST_TEST(outputData[11] == 1212);
164}
165
166BOOST_AUTO_TEST_CASE(MultipleOutputs)
167{
168 using namespace armnn;
169
170 // Create runtime in which test will run
171 armnn::IRuntime::CreationOptions options;
172 armnn::IRuntimePtr runtime(armnn::IRuntime::Create(options));
173
174 // Builds up the structure of the network.
175 INetworkPtr net(INetwork::Create());
176
177 IConnectableLayer* input = net->AddInputLayer(0);
178
179 // ReLu1
180 ActivationDescriptor activation1Descriptor;
181 activation1Descriptor.m_Function = ActivationFunction::BoundedReLu;
182 activation1Descriptor.m_A = 1.f;
183 activation1Descriptor.m_B = -1.f;
184 IConnectableLayer* activation1 = net->AddActivationLayer(activation1Descriptor);
185
186 // ReLu6
187 ActivationDescriptor activation2Descriptor;
188 activation2Descriptor.m_Function = ActivationFunction::BoundedReLu;
189 activation2Descriptor.m_A = 6.0f;
190 IConnectableLayer* activation2 = net->AddActivationLayer(activation2Descriptor);
191
192 // BoundedReLu(min=2, max=5)
193 ActivationDescriptor activation3Descriptor;
194 activation3Descriptor.m_Function = ActivationFunction::BoundedReLu;
195 activation3Descriptor.m_A = 5.0f;
196 activation3Descriptor.m_B = 2.0f;
197 IConnectableLayer* activation3 = net->AddActivationLayer(activation3Descriptor);
198
199 IConnectableLayer* output1 = net->AddOutputLayer(0);
200 IConnectableLayer* output2 = net->AddOutputLayer(1);
201 IConnectableLayer* output3 = net->AddOutputLayer(2);
202
203 input->GetOutputSlot(0).Connect(activation1->GetInputSlot(0));
204 input->GetOutputSlot(0).Connect(activation2->GetInputSlot(0));
205 input->GetOutputSlot(0).Connect(activation3->GetInputSlot(0));
206
207 activation1->GetOutputSlot(0).Connect(output1->GetInputSlot(0));
208 activation2->GetOutputSlot(0).Connect(output2->GetInputSlot(0));
209 activation3->GetOutputSlot(0).Connect(output3->GetInputSlot(0));
210
211 // Sets the tensors in the network.
212 TensorInfo tensorInfo(TensorShape({ 10 }), DataType::Float32);
213 input->GetOutputSlot(0).SetTensorInfo(tensorInfo);
214 activation1->GetOutputSlot(0).SetTensorInfo(tensorInfo);
215 activation2->GetOutputSlot(0).SetTensorInfo(tensorInfo);
216 activation3->GetOutputSlot(0).SetTensorInfo(tensorInfo);
217
218 // optimize the network
narpra01b9546cf2018-11-20 15:21:28 +0000219 IOptimizedNetworkPtr optNet = Optimize(*net, defaultBackends, runtime->GetDeviceSpec());
Aron Virginas-Tar70104002018-10-24 15:33:28 +0100220
221 // Loads it into the runtime.
222 NetworkId netId;
223 runtime->LoadNetwork(netId, std::move(optNet));
224
225 // Creates structures for input & output.
226 const std::vector<float> inputData{ 3.f, 5.f, 2.f, 3.f, 7.f, 0.f, -2.f, -1.f, 3.f, 3.f };
227
228 std::vector<float> output1Data(inputData.size());
229 std::vector<float> output2Data(inputData.size());
230 std::vector<float> output3Data(inputData.size());
231
232 InputTensors inputTensors
233 {
234 {0,armnn::ConstTensor(runtime->GetInputTensorInfo(netId, 0), inputData.data())}
235 };
236 OutputTensors outputTensors
237 {
238 {0,armnn::Tensor(runtime->GetOutputTensorInfo(netId, 0), output1Data.data())},
239 {1,armnn::Tensor(runtime->GetOutputTensorInfo(netId, 1), output2Data.data())},
240 {2,armnn::Tensor(runtime->GetOutputTensorInfo(netId, 2), output3Data.data())}
241 };
242
243 // Does the inference.
244 runtime->EnqueueWorkload(netId, inputTensors, outputTensors);
245
246 // Checks the results.
247 BOOST_TEST(output1Data == std::vector<float>({ 1.f, 1.f, 1.f, 1.f, 1.f, 0.f, -1.f, -1.f, 1.f, 1.f })); // ReLu1
248 BOOST_TEST(output2Data == std::vector<float>({ 3.f, 5.f, 2.f, 3.f, 6.f, 0.f, 0.f, 0.f, 3.f, 3.f })); // ReLu6
249 BOOST_TEST(output3Data == std::vector<float>({ 3.f, 5.f, 2.f, 3.f, 5.f, 2.f, 2.f, 2.f, 3.f, 3.f })); // [2, 5]
250}
251
Éanna Ó Catháin20e58802018-12-04 10:29:06 +0000252BOOST_AUTO_TEST_CASE(TrivialMin)
253{
254 using namespace armnn;
255
256 // Create runtime in which test will run
257 armnn::IRuntime::CreationOptions options;
258 armnn::IRuntimePtr runtime(armnn::IRuntime::Create(options));
259
260 // Builds up the structure of the network.
261 armnn::INetworkPtr net(INetwork::Create());
262
263 IConnectableLayer* input1 = net->AddInputLayer(0);
264 IConnectableLayer* input2 = net->AddInputLayer(1);
265 IConnectableLayer* min = net->AddMinimumLayer();
266 IConnectableLayer* output = net->AddOutputLayer(0);
267
268 input1->GetOutputSlot(0).Connect(min->GetInputSlot(0));
269 input2->GetOutputSlot(0).Connect(min->GetInputSlot(1));
270 min->GetOutputSlot(0).Connect(output->GetInputSlot(0));
271
272 // Sets the tensors in the network.
273 TensorInfo tensorInfo(TensorShape({1, 1, 1, 4}), DataType::Float32);
274 input1->GetOutputSlot(0).SetTensorInfo(tensorInfo);
275 input2->GetOutputSlot(0).SetTensorInfo(tensorInfo);
276 min->GetOutputSlot(0).SetTensorInfo(tensorInfo);
277
278 // optimize the network
279 IOptimizedNetworkPtr optNet = Optimize(*net, defaultBackends, runtime->GetDeviceSpec());
280
281 // Loads it into the runtime.
282 NetworkId netId;
283 runtime->LoadNetwork(netId, std::move(optNet));
284
285 // Creates structures for input & output - matching android nn test.
286 std::vector<float> input1Data
287 {
288 1.0f, 2.0f, 3.0f, 4.0f
289 };
290 std::vector<float> input2Data
291 {
292 2.0f, 1.0f, 5.0f, 2.0f
293 };
294 std::vector<float> outputData(4);
295
296 InputTensors inputTensors
297 {
298 {0,armnn::ConstTensor(runtime->GetInputTensorInfo(netId, 0), input1Data.data())},
299 {1,armnn::ConstTensor(runtime->GetInputTensorInfo(netId, 0), input2Data.data())}
300 };
301 OutputTensors outputTensors
302 {
303 {0,armnn::Tensor(runtime->GetOutputTensorInfo(netId, 0), outputData.data())}
304 };
305
306 // Does the inference.
307 runtime->EnqueueWorkload(netId, inputTensors, outputTensors);
308
309 // Checks the results
310 BOOST_TEST(outputData[0] == 1);
311 BOOST_TEST(outputData[1] == 1);
312 BOOST_TEST(outputData[2] == 3);
313 BOOST_TEST(outputData[3] == 2);
314}
315
FrancisMurtagh2262bbd2018-12-20 16:09:45 +0000316BOOST_AUTO_TEST_CASE(RefEqualSimpleEndToEndTest)
317{
kevmay012b4d88e2019-01-24 14:05:09 +0000318 const std::vector<uint8_t> expectedOutput({ 1, 1, 1, 1, 0, 0, 0, 0,
319 0, 0, 0, 0, 1, 1, 1, 1 });
FrancisMurtagh2262bbd2018-12-20 16:09:45 +0000320
kevmay012b4d88e2019-01-24 14:05:09 +0000321 ArithmeticSimpleEndToEnd<armnn::DataType::Float32, armnn::DataType::Boolean>(defaultBackends,
322 LayerType::Equal,
323 expectedOutput);
FrancisMurtagh2262bbd2018-12-20 16:09:45 +0000324}
325
326BOOST_AUTO_TEST_CASE(RefGreaterSimpleEndToEndTest)
327{
kevmay012b4d88e2019-01-24 14:05:09 +0000328 const std::vector<uint8_t> expectedOutput({ 0, 0, 0, 0, 1, 1, 1, 1,
329 0, 0, 0, 0, 0, 0, 0, 0 });
FrancisMurtagh2262bbd2018-12-20 16:09:45 +0000330
kevmay012b4d88e2019-01-24 14:05:09 +0000331 ArithmeticSimpleEndToEnd<armnn::DataType::Float32, armnn::DataType::Boolean>(defaultBackends,
332 LayerType::Greater,
333 expectedOutput);
FrancisMurtagh2262bbd2018-12-20 16:09:45 +0000334}
335
336BOOST_AUTO_TEST_CASE(RefEqualSimpleEndToEndUint8Test)
337{
338 const std::vector<uint8_t> expectedOutput({ 1, 1, 1, 1, 0, 0, 0, 0,
339 0, 0, 0, 0, 1, 1, 1, 1 });
340
kevmay012b4d88e2019-01-24 14:05:09 +0000341 ArithmeticSimpleEndToEnd<armnn::DataType::QuantisedAsymm8, armnn::DataType::Boolean>(defaultBackends,
342 LayerType::Equal,
343 expectedOutput);
FrancisMurtagh2262bbd2018-12-20 16:09:45 +0000344}
345
346BOOST_AUTO_TEST_CASE(RefGreaterSimpleEndToEndUint8Test)
347{
348 const std::vector<uint8_t> expectedOutput({ 0, 0, 0, 0, 1, 1, 1, 1,
349 0, 0, 0, 0, 0, 0, 0, 0 });
350
kevmay012b4d88e2019-01-24 14:05:09 +0000351 ArithmeticSimpleEndToEnd<armnn::DataType::QuantisedAsymm8, armnn::DataType::Boolean>(defaultBackends,
352 LayerType::Greater,
353 expectedOutput);
FrancisMurtagh2262bbd2018-12-20 16:09:45 +0000354}
355
356BOOST_AUTO_TEST_CASE(RefEqualBroadcastEndToEndTest)
357{
kevmay012b4d88e2019-01-24 14:05:09 +0000358 const std::vector<uint8_t> expectedOutput({ 1, 0, 1, 1, 0, 0,
359 0, 0, 0, 0, 0, 0 });
FrancisMurtagh2262bbd2018-12-20 16:09:45 +0000360
kevmay012b4d88e2019-01-24 14:05:09 +0000361 ArithmeticBroadcastEndToEnd<armnn::DataType::Float32, armnn::DataType::Boolean>(defaultBackends,
362 LayerType::Equal,
363 expectedOutput);
FrancisMurtagh2262bbd2018-12-20 16:09:45 +0000364}
365
366BOOST_AUTO_TEST_CASE(RefGreaterBroadcastEndToEndTest)
367{
kevmay012b4d88e2019-01-24 14:05:09 +0000368 const std::vector<uint8_t> expectedOutput({ 0, 1, 0, 0, 0, 1,
369 1, 1, 1, 1, 1, 1 });
FrancisMurtagh2262bbd2018-12-20 16:09:45 +0000370
kevmay012b4d88e2019-01-24 14:05:09 +0000371 ArithmeticBroadcastEndToEnd<armnn::DataType::Float32, armnn::DataType::Boolean>(defaultBackends,
372 LayerType::Greater,
373 expectedOutput);
FrancisMurtagh2262bbd2018-12-20 16:09:45 +0000374}
375
376BOOST_AUTO_TEST_CASE(RefEqualBroadcastEndToEndUint8Test)
377{
378 const std::vector<uint8_t > expectedOutput({ 1, 0, 1, 1, 0, 0,
379 0, 0, 0, 0, 0, 0 });
380
kevmay012b4d88e2019-01-24 14:05:09 +0000381 ArithmeticBroadcastEndToEnd<armnn::DataType::QuantisedAsymm8, armnn::DataType::Boolean>(defaultBackends,
382 LayerType::Equal,
383 expectedOutput);
FrancisMurtagh2262bbd2018-12-20 16:09:45 +0000384}
385
386BOOST_AUTO_TEST_CASE(RefGreaterBroadcastEndToEndUint8Test)
387{
388 const std::vector<uint8_t> expectedOutput({ 0, 1, 0, 0, 0, 1,
389 1, 1, 1, 1, 1, 1 });
390
kevmay012b4d88e2019-01-24 14:05:09 +0000391 ArithmeticBroadcastEndToEnd<armnn::DataType::QuantisedAsymm8, armnn::DataType::Boolean>(defaultBackends,
392 LayerType::Greater,
393 expectedOutput);
FrancisMurtagh2262bbd2018-12-20 16:09:45 +0000394}
Éanna Ó Catháin20e58802018-12-04 10:29:06 +0000395
narpra01b9546cf2018-11-20 15:21:28 +0000396BOOST_AUTO_TEST_CASE(RefMergerEndToEndDim0Test)
397{
Nattapat Chaimanowong649dd952019-01-22 16:10:44 +0000398 MergerDim0EndToEnd<armnn::DataType::Float32>(defaultBackends);
narpra01b9546cf2018-11-20 15:21:28 +0000399}
400
401BOOST_AUTO_TEST_CASE(RefMergerEndToEndDim0Uint8Test)
402{
Nattapat Chaimanowong649dd952019-01-22 16:10:44 +0000403 MergerDim0EndToEnd<armnn::DataType::QuantisedAsymm8>(defaultBackends);
narpra01b9546cf2018-11-20 15:21:28 +0000404}
405
406BOOST_AUTO_TEST_CASE(RefMergerEndToEndDim1Test)
407{
Nattapat Chaimanowong649dd952019-01-22 16:10:44 +0000408 MergerDim1EndToEnd<armnn::DataType::Float32>(defaultBackends);
narpra01b9546cf2018-11-20 15:21:28 +0000409}
410
411BOOST_AUTO_TEST_CASE(RefMergerEndToEndDim1Uint8Test)
412{
Nattapat Chaimanowong649dd952019-01-22 16:10:44 +0000413 MergerDim1EndToEnd<armnn::DataType::QuantisedAsymm8>(defaultBackends);
narpra01b9546cf2018-11-20 15:21:28 +0000414}
415
416BOOST_AUTO_TEST_CASE(RefMergerEndToEndDim2Test)
417{
Nattapat Chaimanowong649dd952019-01-22 16:10:44 +0000418 MergerDim2EndToEnd<armnn::DataType::Float32>(defaultBackends);
narpra01b9546cf2018-11-20 15:21:28 +0000419}
420
421BOOST_AUTO_TEST_CASE(RefMergerEndToEndDim2Uint8Test)
422{
Nattapat Chaimanowong649dd952019-01-22 16:10:44 +0000423 MergerDim2EndToEnd<armnn::DataType::QuantisedAsymm8>(defaultBackends);
narpra01b9546cf2018-11-20 15:21:28 +0000424}
425
426BOOST_AUTO_TEST_CASE(RefMergerEndToEndDim3Test)
427{
Nattapat Chaimanowong649dd952019-01-22 16:10:44 +0000428 MergerDim3EndToEnd<armnn::DataType::Float32>(defaultBackends);
narpra01b9546cf2018-11-20 15:21:28 +0000429}
430
431BOOST_AUTO_TEST_CASE(RefMergerEndToEndDim3Uint8Test)
432{
Nattapat Chaimanowong649dd952019-01-22 16:10:44 +0000433 MergerDim3EndToEnd<armnn::DataType::QuantisedAsymm8>(defaultBackends);
narpra01b9546cf2018-11-20 15:21:28 +0000434}
435
narpra01db2b1602019-01-23 15:23:11 +0000436BOOST_AUTO_TEST_CASE(RefGatherFloatTest)
437{
438 GatherEndToEnd<armnn::DataType::Float32>(defaultBackends);
439}
440
441BOOST_AUTO_TEST_CASE(RefGatherUint8Test)
442{
443 GatherEndToEnd<armnn::DataType::QuantisedAsymm8>(defaultBackends);
444}
445
446BOOST_AUTO_TEST_CASE(RefGatherMultiDimFloatTest)
447{
448 GatherMultiDimEndToEnd<armnn::DataType::Float32>(defaultBackends);
449}
450
451BOOST_AUTO_TEST_CASE(RefGatherMultiDimUint8Test)
452{
453 GatherMultiDimEndToEnd<armnn::DataType::QuantisedAsymm8>(defaultBackends);
454}
455
Nattapat Chaimanowong649dd952019-01-22 16:10:44 +0000456BOOST_AUTO_TEST_SUITE_END()