blob: fc4a56cf6a2cf413e1e047dd31cc8e4d5097b947 [file] [log] [blame]
surmeh0149b9e102018-05-17 14:11:25 +01001//
Mike Kellye2d611e2021-10-14 12:35:58 +01002// Copyright © 2017 Arm Ltd and Contributors. All rights reserved.
David Beck93e48982018-09-05 13:05:09 +01003// SPDX-License-Identifier: MIT
surmeh0149b9e102018-05-17 14:11:25 +01004//
Mike Kellye2d611e2021-10-14 12:35:58 +01005
surmeh0149b9e102018-05-17 14:11:25 +01006#include "DriverTestHelpers.hpp"
7#include "TestTensor.hpp"
Aron Virginas-Tar44cfd842019-06-14 15:45:03 +01008
Colm Doneland7fdbe22020-10-30 16:57:43 +00009#include <array>
Aron Virginas-Tar44cfd842019-06-14 15:45:03 +010010#include <log/log.h>
surmeh0149b9e102018-05-17 14:11:25 +010011
telsoa01ce3e84a2018-08-31 09:31:35 +010012using namespace android::hardware;
surmeh0149b9e102018-05-17 14:11:25 +010013using namespace driverTestHelpers;
telsoa01ce3e84a2018-08-31 09:31:35 +010014using namespace armnn_driver;
surmeh0149b9e102018-05-17 14:11:25 +010015
Aron Virginas-Tar44cfd842019-06-14 15:45:03 +010016using HalPolicy = hal_1_0::HalPolicy;
Sadik Armagan188675f2021-02-12 17:16:42 +000017using RequestArgument = V1_0::RequestArgument;
Aron Virginas-Tar44cfd842019-06-14 15:45:03 +010018
surmeh0149b9e102018-05-17 14:11:25 +010019namespace
20{
21
22void
Jim Flynn7b1e41f2019-05-22 18:00:04 +010023ConcatTestImpl(const std::vector<const TestTensor*> & inputs,
surmeh0149b9e102018-05-17 14:11:25 +010024 int32_t concatAxis,
25 const TestTensor & expectedOutputTensor,
telsoa01ce3e84a2018-08-31 09:31:35 +010026 armnn::Compute computeDevice,
Kevin Mayec1e5b82020-02-26 17:00:39 +000027 V1_0::ErrorStatus expectedPrepareStatus=V1_0::ErrorStatus::NONE,
28 V1_0::ErrorStatus expectedExecStatus=V1_0::ErrorStatus::NONE)
surmeh0149b9e102018-05-17 14:11:25 +010029{
telsoa01ce3e84a2018-08-31 09:31:35 +010030 std::unique_ptr<ArmnnDriver> driver = std::make_unique<ArmnnDriver>(DriverOptions(computeDevice));
Aron Virginas-Tar44cfd842019-06-14 15:45:03 +010031 HalPolicy::Model model{};
surmeh0149b9e102018-05-17 14:11:25 +010032
33 hidl_vec<uint32_t> modelInputIds;
34 modelInputIds.resize(inputs.size()+1);
35 for (uint32_t i = 0; i<inputs.size(); ++i)
36 {
37 modelInputIds[i] = i;
Aron Virginas-Tar44cfd842019-06-14 15:45:03 +010038 AddInputOperand<HalPolicy>(model, inputs[i]->GetDimensions());
surmeh0149b9e102018-05-17 14:11:25 +010039 }
40 modelInputIds[inputs.size()] = inputs.size(); // add an id for the axis too
Aron Virginas-Tar44cfd842019-06-14 15:45:03 +010041 AddIntOperand<HalPolicy>(model, concatAxis);
42 AddOutputOperand<HalPolicy>(model, expectedOutputTensor.GetDimensions());
surmeh0149b9e102018-05-17 14:11:25 +010043
44 // make the concat operation
45 model.operations.resize(1);
Aron Virginas-Tar44cfd842019-06-14 15:45:03 +010046 model.operations[0].type = HalPolicy::OperationType::CONCATENATION;
surmeh0149b9e102018-05-17 14:11:25 +010047 model.operations[0].inputs = modelInputIds;
48 model.operations[0].outputs = hidl_vec<uint32_t>{static_cast<uint32_t>(inputs.size()+1)};
49
50 // make the prepared model
Sadik Armagan9150bff2021-05-26 15:40:53 +010051 V1_0::ErrorStatus prepareStatus = V1_0::ErrorStatus::NONE;
Sadik Armagane6e54a82019-05-08 10:18:05 +010052 android::sp<V1_0::IPreparedModel> preparedModel = PrepareModelWithStatus(model,
Aron Virginas-Tar44cfd842019-06-14 15:45:03 +010053 *driver,
54 prepareStatus,
55 expectedPrepareStatus);
Mike Kellye2d611e2021-10-14 12:35:58 +010056 DOCTEST_CHECK((int)prepareStatus == (int)expectedPrepareStatus);
Kevin Mayec1e5b82020-02-26 17:00:39 +000057 if (prepareStatus != V1_0::ErrorStatus::NONE)
surmeh0149b9e102018-05-17 14:11:25 +010058 {
59 // prepare failed, we cannot continue
60 return;
61 }
62
Mike Kellye2d611e2021-10-14 12:35:58 +010063 DOCTEST_CHECK(preparedModel.get() != nullptr);
surmeh0149b9e102018-05-17 14:11:25 +010064 if (preparedModel.get() == nullptr)
65 {
66 // don't spoil other tests if prepare failed
67 return;
68 }
69
70 // construct the request
71 hidl_vec<RequestArgument> inputArguments;
72 hidl_vec<RequestArgument> outputArguments;
73 inputArguments.resize(inputs.size());
74 outputArguments.resize(1);
75
76 // the request's memory pools will follow the same order as
77 // the inputs
78 for (uint32_t i = 0; i<inputs.size(); ++i)
79 {
Sadik Armagan188675f2021-02-12 17:16:42 +000080 V1_0::DataLocation inloc = {};
surmeh0149b9e102018-05-17 14:11:25 +010081 inloc.poolIndex = i;
82 inloc.offset = 0;
83 inloc.length = inputs[i]->GetNumElements() * sizeof(float);
84 RequestArgument input = {};
85 input.location = inloc;
86 input.dimensions = inputs[i]->GetDimensions();
87 inputArguments[i] = input;
88 }
89
90 // and an additional memory pool is needed for the output
91 {
Sadik Armagan188675f2021-02-12 17:16:42 +000092 V1_0::DataLocation outloc = {};
surmeh0149b9e102018-05-17 14:11:25 +010093 outloc.poolIndex = inputs.size();
94 outloc.offset = 0;
95 outloc.length = expectedOutputTensor.GetNumElements() * sizeof(float);
96 RequestArgument output = {};
97 output.location = outloc;
98 output.dimensions = expectedOutputTensor.GetDimensions();
99 outputArguments[0] = output;
100 }
101
102 // make the request based on the arguments
Kevin Mayec1e5b82020-02-26 17:00:39 +0000103 V1_0::Request request = {};
surmeh0149b9e102018-05-17 14:11:25 +0100104 request.inputs = inputArguments;
105 request.outputs = outputArguments;
106
107 // set the input data
108 for (uint32_t i = 0; i<inputs.size(); ++i)
109 {
110 AddPoolAndSetData(inputs[i]->GetNumElements(),
111 request,
112 inputs[i]->GetData());
113 }
114
115 // add memory for the output
Ellen Norris-Thompson976ad3e2019-08-21 15:21:14 +0100116 android::sp<IMemory> outMemory = AddPoolAndGetData<float>(expectedOutputTensor.GetNumElements(), request);
surmeh0149b9e102018-05-17 14:11:25 +0100117 float* outdata = static_cast<float*>(static_cast<void*>(outMemory->getPointer()));
118
119 // run the execution
Mike Kellye2d611e2021-10-14 12:35:58 +0100120 DOCTEST_CHECK(preparedModel.get() != nullptr);
surmeh0149b9e102018-05-17 14:11:25 +0100121 auto execStatus = Execute(preparedModel, request, expectedExecStatus);
Mike Kellye2d611e2021-10-14 12:35:58 +0100122 DOCTEST_CHECK((int)execStatus == (int)expectedExecStatus);
surmeh0149b9e102018-05-17 14:11:25 +0100123
Kevin Mayec1e5b82020-02-26 17:00:39 +0000124 if (execStatus == V1_0::ErrorStatus::NONE)
surmeh0149b9e102018-05-17 14:11:25 +0100125 {
126 // check the result if there was no error
127 const float * expectedOutput = expectedOutputTensor.GetData();
128 for (unsigned int i=0; i<expectedOutputTensor.GetNumElements();++i)
129 {
Mike Kellye2d611e2021-10-14 12:35:58 +0100130 DOCTEST_CHECK(outdata[i] == expectedOutput[i]);
surmeh0149b9e102018-05-17 14:11:25 +0100131 }
132 }
133}
134
Sadik Armagan9150bff2021-05-26 15:40:53 +0100135/// Test cases...
136void SimpleConcatAxis0(armnn::Compute computeDevice)
surmeh0149b9e102018-05-17 14:11:25 +0100137{
138 int32_t axis = 0;
Sadik Armagan9150bff2021-05-26 15:40:53 +0100139 TestTensor aIn{armnn::TensorShape{1, 1, 1, 1}, {0}};
140 TestTensor bIn{armnn::TensorShape{1, 1, 1, 1}, {1}};
141 TestTensor cIn{armnn::TensorShape{1, 1, 1, 1}, {2}};
surmeh0149b9e102018-05-17 14:11:25 +0100142
Sadik Armagan9150bff2021-05-26 15:40:53 +0100143 TestTensor expected{armnn::TensorShape{3, 1, 1, 1}, {0, 1, 2}};
144 ConcatTestImpl({&aIn, &bIn, &cIn}, axis, expected, computeDevice);
surmeh0149b9e102018-05-17 14:11:25 +0100145}
146
Sadik Armagan9150bff2021-05-26 15:40:53 +0100147void ConcatAxis0NoInterleave(armnn::Compute computeDevice)
surmeh0149b9e102018-05-17 14:11:25 +0100148{
149 int32_t axis = 0;
Sadik Armagan9150bff2021-05-26 15:40:53 +0100150 TestTensor aIn{armnn::TensorShape{2, 1, 2, 1}, {0, 1,
151 2, 3}};
152 TestTensor bIn{armnn::TensorShape{3, 1, 2, 1}, {4, 5,
153 6, 7,
154 8, 9}};
155 TestTensor cIn{armnn::TensorShape{1, 1, 2, 1}, {10, 11}};
surmeh0149b9e102018-05-17 14:11:25 +0100156
Sadik Armagan9150bff2021-05-26 15:40:53 +0100157 TestTensor expected{armnn::TensorShape{6, 1, 2, 1}, {0, 1,
158 2, 3,
159 4, 5,
160 6, 7,
161 8, 9,
162 10, 11}};
surmeh0149b9e102018-05-17 14:11:25 +0100163
Sadik Armagan9150bff2021-05-26 15:40:53 +0100164 ConcatTestImpl({&aIn, &bIn, &cIn}, axis, expected, computeDevice);
surmeh0149b9e102018-05-17 14:11:25 +0100165}
166
Sadik Armagan9150bff2021-05-26 15:40:53 +0100167void SimpleConcatAxis1(armnn::Compute computeDevice)
surmeh0149b9e102018-05-17 14:11:25 +0100168{
169 int32_t axis = 1;
Sadik Armagan9150bff2021-05-26 15:40:53 +0100170 TestTensor aIn{armnn::TensorShape{1, 1, 1, 1}, {0}};
171 TestTensor bIn{armnn::TensorShape{1, 1, 1, 1}, {1}};
172 TestTensor cIn{armnn::TensorShape{1, 1, 1, 1}, {2}};
surmeh0149b9e102018-05-17 14:11:25 +0100173
Sadik Armagan9150bff2021-05-26 15:40:53 +0100174 TestTensor expected{armnn::TensorShape{1, 3, 1, 1}, {0, 1, 2}};
surmeh0149b9e102018-05-17 14:11:25 +0100175
Sadik Armagan9150bff2021-05-26 15:40:53 +0100176 ConcatTestImpl({&aIn, &bIn, &cIn}, axis, expected, computeDevice);
surmeh0149b9e102018-05-17 14:11:25 +0100177}
178
Sadik Armagan9150bff2021-05-26 15:40:53 +0100179void ConcatAxis1NoInterleave(armnn::Compute computeDevice)
surmeh0149b9e102018-05-17 14:11:25 +0100180{
181 int32_t axis = 1;
Sadik Armagan9150bff2021-05-26 15:40:53 +0100182 TestTensor aIn{armnn::TensorShape{1, 2, 2, 1}, {0, 1,
183 2, 3}};
184 TestTensor bIn{armnn::TensorShape{1, 3, 2, 1}, {4, 5,
185 6, 7,
186 8, 9}};
187 TestTensor cIn{armnn::TensorShape{1, 1, 2, 1}, {10, 11}};
surmeh0149b9e102018-05-17 14:11:25 +0100188
Sadik Armagan9150bff2021-05-26 15:40:53 +0100189 TestTensor expected{armnn::TensorShape{1, 6, 2, 1}, {0, 1,
190 2, 3,
191 4, 5,
192 6, 7,
193 8, 9,
194 10, 11}};
surmeh0149b9e102018-05-17 14:11:25 +0100195
Sadik Armagan9150bff2021-05-26 15:40:53 +0100196 ConcatTestImpl({&aIn, &bIn, &cIn}, axis, expected, computeDevice);
surmeh0149b9e102018-05-17 14:11:25 +0100197}
198
Sadik Armagan9150bff2021-05-26 15:40:53 +0100199void SimpleConcatAxis1DoInterleave(armnn::Compute computeDevice)
surmeh0149b9e102018-05-17 14:11:25 +0100200{
201 int32_t axis = 1;
Sadik Armagan9150bff2021-05-26 15:40:53 +0100202 TestTensor aIn{armnn::TensorShape{2, 2, 1, 1}, {0, 1,
203 2, 3}};
204 TestTensor bIn{armnn::TensorShape{2, 3, 1, 1}, {4, 5, 6,
205 7, 8, 9}};
206 TestTensor cIn{armnn::TensorShape{2, 1, 1, 1}, {10,
207 11}};
surmeh0149b9e102018-05-17 14:11:25 +0100208
Sadik Armagan9150bff2021-05-26 15:40:53 +0100209 TestTensor expected{armnn::TensorShape{2, 6, 1, 1}, {0, 1, 4, 5, 6, 10,
210 2, 3, 7, 8, 9, 11}};
surmeh0149b9e102018-05-17 14:11:25 +0100211
Sadik Armagan9150bff2021-05-26 15:40:53 +0100212 ConcatTestImpl({&aIn, &bIn, &cIn}, axis, expected, computeDevice);
surmeh0149b9e102018-05-17 14:11:25 +0100213}
214
Sadik Armagan9150bff2021-05-26 15:40:53 +0100215void SimpleConcatAxis2(armnn::Compute computeDevice)
surmeh0149b9e102018-05-17 14:11:25 +0100216{
217 int32_t axis = 2;
Sadik Armagan9150bff2021-05-26 15:40:53 +0100218 TestTensor aIn{armnn::TensorShape{1, 1, 1, 1}, {0}};
219 TestTensor bIn{armnn::TensorShape{1, 1, 1, 1}, {1}};
220 TestTensor cIn{armnn::TensorShape{1, 1, 1, 1}, {2}};
surmeh0149b9e102018-05-17 14:11:25 +0100221
Sadik Armagan9150bff2021-05-26 15:40:53 +0100222 TestTensor expected{armnn::TensorShape{1, 1, 3, 1}, {0, 1, 2}};
surmeh0149b9e102018-05-17 14:11:25 +0100223
Sadik Armagan9150bff2021-05-26 15:40:53 +0100224 ConcatTestImpl({&aIn, &bIn, &cIn}, axis, expected, computeDevice);
surmeh0149b9e102018-05-17 14:11:25 +0100225}
226
Sadik Armagan9150bff2021-05-26 15:40:53 +0100227void ConcatAxis2NoInterleave(armnn::Compute computeDevice)
surmeh0149b9e102018-05-17 14:11:25 +0100228{
229 int32_t axis = 2;
Sadik Armagan9150bff2021-05-26 15:40:53 +0100230 TestTensor aIn{armnn::TensorShape{1, 1, 2, 2}, {0, 1,
231 2, 3}};
232 TestTensor bIn{armnn::TensorShape{1, 1, 3, 2}, {4, 5,
233 6, 7,
234 8, 9}};
235 TestTensor cIn{armnn::TensorShape{1, 1, 1, 2}, {10, 11}};
surmeh0149b9e102018-05-17 14:11:25 +0100236
Sadik Armagan9150bff2021-05-26 15:40:53 +0100237 TestTensor expected{armnn::TensorShape{1, 1, 6, 2}, {0, 1,
238 2, 3,
239 4, 5,
240 6, 7,
241 8, 9,
242 10, 11}};
surmeh0149b9e102018-05-17 14:11:25 +0100243
Sadik Armagan9150bff2021-05-26 15:40:53 +0100244 ConcatTestImpl({&aIn, &bIn, &cIn}, axis, expected, computeDevice);
surmeh0149b9e102018-05-17 14:11:25 +0100245}
246
Sadik Armagan9150bff2021-05-26 15:40:53 +0100247void SimpleConcatAxis2DoInterleave(armnn::Compute computeDevice)
surmeh0149b9e102018-05-17 14:11:25 +0100248{
249 int32_t axis = 2;
Sadik Armagan9150bff2021-05-26 15:40:53 +0100250 TestTensor aIn{armnn::TensorShape{1, 2, 2, 1}, {0, 1,
251 2, 3}};
252 TestTensor bIn{armnn::TensorShape{1, 2, 3, 1}, {4, 5, 6,
253 7, 8, 9}};
254 TestTensor cIn{armnn::TensorShape{1, 2, 1, 1}, {10,
255 11}};
surmeh0149b9e102018-05-17 14:11:25 +0100256
Sadik Armagan9150bff2021-05-26 15:40:53 +0100257 TestTensor expected{armnn::TensorShape{1, 2, 6, 1}, {0, 1, 4, 5, 6, 10,
258 2, 3, 7, 8, 9, 11}};
surmeh0149b9e102018-05-17 14:11:25 +0100259
Sadik Armagan9150bff2021-05-26 15:40:53 +0100260 ConcatTestImpl({&aIn, &bIn, &cIn}, axis, expected, computeDevice);
surmeh0149b9e102018-05-17 14:11:25 +0100261}
262
Sadik Armagan9150bff2021-05-26 15:40:53 +0100263void SimpleConcatAxis3(armnn::Compute computeDevice)
surmeh0149b9e102018-05-17 14:11:25 +0100264{
265 int32_t axis = 3;
Sadik Armagan9150bff2021-05-26 15:40:53 +0100266 TestTensor aIn{armnn::TensorShape{1, 1, 1, 1}, {0}};
267 TestTensor bIn{armnn::TensorShape{1, 1, 1, 1}, {1}};
268 TestTensor cIn{armnn::TensorShape{1, 1, 1, 1}, {2}};
surmeh0149b9e102018-05-17 14:11:25 +0100269
Sadik Armagan9150bff2021-05-26 15:40:53 +0100270 TestTensor expected{armnn::TensorShape{1, 1, 1, 3}, {0, 1, 2}};
surmeh0149b9e102018-05-17 14:11:25 +0100271
Sadik Armagan9150bff2021-05-26 15:40:53 +0100272 ConcatTestImpl({&aIn, &bIn, &cIn}, axis, expected, computeDevice);
surmeh0149b9e102018-05-17 14:11:25 +0100273}
274
Sadik Armagan9150bff2021-05-26 15:40:53 +0100275void SimpleConcatAxis3DoInterleave(armnn::Compute computeDevice)
surmeh0149b9e102018-05-17 14:11:25 +0100276{
277 int32_t axis = 3;
Sadik Armagan9150bff2021-05-26 15:40:53 +0100278 TestTensor aIn{armnn::TensorShape{1, 1, 2, 2}, {0, 1,
279 2, 3}};
280 TestTensor bIn{armnn::TensorShape{1, 1, 2, 3}, {4, 5, 6,
281 7, 8, 9}};
282 TestTensor cIn{armnn::TensorShape{1, 1, 2, 1}, {10,
283 11}};
surmeh0149b9e102018-05-17 14:11:25 +0100284
Sadik Armagan9150bff2021-05-26 15:40:53 +0100285 TestTensor expected{armnn::TensorShape{1, 1, 2, 6}, {0, 1, 4, 5, 6, 10,
286 2, 3, 7, 8, 9, 11}};
surmeh0149b9e102018-05-17 14:11:25 +0100287
Sadik Armagan9150bff2021-05-26 15:40:53 +0100288 ConcatTestImpl({&aIn, &bIn, &cIn}, axis, expected, computeDevice);
surmeh0149b9e102018-05-17 14:11:25 +0100289}
290
Sadik Armagan9150bff2021-05-26 15:40:53 +0100291void AxisTooBig(armnn::Compute computeDevice)
surmeh0149b9e102018-05-17 14:11:25 +0100292{
293 int32_t axis = 4;
Sadik Armagan9150bff2021-05-26 15:40:53 +0100294 TestTensor aIn{armnn::TensorShape{1, 1, 1, 1}, {0}};
295 TestTensor bIn{armnn::TensorShape{1, 1, 1, 1}, {0}};
surmeh0149b9e102018-05-17 14:11:25 +0100296
297 // The axis must be within the range of [-rank(values), rank(values))
298 // see: https://www.tensorflow.org/api_docs/python/tf/concat
Sadik Armagan9150bff2021-05-26 15:40:53 +0100299 TestTensor uncheckedOutput{armnn::TensorShape{1, 1, 1, 1}, {0}};
Kevin Mayec1e5b82020-02-26 17:00:39 +0000300 V1_0::ErrorStatus expectedParserStatus = V1_0::ErrorStatus::GENERAL_FAILURE;
Sadik Armagan9150bff2021-05-26 15:40:53 +0100301 ConcatTestImpl({&aIn, &bIn}, axis, uncheckedOutput, computeDevice, expectedParserStatus);
surmeh0149b9e102018-05-17 14:11:25 +0100302}
303
Sadik Armagan9150bff2021-05-26 15:40:53 +0100304void AxisTooSmall(armnn::Compute computeDevice)
surmeh0149b9e102018-05-17 14:11:25 +0100305{
306 int32_t axis = -5;
Sadik Armagan9150bff2021-05-26 15:40:53 +0100307 TestTensor aIn{armnn::TensorShape{1, 1, 1, 1}, {0}};
308 TestTensor bIn{armnn::TensorShape{1, 1, 1, 1}, {0}};
surmeh0149b9e102018-05-17 14:11:25 +0100309
310 // The axis must be within the range of [-rank(values), rank(values))
311 // see: https://www.tensorflow.org/api_docs/python/tf/concat
Sadik Armagan9150bff2021-05-26 15:40:53 +0100312 TestTensor uncheckedOutput{armnn::TensorShape{1, 1, 1, 1}, {0}};
Kevin Mayec1e5b82020-02-26 17:00:39 +0000313 V1_0::ErrorStatus expectedParserStatus = V1_0::ErrorStatus::GENERAL_FAILURE;
Sadik Armagan9150bff2021-05-26 15:40:53 +0100314 ConcatTestImpl({&aIn, &bIn}, axis, uncheckedOutput, computeDevice, expectedParserStatus);
surmeh0149b9e102018-05-17 14:11:25 +0100315}
316
Sadik Armagan9150bff2021-05-26 15:40:53 +0100317void TooFewInputs(armnn::Compute computeDevice)
surmeh0149b9e102018-05-17 14:11:25 +0100318{
319 int32_t axis = 0;
Sadik Armagan9150bff2021-05-26 15:40:53 +0100320 TestTensor aIn{armnn::TensorShape{1, 1, 1, 1}, {0}};
surmeh0149b9e102018-05-17 14:11:25 +0100321
322 // We need at least two tensors to concatenate
Kevin Mayec1e5b82020-02-26 17:00:39 +0000323 V1_0::ErrorStatus expectedParserStatus = V1_0::ErrorStatus::GENERAL_FAILURE;
Sadik Armagan9150bff2021-05-26 15:40:53 +0100324 ConcatTestImpl({&aIn}, axis, aIn, computeDevice, expectedParserStatus);
surmeh0149b9e102018-05-17 14:11:25 +0100325}
326
Sadik Armagan9150bff2021-05-26 15:40:53 +0100327void MismatchedInputDimensions(armnn::Compute computeDevice)
surmeh0149b9e102018-05-17 14:11:25 +0100328{
329 int32_t axis = 3;
Sadik Armagan9150bff2021-05-26 15:40:53 +0100330 TestTensor aIn{armnn::TensorShape{1, 1, 2, 2}, {0, 1,
331 2, 3}};
332 TestTensor bIn{armnn::TensorShape{1, 1, 2, 3}, {4, 5, 6,
333 7, 8, 9}};
334 TestTensor mismatched{armnn::TensorShape{1, 1, 1, 1}, {10}};
surmeh0149b9e102018-05-17 14:11:25 +0100335
Sadik Armagan9150bff2021-05-26 15:40:53 +0100336 TestTensor expected{armnn::TensorShape{1, 1, 2, 6}, {0, 1, 4, 5, 6, 10,
337 2, 3, 7, 8, 9, 11}};
surmeh0149b9e102018-05-17 14:11:25 +0100338
339 // The input dimensions must be compatible
Kevin Mayec1e5b82020-02-26 17:00:39 +0000340 V1_0::ErrorStatus expectedParserStatus = V1_0::ErrorStatus::GENERAL_FAILURE;
Sadik Armagan9150bff2021-05-26 15:40:53 +0100341 ConcatTestImpl({&aIn, &bIn, &mismatched}, axis, expected, computeDevice, expectedParserStatus);
surmeh0149b9e102018-05-17 14:11:25 +0100342}
343
Sadik Armagan9150bff2021-05-26 15:40:53 +0100344void MismatchedInputRanks(armnn::Compute computeDevice)
surmeh0149b9e102018-05-17 14:11:25 +0100345{
346 int32_t axis = 2;
Sadik Armagan9150bff2021-05-26 15:40:53 +0100347 TestTensor aIn{armnn::TensorShape{1, 1, 2}, {0, 1}};
348 TestTensor bIn{armnn::TensorShape{1, 1}, {4}};
349 TestTensor expected{armnn::TensorShape{1, 1, 3}, {0, 1, 4}};
surmeh0149b9e102018-05-17 14:11:25 +0100350
351 // The input dimensions must be compatible
Kevin Mayec1e5b82020-02-26 17:00:39 +0000352 V1_0::ErrorStatus expectedParserStatus = V1_0::ErrorStatus::GENERAL_FAILURE;
Sadik Armagan9150bff2021-05-26 15:40:53 +0100353 ConcatTestImpl({&aIn, &bIn}, axis, expected, computeDevice, expectedParserStatus);
surmeh0149b9e102018-05-17 14:11:25 +0100354}
355
Sadik Armagan9150bff2021-05-26 15:40:53 +0100356void MismatchedOutputDimensions(armnn::Compute computeDevice)
surmeh0149b9e102018-05-17 14:11:25 +0100357{
358 int32_t axis = 3;
Sadik Armagan9150bff2021-05-26 15:40:53 +0100359 TestTensor aIn{armnn::TensorShape{1, 1, 2, 2}, {0, 1,
360 2, 3}};
361 TestTensor bIn{armnn::TensorShape{1, 1, 2, 3}, {4, 5, 6,
362 7, 8, 9}};
363 TestTensor cIn{armnn::TensorShape{1, 1, 2, 1}, {10,
364 11}};
surmeh0149b9e102018-05-17 14:11:25 +0100365
Sadik Armagan9150bff2021-05-26 15:40:53 +0100366 TestTensor mismatched{armnn::TensorShape{1, 1, 6, 2}, {0, 1, 4, 5, 6, 10,
367 2, 3, 7, 8, 9, 11}};
surmeh0149b9e102018-05-17 14:11:25 +0100368
369 // The input and output dimensions must be compatible
Kevin Mayec1e5b82020-02-26 17:00:39 +0000370 V1_0::ErrorStatus expectedParserStatus = V1_0::ErrorStatus::GENERAL_FAILURE;
Sadik Armagan9150bff2021-05-26 15:40:53 +0100371 ConcatTestImpl({&aIn, &bIn, &cIn}, axis, mismatched, computeDevice, expectedParserStatus);
surmeh0149b9e102018-05-17 14:11:25 +0100372}
373
Sadik Armagan9150bff2021-05-26 15:40:53 +0100374void MismatchedOutputRank(armnn::Compute computeDevice)
surmeh0149b9e102018-05-17 14:11:25 +0100375{
376 int32_t axis = 3;
Sadik Armagan9150bff2021-05-26 15:40:53 +0100377 TestTensor aIn{armnn::TensorShape{1, 1, 2, 2}, {0, 1,
378 2, 3}};
379 TestTensor bIn{armnn::TensorShape{1, 1, 2, 3}, {4, 5, 6,
380 7, 8, 9}};
381 TestTensor cIn{armnn::TensorShape{1, 1, 2, 1}, {10,
382 11}};
surmeh0149b9e102018-05-17 14:11:25 +0100383
Sadik Armagan9150bff2021-05-26 15:40:53 +0100384 TestTensor mismatched{armnn::TensorShape{6, 2}, {0, 1, 4, 5, 6, 10,
385 2, 3, 7, 8, 9, 11}};
surmeh0149b9e102018-05-17 14:11:25 +0100386
387 // The input and output ranks must match
Kevin Mayec1e5b82020-02-26 17:00:39 +0000388 V1_0::ErrorStatus expectedParserStatus = V1_0::ErrorStatus::GENERAL_FAILURE;
Sadik Armagan9150bff2021-05-26 15:40:53 +0100389 ConcatTestImpl({&aIn, &bIn, &cIn}, axis, mismatched, computeDevice, expectedParserStatus);
surmeh0149b9e102018-05-17 14:11:25 +0100390}
391
Sadik Armagan9150bff2021-05-26 15:40:53 +0100392void ValidNegativeAxis(armnn::Compute computeDevice)
surmeh0149b9e102018-05-17 14:11:25 +0100393{
394 // this is the same as 3
395 // see: https://www.tensorflow.org/api_docs/python/tf/concat
396 int32_t axis = -1;
Sadik Armagan9150bff2021-05-26 15:40:53 +0100397 TestTensor aIn{armnn::TensorShape{1, 1, 2, 2}, {0, 1,
398 2, 3}};
399 TestTensor bIn{armnn::TensorShape{1, 1, 2, 3}, {4, 5, 6,
400 7, 8, 9}};
401 TestTensor cIn{armnn::TensorShape{1, 1, 2, 1}, {10,
402 11}};
surmeh0149b9e102018-05-17 14:11:25 +0100403
Sadik Armagan9150bff2021-05-26 15:40:53 +0100404 TestTensor expected{armnn::TensorShape{1, 1, 2, 6}, {0, 1, 4, 5, 6, 10,
405 2, 3, 7, 8, 9, 11}};
surmeh0149b9e102018-05-17 14:11:25 +0100406
Sadik Armagan9150bff2021-05-26 15:40:53 +0100407 ConcatTestImpl({&aIn, &bIn, &cIn}, axis, expected, computeDevice);
telsoa01ce3e84a2018-08-31 09:31:35 +0100408}
409
Sadik Armagan9150bff2021-05-26 15:40:53 +0100410void SimpleConcatAxisZero3D(armnn::Compute computeDevice)
telsoa01ce3e84a2018-08-31 09:31:35 +0100411{
412 int32_t axis = 0;
Sadik Armagan9150bff2021-05-26 15:40:53 +0100413 TestTensor aIn{armnn::TensorShape{1, 1, 1}, {0}};
414 TestTensor bIn{armnn::TensorShape{1, 1, 1}, {1}};
415 TestTensor cIn{armnn::TensorShape{1, 1, 1}, {2}};
telsoa01ce3e84a2018-08-31 09:31:35 +0100416
Sadik Armagan9150bff2021-05-26 15:40:53 +0100417 TestTensor expected{armnn::TensorShape{3, 1, 1}, {0, 1, 2}};
telsoa01ce3e84a2018-08-31 09:31:35 +0100418
Sadik Armagan9150bff2021-05-26 15:40:53 +0100419 ConcatTestImpl({&aIn, &bIn, &cIn}, axis, expected, computeDevice);
telsoa01ce3e84a2018-08-31 09:31:35 +0100420}
421
Sadik Armagan9150bff2021-05-26 15:40:53 +0100422void SimpleConcatAxisOne3D(armnn::Compute computeDevice)
telsoa01ce3e84a2018-08-31 09:31:35 +0100423{
424 int32_t axis = 1;
Sadik Armagan9150bff2021-05-26 15:40:53 +0100425 TestTensor aIn{armnn::TensorShape{1, 1, 1}, {0}};
426 TestTensor bIn{armnn::TensorShape{1, 1, 1}, {1}};
427 TestTensor cIn{armnn::TensorShape{1, 1, 1}, {2}};
telsoa01ce3e84a2018-08-31 09:31:35 +0100428
Sadik Armagan9150bff2021-05-26 15:40:53 +0100429 TestTensor expected{armnn::TensorShape{1, 3, 1}, {0, 1, 2}};
telsoa01ce3e84a2018-08-31 09:31:35 +0100430
Sadik Armagan9150bff2021-05-26 15:40:53 +0100431 ConcatTestImpl({&aIn, &bIn, &cIn}, axis, expected, computeDevice);
telsoa01ce3e84a2018-08-31 09:31:35 +0100432}
433
Sadik Armagan9150bff2021-05-26 15:40:53 +0100434void SimpleConcatAxisTwo3D(armnn::Compute computeDevice)
telsoa01ce3e84a2018-08-31 09:31:35 +0100435{
436 int32_t axis = 2;
Sadik Armagan9150bff2021-05-26 15:40:53 +0100437 TestTensor aIn{armnn::TensorShape{1, 1, 1}, {0}};
438 TestTensor bIn{armnn::TensorShape{1, 1, 1}, {1}};
439 TestTensor cIn{armnn::TensorShape{1, 1, 1}, {2}};
telsoa01ce3e84a2018-08-31 09:31:35 +0100440
Sadik Armagan9150bff2021-05-26 15:40:53 +0100441 TestTensor expected{armnn::TensorShape{1, 1, 3}, {0, 1, 2}};
telsoa01ce3e84a2018-08-31 09:31:35 +0100442
Sadik Armagan9150bff2021-05-26 15:40:53 +0100443 ConcatTestImpl({&aIn, &bIn, &cIn}, axis, expected, computeDevice);
telsoa01ce3e84a2018-08-31 09:31:35 +0100444}
445
Sadik Armagan9150bff2021-05-26 15:40:53 +0100446void SimpleConcatAxisZero2D(armnn::Compute computeDevice)
telsoa01ce3e84a2018-08-31 09:31:35 +0100447{
448 int32_t axis = 0;
Sadik Armagan9150bff2021-05-26 15:40:53 +0100449 TestTensor aIn{armnn::TensorShape{1, 1}, {0}};
450 TestTensor bIn{armnn::TensorShape{1, 1}, {1}};
451 TestTensor cIn{armnn::TensorShape{1, 1}, {2}};
telsoa01ce3e84a2018-08-31 09:31:35 +0100452
Sadik Armagan9150bff2021-05-26 15:40:53 +0100453 TestTensor expected{armnn::TensorShape{3, 1}, {0, 1, 2}};
telsoa01ce3e84a2018-08-31 09:31:35 +0100454
Sadik Armagan9150bff2021-05-26 15:40:53 +0100455 ConcatTestImpl({&aIn, &bIn, &cIn}, axis, expected, computeDevice);
telsoa01ce3e84a2018-08-31 09:31:35 +0100456}
457
Sadik Armagan9150bff2021-05-26 15:40:53 +0100458void SimpleConcatAxisOne2D(armnn::Compute computeDevice)
telsoa01ce3e84a2018-08-31 09:31:35 +0100459{
460 int32_t axis = 1;
Sadik Armagan9150bff2021-05-26 15:40:53 +0100461 TestTensor aIn{armnn::TensorShape{1, 1}, {0}};
462 TestTensor bIn{armnn::TensorShape{1, 1}, {1}};
463 TestTensor cIn{armnn::TensorShape{1, 1}, {2}};
telsoa01ce3e84a2018-08-31 09:31:35 +0100464
Sadik Armagan9150bff2021-05-26 15:40:53 +0100465 TestTensor expected{armnn::TensorShape{1, 3}, {0, 1, 2}};
telsoa01ce3e84a2018-08-31 09:31:35 +0100466
Sadik Armagan9150bff2021-05-26 15:40:53 +0100467 ConcatTestImpl({&aIn, &bIn, &cIn}, axis, expected, computeDevice);
telsoa01ce3e84a2018-08-31 09:31:35 +0100468}
469
Sadik Armagan9150bff2021-05-26 15:40:53 +0100470void SimpleConcatAxisZero1D(armnn::Compute computeDevice)
telsoa01ce3e84a2018-08-31 09:31:35 +0100471{
472 int32_t axis = 0;
Sadik Armagan9150bff2021-05-26 15:40:53 +0100473 TestTensor aIn{armnn::TensorShape{1}, {0}};
474 TestTensor bIn{armnn::TensorShape{1}, {1}};
475 TestTensor cIn{armnn::TensorShape{1}, {2}};
telsoa01ce3e84a2018-08-31 09:31:35 +0100476
Sadik Armagan9150bff2021-05-26 15:40:53 +0100477 TestTensor expected{armnn::TensorShape{3}, {0, 1, 2}};
478 ConcatTestImpl({&aIn, &bIn, &cIn}, axis, expected, computeDevice);
surmeh0149b9e102018-05-17 14:11:25 +0100479}
480
Sadik Armagan9150bff2021-05-26 15:40:53 +0100481} // namespace <anonymous>
482
Mike Kellye2d611e2021-10-14 12:35:58 +0100483DOCTEST_TEST_SUITE("ConcatTests_CpuRef")
Sadik Armagan9150bff2021-05-26 15:40:53 +0100484{
485
Mike Kellye2d611e2021-10-14 12:35:58 +0100486DOCTEST_TEST_CASE("SimpleConcatAxis0")
Sadik Armagan9150bff2021-05-26 15:40:53 +0100487{
488 SimpleConcatAxis0(armnn::Compute::CpuRef);
489}
490
Mike Kellye2d611e2021-10-14 12:35:58 +0100491DOCTEST_TEST_CASE("ConcatAxis0NoInterleave")
Sadik Armagan9150bff2021-05-26 15:40:53 +0100492{
493 ConcatAxis0NoInterleave(armnn::Compute::CpuRef);
494}
495
Mike Kellye2d611e2021-10-14 12:35:58 +0100496DOCTEST_TEST_CASE("SimpleConcatAxis1")
Sadik Armagan9150bff2021-05-26 15:40:53 +0100497{
498 SimpleConcatAxis1(armnn::Compute::CpuRef);
499}
500
Mike Kellye2d611e2021-10-14 12:35:58 +0100501DOCTEST_TEST_CASE("ConcatAxis1NoInterleave")
Sadik Armagan9150bff2021-05-26 15:40:53 +0100502{
503 ConcatAxis1NoInterleave(armnn::Compute::CpuRef);
504}
505
Mike Kellye2d611e2021-10-14 12:35:58 +0100506DOCTEST_TEST_CASE("SimpleConcatAxis1DoInterleave")
Sadik Armagan9150bff2021-05-26 15:40:53 +0100507{
508 SimpleConcatAxis1DoInterleave(armnn::Compute::CpuRef);
509}
510
Mike Kellye2d611e2021-10-14 12:35:58 +0100511DOCTEST_TEST_CASE("SimpleConcatAxis2")
Sadik Armagan9150bff2021-05-26 15:40:53 +0100512{
513 SimpleConcatAxis2(armnn::Compute::CpuRef);
514}
515
Mike Kellye2d611e2021-10-14 12:35:58 +0100516DOCTEST_TEST_CASE("ConcatAxis2NoInterleave")
Sadik Armagan9150bff2021-05-26 15:40:53 +0100517{
518 ConcatAxis2NoInterleave(armnn::Compute::CpuRef);
519}
520
Mike Kellye2d611e2021-10-14 12:35:58 +0100521DOCTEST_TEST_CASE("SimpleConcatAxis2DoInterleave")
Sadik Armagan9150bff2021-05-26 15:40:53 +0100522{
523 SimpleConcatAxis2DoInterleave(armnn::Compute::CpuRef);
524}
525
Mike Kellye2d611e2021-10-14 12:35:58 +0100526DOCTEST_TEST_CASE("SimpleConcatAxis3")
Sadik Armagan9150bff2021-05-26 15:40:53 +0100527{
528 SimpleConcatAxis3(armnn::Compute::CpuRef);
529}
530
Mike Kellye2d611e2021-10-14 12:35:58 +0100531DOCTEST_TEST_CASE("SimpleConcatAxis3DoInterleave")
Sadik Armagan9150bff2021-05-26 15:40:53 +0100532{
533 SimpleConcatAxis3DoInterleave(armnn::Compute::CpuRef);
534}
535
Mike Kellye2d611e2021-10-14 12:35:58 +0100536DOCTEST_TEST_CASE("AxisTooBig")
Sadik Armagan9150bff2021-05-26 15:40:53 +0100537{
538 AxisTooBig(armnn::Compute::CpuRef);
539}
540
Mike Kellye2d611e2021-10-14 12:35:58 +0100541DOCTEST_TEST_CASE("AxisTooSmall")
Sadik Armagan9150bff2021-05-26 15:40:53 +0100542{
543 AxisTooSmall(armnn::Compute::CpuRef);
544}
545
Mike Kellye2d611e2021-10-14 12:35:58 +0100546DOCTEST_TEST_CASE("TooFewInputs")
Sadik Armagan9150bff2021-05-26 15:40:53 +0100547{
548 TooFewInputs(armnn::Compute::CpuRef);
549}
550
Mike Kellye2d611e2021-10-14 12:35:58 +0100551DOCTEST_TEST_CASE("MismatchedInputDimensions")
Sadik Armagan9150bff2021-05-26 15:40:53 +0100552{
553 MismatchedInputDimensions(armnn::Compute::CpuRef);
554}
555
Mike Kellye2d611e2021-10-14 12:35:58 +0100556DOCTEST_TEST_CASE("MismatchedInputRanks")
Sadik Armagan9150bff2021-05-26 15:40:53 +0100557{
558 MismatchedInputRanks(armnn::Compute::CpuRef);
559}
560
Mike Kellye2d611e2021-10-14 12:35:58 +0100561DOCTEST_TEST_CASE("MismatchedOutputDimensions")
Sadik Armagan9150bff2021-05-26 15:40:53 +0100562{
563 MismatchedOutputDimensions(armnn::Compute::CpuRef);
564}
565
Mike Kellye2d611e2021-10-14 12:35:58 +0100566DOCTEST_TEST_CASE("MismatchedOutputRank")
Sadik Armagan9150bff2021-05-26 15:40:53 +0100567{
568 MismatchedOutputRank(armnn::Compute::CpuRef);
569}
570
Mike Kellye2d611e2021-10-14 12:35:58 +0100571DOCTEST_TEST_CASE("ValidNegativeAxis")
Sadik Armagan9150bff2021-05-26 15:40:53 +0100572{
573 ValidNegativeAxis(armnn::Compute::CpuRef);
574}
575
Mike Kellye2d611e2021-10-14 12:35:58 +0100576DOCTEST_TEST_CASE("SimpleConcatAxisZero3D")
Sadik Armagan9150bff2021-05-26 15:40:53 +0100577{
578 SimpleConcatAxisZero3D(armnn::Compute::CpuRef);
579}
580
Mike Kellye2d611e2021-10-14 12:35:58 +0100581DOCTEST_TEST_CASE("SimpleConcatAxisOne3D")
Sadik Armagan9150bff2021-05-26 15:40:53 +0100582{
583 SimpleConcatAxisOne3D(armnn::Compute::CpuRef);
584}
585
Mike Kellye2d611e2021-10-14 12:35:58 +0100586DOCTEST_TEST_CASE("SimpleConcatAxisTwo3D")
Sadik Armagan9150bff2021-05-26 15:40:53 +0100587{
588 SimpleConcatAxisTwo3D(armnn::Compute::CpuRef);
589}
590
Mike Kellye2d611e2021-10-14 12:35:58 +0100591DOCTEST_TEST_CASE("SimpleConcatAxisZero2D")
Sadik Armagan9150bff2021-05-26 15:40:53 +0100592{
593 SimpleConcatAxisZero2D(armnn::Compute::CpuRef);
594}
595
Mike Kellye2d611e2021-10-14 12:35:58 +0100596DOCTEST_TEST_CASE("SimpleConcatAxisOne2D")
Sadik Armagan9150bff2021-05-26 15:40:53 +0100597{
598 SimpleConcatAxisOne2D(armnn::Compute::CpuRef);
599}
600
Mike Kellye2d611e2021-10-14 12:35:58 +0100601DOCTEST_TEST_CASE("SimpleConcatAxisZero1D")
Sadik Armagan9150bff2021-05-26 15:40:53 +0100602{
603 SimpleConcatAxisZero1D(armnn::Compute::CpuRef);
604}
605
606}
607
608#ifdef ARMCOMPUTECL_ENABLED
Mike Kellye2d611e2021-10-14 12:35:58 +0100609DOCTEST_TEST_SUITE("ConcatTests_GpuAcc")
Sadik Armagan9150bff2021-05-26 15:40:53 +0100610{
611
Mike Kellye2d611e2021-10-14 12:35:58 +0100612DOCTEST_TEST_CASE("SimpleConcatAxis0")
Sadik Armagan9150bff2021-05-26 15:40:53 +0100613{
614 SimpleConcatAxis0(armnn::Compute::GpuAcc);
615}
616
Mike Kellye2d611e2021-10-14 12:35:58 +0100617DOCTEST_TEST_CASE("ConcatAxis0NoInterleave")
Sadik Armagan9150bff2021-05-26 15:40:53 +0100618{
619 ConcatAxis0NoInterleave(armnn::Compute::GpuAcc);
620}
621
Mike Kellye2d611e2021-10-14 12:35:58 +0100622DOCTEST_TEST_CASE("SimpleConcatAxis1")
Sadik Armagan9150bff2021-05-26 15:40:53 +0100623{
624 SimpleConcatAxis1(armnn::Compute::GpuAcc);
625}
626
Mike Kellye2d611e2021-10-14 12:35:58 +0100627DOCTEST_TEST_CASE("ConcatAxis1NoInterleave")
Sadik Armagan9150bff2021-05-26 15:40:53 +0100628{
629 ConcatAxis1NoInterleave(armnn::Compute::GpuAcc);
630}
631
Mike Kellye2d611e2021-10-14 12:35:58 +0100632DOCTEST_TEST_CASE("SimpleConcatAxis1DoInterleave")
Sadik Armagan9150bff2021-05-26 15:40:53 +0100633{
634 SimpleConcatAxis1DoInterleave(armnn::Compute::GpuAcc);
635}
636
Mike Kellye2d611e2021-10-14 12:35:58 +0100637DOCTEST_TEST_CASE("SimpleConcatAxis2")
Sadik Armagan9150bff2021-05-26 15:40:53 +0100638{
639 SimpleConcatAxis2(armnn::Compute::GpuAcc);
640}
641
Mike Kellye2d611e2021-10-14 12:35:58 +0100642DOCTEST_TEST_CASE("ConcatAxis2NoInterleave")
Sadik Armagan9150bff2021-05-26 15:40:53 +0100643{
644 ConcatAxis2NoInterleave(armnn::Compute::GpuAcc);
645}
646
Mike Kellye2d611e2021-10-14 12:35:58 +0100647DOCTEST_TEST_CASE("SimpleConcatAxis2DoInterleave")
Sadik Armagan9150bff2021-05-26 15:40:53 +0100648{
649 SimpleConcatAxis2DoInterleave(armnn::Compute::GpuAcc);
650}
651
Mike Kellye2d611e2021-10-14 12:35:58 +0100652DOCTEST_TEST_CASE("SimpleConcatAxis3")
Sadik Armagan9150bff2021-05-26 15:40:53 +0100653{
654 SimpleConcatAxis3(armnn::Compute::GpuAcc);
655}
656
Mike Kellye2d611e2021-10-14 12:35:58 +0100657DOCTEST_TEST_CASE("SimpleConcatAxis3DoInterleave")
Sadik Armagan9150bff2021-05-26 15:40:53 +0100658{
659 SimpleConcatAxis3DoInterleave(armnn::Compute::GpuAcc);
660}
661
Mike Kellye2d611e2021-10-14 12:35:58 +0100662DOCTEST_TEST_CASE("AxisTooBig")
Sadik Armagan9150bff2021-05-26 15:40:53 +0100663{
664 AxisTooBig(armnn::Compute::GpuAcc);
665}
666
Mike Kellye2d611e2021-10-14 12:35:58 +0100667DOCTEST_TEST_CASE("AxisTooSmall")
Sadik Armagan9150bff2021-05-26 15:40:53 +0100668{
669 AxisTooSmall(armnn::Compute::GpuAcc);
670}
671
Mike Kellye2d611e2021-10-14 12:35:58 +0100672DOCTEST_TEST_CASE("TooFewInputs")
Sadik Armagan9150bff2021-05-26 15:40:53 +0100673{
674 TooFewInputs(armnn::Compute::GpuAcc);
675}
676
Mike Kellye2d611e2021-10-14 12:35:58 +0100677DOCTEST_TEST_CASE("MismatchedInputDimensions")
Sadik Armagan9150bff2021-05-26 15:40:53 +0100678{
679 MismatchedInputDimensions(armnn::Compute::GpuAcc);
680}
681
Mike Kellye2d611e2021-10-14 12:35:58 +0100682DOCTEST_TEST_CASE("MismatchedInputRanks")
Sadik Armagan9150bff2021-05-26 15:40:53 +0100683{
684 MismatchedInputRanks(armnn::Compute::GpuAcc);
685}
686
Mike Kellye2d611e2021-10-14 12:35:58 +0100687DOCTEST_TEST_CASE("MismatchedOutputDimensions")
Sadik Armagan9150bff2021-05-26 15:40:53 +0100688{
689 MismatchedOutputDimensions(armnn::Compute::GpuAcc);
690}
691
Mike Kellye2d611e2021-10-14 12:35:58 +0100692DOCTEST_TEST_CASE("MismatchedOutputRank")
Sadik Armagan9150bff2021-05-26 15:40:53 +0100693{
694 MismatchedOutputRank(armnn::Compute::GpuAcc);
695}
696
Mike Kellye2d611e2021-10-14 12:35:58 +0100697DOCTEST_TEST_CASE("ValidNegativeAxis")
Sadik Armagan9150bff2021-05-26 15:40:53 +0100698{
699 ValidNegativeAxis(armnn::Compute::GpuAcc);
700}
701
Mike Kellye2d611e2021-10-14 12:35:58 +0100702DOCTEST_TEST_CASE("SimpleConcatAxisZero3D")
Sadik Armagan9150bff2021-05-26 15:40:53 +0100703{
704 SimpleConcatAxisZero3D(armnn::Compute::GpuAcc);
705}
706
Mike Kellye2d611e2021-10-14 12:35:58 +0100707DOCTEST_TEST_CASE("SimpleConcatAxisOne3D")
Sadik Armagan9150bff2021-05-26 15:40:53 +0100708{
709 SimpleConcatAxisOne3D(armnn::Compute::GpuAcc);
710}
711
Mike Kellye2d611e2021-10-14 12:35:58 +0100712DOCTEST_TEST_CASE("SimpleConcatAxisTwo3D")
Sadik Armagan9150bff2021-05-26 15:40:53 +0100713{
714 SimpleConcatAxisTwo3D(armnn::Compute::GpuAcc);
715}
716
Mike Kellye2d611e2021-10-14 12:35:58 +0100717DOCTEST_TEST_CASE("SimpleConcatAxisZero2D")
Sadik Armagan9150bff2021-05-26 15:40:53 +0100718{
719 SimpleConcatAxisZero2D(armnn::Compute::GpuAcc);
720}
721
Mike Kellye2d611e2021-10-14 12:35:58 +0100722DOCTEST_TEST_CASE("SimpleConcatAxisOne2D")
Sadik Armagan9150bff2021-05-26 15:40:53 +0100723{
724 SimpleConcatAxisOne2D(armnn::Compute::GpuAcc);
725}
726
Mike Kellye2d611e2021-10-14 12:35:58 +0100727DOCTEST_TEST_CASE("SimpleConcatAxisZero1D")
Sadik Armagan9150bff2021-05-26 15:40:53 +0100728{
729 SimpleConcatAxisZero1D(armnn::Compute::GpuAcc);
730}
731
732}// End of GpuAcc Test Suite
733#endif