blob: 722b7dd2f3a4ba567d40d8ee605409601fdd1d49 [file] [log] [blame]
Nattapat Chaimanowong1216b582018-11-23 15:33:41 +00001//
Teresa Charlinfbf0e5b2020-08-17 01:01:06 +01002// Copyright © 2017 Arm Ltd and Contributors. All rights reserved.
Nattapat Chaimanowong1216b582018-11-23 15:33:41 +00003// SPDX-License-Identifier: MIT
4//
Aron Virginas-Tar00d306e2019-08-28 18:08:46 +01005
6#include "StridedSliceTestImpl.hpp"
Nattapat Chaimanowong1216b582018-11-23 15:33:41 +00007
Aron Virginas-Tar48623a02019-10-22 10:00:28 +01008#include <QuantizeHelper.hpp>
Aron Virginas-Tard4f0fea2019-04-09 14:08:06 +01009#include <ResolveType.hpp>
Nattapat Chaimanowong1216b582018-11-23 15:33:41 +000010
Nattapat Chaimanowong1216b582018-11-23 15:33:41 +000011
Aron Virginas-Tar00d306e2019-08-28 18:08:46 +010012#include <backendsCommon/test/TensorCopyUtils.hpp>
13#include <backendsCommon/test/WorkloadTestUtils.hpp>
Nattapat Chaimanowong1216b582018-11-23 15:33:41 +000014
15#include <test/TensorHelpers.hpp>
16
17namespace
18{
19
20template<typename T, std::size_t InDim, std::size_t OutDim>
21LayerTestResult<T, OutDim> StridedSliceTestImpl(
22 armnn::IWorkloadFactory& workloadFactory,
23 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
24 armnn::TensorInfo& inputTensorInfo,
25 armnn::TensorInfo& outputTensorInfo,
26 std::vector<float>& inputData,
27 std::vector<float>& outputExpectedData,
28 armnn::StridedSliceQueueDescriptor descriptor,
29 const float qScale = 1.0f,
30 const int32_t qOffset = 0)
31{
Jan Eilers8eb25602020-03-09 12:13:48 +000032 IgnoreUnused(memoryManager);
Nattapat Chaimanowong1216b582018-11-23 15:33:41 +000033 if(armnn::IsQuantizedType<T>())
34 {
35 inputTensorInfo.SetQuantizationScale(qScale);
36 inputTensorInfo.SetQuantizationOffset(qOffset);
37
38 outputTensorInfo.SetQuantizationScale(qScale);
39 outputTensorInfo.SetQuantizationOffset(qOffset);
40 }
41
42 boost::multi_array<T, InDim> input =
Aron Virginas-Tar48623a02019-10-22 10:00:28 +010043 MakeTensor<T, InDim>(inputTensorInfo, armnnUtils::QuantizedVector<T>(inputData, qScale, qOffset));
Nattapat Chaimanowong1216b582018-11-23 15:33:41 +000044
45 LayerTestResult<T, OutDim> ret(outputTensorInfo);
46 ret.outputExpected =
Aron Virginas-Tar48623a02019-10-22 10:00:28 +010047 MakeTensor<T, OutDim>(outputTensorInfo, armnnUtils::QuantizedVector<T>(outputExpectedData, qScale, qOffset));
Teresa Charlinfbf0e5b2020-08-17 01:01:06 +010048 ARMNN_NO_DEPRECATE_WARN_BEGIN
Nattapat Chaimanowong1216b582018-11-23 15:33:41 +000049 std::unique_ptr<armnn::ITensorHandle> inputHandle =
50 workloadFactory.CreateTensorHandle(inputTensorInfo);
51
52 std::unique_ptr<armnn::ITensorHandle> outputHandle =
53 workloadFactory.CreateTensorHandle(outputTensorInfo);
Teresa Charlinfbf0e5b2020-08-17 01:01:06 +010054 ARMNN_NO_DEPRECATE_WARN_END
Nattapat Chaimanowong1216b582018-11-23 15:33:41 +000055
56 armnn::WorkloadInfo info;
57 AddInputToWorkload(descriptor, info, inputTensorInfo, inputHandle.get());
58 AddOutputToWorkload(descriptor, info, outputTensorInfo, outputHandle.get());
59
60 std::unique_ptr<armnn::IWorkload> workload = workloadFactory.CreateStridedSlice(descriptor, info);
61
62 inputHandle->Allocate();
63 outputHandle->Allocate();
64
65 CopyDataToITensorHandle(inputHandle.get(), input.data());
66
67 ExecuteWorkload(*workload, memoryManager);
68
69 CopyDataFromITensorHandle(ret.output.data(), outputHandle.get());
70
71 return ret;
72}
73
Nattapat Chaimanowong649dd952019-01-22 16:10:44 +000074template<armnn::DataType ArmnnType, typename T = armnn::ResolveType<ArmnnType>>
Aron Virginas-Tar00d306e2019-08-28 18:08:46 +010075LayerTestResult<T, 4> StridedSlice4dTest(
Nattapat Chaimanowong1216b582018-11-23 15:33:41 +000076 armnn::IWorkloadFactory& workloadFactory,
77 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager)
78{
79 armnn::TensorInfo inputTensorInfo;
80 armnn::TensorInfo outputTensorInfo;
81
82 unsigned int inputShape[] = {3, 2, 3, 1};
83 unsigned int outputShape[] = {1, 2, 3, 1};
84
85 armnn::StridedSliceQueueDescriptor desc;
86 desc.m_Parameters.m_Begin = {1, 0, 0, 0};
87 desc.m_Parameters.m_End = {2, 2, 3, 1};
88 desc.m_Parameters.m_Stride = {1, 1, 1, 1};
89
Nattapat Chaimanowong649dd952019-01-22 16:10:44 +000090 inputTensorInfo = armnn::TensorInfo(4, inputShape, ArmnnType);
91 outputTensorInfo = armnn::TensorInfo(4, outputShape, ArmnnType);
Nattapat Chaimanowong1216b582018-11-23 15:33:41 +000092
93 std::vector<float> input = std::vector<float>(
94 {
95 1.0f, 1.0f, 1.0f, 2.0f, 2.0f, 2.0f,
96
97 3.0f, 3.0f, 3.0f, 4.0f, 4.0f, 4.0f,
98
99 5.0f, 5.0f, 5.0f, 6.0f, 6.0f, 6.0f
100 });
101
102 std::vector<float> outputExpected = std::vector<float>(
103 {
104 3.0f, 3.0f, 3.0f, 4.0f, 4.0f, 4.0f
105 });
106
107 return StridedSliceTestImpl<T, 4, 4>(
108 workloadFactory, memoryManager, inputTensorInfo, outputTensorInfo, input, outputExpected, desc);
109}
110
Nattapat Chaimanowong649dd952019-01-22 16:10:44 +0000111template<armnn::DataType ArmnnType, typename T = armnn::ResolveType<ArmnnType>>
Aron Virginas-Tar00d306e2019-08-28 18:08:46 +0100112LayerTestResult<T, 4> StridedSlice4dReverseTest(
Nattapat Chaimanowong1216b582018-11-23 15:33:41 +0000113 armnn::IWorkloadFactory& workloadFactory,
114 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager)
115{
116 armnn::TensorInfo inputTensorInfo;
117 armnn::TensorInfo outputTensorInfo;
118
119 unsigned int inputShape[] = {3, 2, 3, 1};
120 unsigned int outputShape[] = {1, 2, 3, 1};
121
122 armnn::StridedSliceQueueDescriptor desc;
123 desc.m_Parameters.m_Begin = {1, -1, 0, 0};
124 desc.m_Parameters.m_End = {2, -3, 3, 1};
125 desc.m_Parameters.m_Stride = {1, -1, 1, 1};
126
Nattapat Chaimanowong649dd952019-01-22 16:10:44 +0000127 inputTensorInfo = armnn::TensorInfo(4, inputShape, ArmnnType);
128 outputTensorInfo = armnn::TensorInfo(4, outputShape, ArmnnType);
Nattapat Chaimanowong1216b582018-11-23 15:33:41 +0000129
130 std::vector<float> input = std::vector<float>(
131 {
132 1.0f, 1.0f, 1.0f, 2.0f, 2.0f, 2.0f,
133
134 3.0f, 3.0f, 3.0f, 4.0f, 4.0f, 4.0f,
135
136 5.0f, 5.0f, 5.0f, 6.0f, 6.0f, 6.0f
137 });
138
139 std::vector<float> outputExpected = std::vector<float>(
140 {
141 4.0f, 4.0f, 4.0f, 3.0f, 3.0f, 3.0f
142 });
143
144 return StridedSliceTestImpl<T, 4, 4>(
145 workloadFactory, memoryManager, inputTensorInfo, outputTensorInfo, input, outputExpected, desc);
146}
147
Nattapat Chaimanowong649dd952019-01-22 16:10:44 +0000148template<armnn::DataType ArmnnType, typename T = armnn::ResolveType<ArmnnType>>
Nattapat Chaimanowong1216b582018-11-23 15:33:41 +0000149LayerTestResult<T, 4> StridedSliceSimpleStrideTest(
150 armnn::IWorkloadFactory& workloadFactory,
151 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager)
152{
153 armnn::TensorInfo inputTensorInfo;
154 armnn::TensorInfo outputTensorInfo;
155
156 unsigned int inputShape[] = {3, 2, 3, 1};
157 unsigned int outputShape[] = {2, 1, 2, 1};
158
159 armnn::StridedSliceQueueDescriptor desc;
160 desc.m_Parameters.m_Begin = {0, 0, 0, 0};
161 desc.m_Parameters.m_End = {3, 2, 3, 1};
162 desc.m_Parameters.m_Stride = {2, 2, 2, 1};
163
Nattapat Chaimanowong649dd952019-01-22 16:10:44 +0000164 inputTensorInfo = armnn::TensorInfo(4, inputShape, ArmnnType);
165 outputTensorInfo = armnn::TensorInfo(4, outputShape, ArmnnType);
Nattapat Chaimanowong1216b582018-11-23 15:33:41 +0000166
167 std::vector<float> input = std::vector<float>(
168 {
169 1.0f, 1.0f, 1.0f, 2.0f, 2.0f, 2.0f,
170
171 3.0f, 3.0f, 3.0f, 4.0f, 4.0f, 4.0f,
172
173 5.0f, 5.0f, 5.0f, 6.0f, 6.0f, 6.0f
174 });
175
176 std::vector<float> outputExpected = std::vector<float>(
177 {
178 1.0f, 1.0f,
179
180 5.0f, 5.0f
181 });
182
183 return StridedSliceTestImpl<T, 4, 4>(
184 workloadFactory, memoryManager, inputTensorInfo, outputTensorInfo, input, outputExpected, desc);
185}
186
Nattapat Chaimanowong649dd952019-01-22 16:10:44 +0000187template<armnn::DataType ArmnnType, typename T = armnn::ResolveType<ArmnnType>>
Nattapat Chaimanowong1216b582018-11-23 15:33:41 +0000188LayerTestResult<T, 4> StridedSliceSimpleRangeMaskTest(
189 armnn::IWorkloadFactory& workloadFactory,
190 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager)
191{
192 armnn::TensorInfo inputTensorInfo;
193 armnn::TensorInfo outputTensorInfo;
194
195 unsigned int inputShape[] = {3, 2, 3, 1};
196 unsigned int outputShape[] = {3, 2, 3, 1};
197
198 armnn::StridedSliceQueueDescriptor desc;
199 desc.m_Parameters.m_Begin = {1, 1, 1, 1};
200 desc.m_Parameters.m_End = {1, 1, 1, 1};
201 desc.m_Parameters.m_Stride = {1, 1, 1, 1};
202 desc.m_Parameters.m_BeginMask = (1 << 4) - 1;
203 desc.m_Parameters.m_EndMask = (1 << 4) - 1;
204
Nattapat Chaimanowong649dd952019-01-22 16:10:44 +0000205 inputTensorInfo = armnn::TensorInfo(4, inputShape, ArmnnType);
206 outputTensorInfo = armnn::TensorInfo(4, outputShape, ArmnnType);
Nattapat Chaimanowong1216b582018-11-23 15:33:41 +0000207
208 std::vector<float> input = std::vector<float>(
209 {
210 1.0f, 1.0f, 1.0f, 2.0f, 2.0f, 2.0f,
211
212 3.0f, 3.0f, 3.0f, 4.0f, 4.0f, 4.0f,
213
214 5.0f, 5.0f, 5.0f, 6.0f, 6.0f, 6.0f
215 });
216
217 std::vector<float> outputExpected = std::vector<float>(
218 {
219 1.0f, 1.0f, 1.0f, 2.0f, 2.0f, 2.0f,
220
221 3.0f, 3.0f, 3.0f, 4.0f, 4.0f, 4.0f,
222
223 5.0f, 5.0f, 5.0f, 6.0f, 6.0f, 6.0f
224 });
225
226 return StridedSliceTestImpl<T, 4, 4>(
227 workloadFactory, memoryManager, inputTensorInfo, outputTensorInfo, input, outputExpected, desc);
228}
229
Nattapat Chaimanowong649dd952019-01-22 16:10:44 +0000230template<armnn::DataType ArmnnType, typename T = armnn::ResolveType<ArmnnType>>
Nattapat Chaimanowong1216b582018-11-23 15:33:41 +0000231LayerTestResult<T, 2> StridedSliceShrinkAxisMaskTest(
232 armnn::IWorkloadFactory& workloadFactory,
233 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager)
234{
235 armnn::TensorInfo inputTensorInfo;
236 armnn::TensorInfo outputTensorInfo;
237
238 unsigned int inputShape[] = {3, 2, 3, 1};
239 unsigned int outputShape[] = {3, 1};
240
241 armnn::StridedSliceQueueDescriptor desc;
242 desc.m_Parameters.m_Begin = {0, 0, 1, 0};
243 desc.m_Parameters.m_End = {1, 1, 1, 1};
244 desc.m_Parameters.m_Stride = {1, 1, 1, 1};
245 desc.m_Parameters.m_EndMask = (1 << 4) - 1;
246 desc.m_Parameters.m_ShrinkAxisMask = (1 << 1) | (1 << 2);
247
Nattapat Chaimanowong649dd952019-01-22 16:10:44 +0000248 inputTensorInfo = armnn::TensorInfo(4, inputShape, ArmnnType);
249 outputTensorInfo = armnn::TensorInfo(2, outputShape, ArmnnType);
Nattapat Chaimanowong1216b582018-11-23 15:33:41 +0000250
251 std::vector<float> input = std::vector<float>(
252 {
253 1.0f, 2.0f, 3.0f, 4.0f, 5.0f, 6.0f,
254
255 7.0f, 8.0f, 9.0f, 10.0f, 11.0f, 12.0f,
256
257 13.0f, 14.0f, 15.0f, 16.0f, 17.0f, 18.0f
258 });
259
260 std::vector<float> outputExpected = std::vector<float>(
261 {
262 2.0f, 8.0f, 14.0f
263 });
264
265 return StridedSliceTestImpl<T, 4, 2>(
266 workloadFactory, memoryManager, inputTensorInfo, outputTensorInfo, input, outputExpected, desc);
267}
268
Nattapat Chaimanowong649dd952019-01-22 16:10:44 +0000269template<armnn::DataType ArmnnType, typename T = armnn::ResolveType<ArmnnType>>
Francis Murtaghec33a912019-11-05 14:26:23 +0000270LayerTestResult<T, 3> StridedSliceShrinkAxisMaskBitPosition0Test(
271 armnn::IWorkloadFactory& workloadFactory,
272 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager)
273{
274 armnn::TensorInfo inputTensorInfo;
275 armnn::TensorInfo outputTensorInfo;
276
277 unsigned int inputShape[] = {3, 2, 3, 1};
278 unsigned int outputShape[] = {2, 3, 1};
279
280 armnn::StridedSliceQueueDescriptor desc;
281 desc.m_Parameters.m_Begin = {0, 0, 0, 0};
282 desc.m_Parameters.m_End = {1, 1, 1, 1};
283 desc.m_Parameters.m_Stride = {1, 1, 1, 1};
284 desc.m_Parameters.m_EndMask = (1 << 4) - 1;
285 desc.m_Parameters.m_ShrinkAxisMask = (1 << 0);
286
287 inputTensorInfo = armnn::TensorInfo(4, inputShape, ArmnnType);
288 outputTensorInfo = armnn::TensorInfo(3, outputShape, ArmnnType);
289
290 std::vector<float> input = std::vector<float>(
291 {
292 1.0f, 2.0f, 3.0f, 4.0f, 5.0f, 6.0f,
293
294 7.0f, 8.0f, 9.0f, 10.0f, 11.0f, 12.0f,
295
296 13.0f, 14.0f, 15.0f, 16.0f, 17.0f, 18.0f
297 });
298
299 std::vector<float> outputExpected = std::vector<float>(
300 {
301 1.0f, 2.0f, 3.0f, 4.0f, 5.0f, 6.0f
302 });
303
304 return StridedSliceTestImpl<T, 4, 3>(
305 workloadFactory, memoryManager, inputTensorInfo, outputTensorInfo, input, outputExpected, desc);
306}
307
308template<armnn::DataType ArmnnType, typename T = armnn::ResolveType<ArmnnType>>
309LayerTestResult<T, 3> StridedSliceShrinkAxisMaskBitPosition1Test(
310 armnn::IWorkloadFactory& workloadFactory,
311 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager)
312{
313 armnn::TensorInfo inputTensorInfo;
314 armnn::TensorInfo outputTensorInfo;
315
316 unsigned int inputShape[] = {3, 2, 3, 1};
317 unsigned int outputShape[] = {3, 3, 1};
318
319 armnn::StridedSliceQueueDescriptor desc;
320 desc.m_Parameters.m_Begin = {0, 0, 0, 0};
321 desc.m_Parameters.m_End = {1, 1, 1, 1};
322 desc.m_Parameters.m_Stride = {1, 1, 1, 1};
323 desc.m_Parameters.m_EndMask = (1 << 4) - 1;
324 desc.m_Parameters.m_ShrinkAxisMask = (1 << 1);
325
326 inputTensorInfo = armnn::TensorInfo(4, inputShape, ArmnnType);
327 outputTensorInfo = armnn::TensorInfo(3, outputShape, ArmnnType);
328
329 std::vector<float> input = std::vector<float>(
330 {
331 1.0f, 2.0f, 3.0f, 4.0f, 5.0f, 6.0f,
332
333 7.0f, 8.0f, 9.0f, 10.0f, 11.0f, 12.0f,
334
335 13.0f, 14.0f, 15.0f, 16.0f, 17.0f, 18.0f
336 });
337
338 std::vector<float> outputExpected = std::vector<float>(
339 {
340 1.0f, 2.0f, 3.0f, 7.0f, 8.0f, 9.0f, 13.0f, 14.0f, 15.0f
341 });
342
343 return StridedSliceTestImpl<T, 4, 3>(
344 workloadFactory, memoryManager, inputTensorInfo, outputTensorInfo, input, outputExpected, desc);
345}
346
347template<armnn::DataType ArmnnType, typename T = armnn::ResolveType<ArmnnType>>
348LayerTestResult<T, 3> StridedSliceShrinkAxisMaskBitPosition2Test(
349 armnn::IWorkloadFactory& workloadFactory,
350 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager)
351{
352 armnn::TensorInfo inputTensorInfo;
353 armnn::TensorInfo outputTensorInfo;
354
355 unsigned int inputShape[] = {3, 2, 3, 1};
356 unsigned int outputShape[] = {3, 2, 1};
357
358 armnn::StridedSliceQueueDescriptor desc;
359 desc.m_Parameters.m_Begin = {0, 0, 0, 0};
360 desc.m_Parameters.m_End = {1, 1, 1, 1};
361 desc.m_Parameters.m_Stride = {1, 1, 1, 1};
362 desc.m_Parameters.m_EndMask = (1 << 4) - 1;
363 desc.m_Parameters.m_ShrinkAxisMask = (1 << 2);
364
365 inputTensorInfo = armnn::TensorInfo(4, inputShape, ArmnnType);
366 outputTensorInfo = armnn::TensorInfo(3, outputShape, ArmnnType);
367
368 std::vector<float> input = std::vector<float>(
369 {
370 1.0f, 2.0f, 3.0f, 4.0f, 5.0f, 6.0f,
371
372 7.0f, 8.0f, 9.0f, 10.0f, 11.0f, 12.0f,
373
374 13.0f, 14.0f, 15.0f, 16.0f, 17.0f, 18.0f
375 });
376
377 std::vector<float> outputExpected = std::vector<float>(
378 {
379 1.0f, 4.0f, 7.0f, 10.0f, 13.0f, 16.0f
380 });
381
382 return StridedSliceTestImpl<T, 4, 3>(
383 workloadFactory, memoryManager, inputTensorInfo, outputTensorInfo, input, outputExpected, desc);
384}
385
386template<armnn::DataType ArmnnType, typename T = armnn::ResolveType<ArmnnType>>
387LayerTestResult<T, 3> StridedSliceShrinkAxisMaskBitPosition3Test(
388 armnn::IWorkloadFactory& workloadFactory,
389 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager)
390{
391 armnn::TensorInfo inputTensorInfo;
392 armnn::TensorInfo outputTensorInfo;
393
394 unsigned int inputShape[] = {3, 2, 3, 1};
395 unsigned int outputShape[] = {3, 2, 3};
396
397 armnn::StridedSliceQueueDescriptor desc;
398 desc.m_Parameters.m_Begin = {0, 0, 0, 0};
399 desc.m_Parameters.m_End = {1, 1, 1, 1};
400 desc.m_Parameters.m_Stride = {1, 1, 1, 1};
401 desc.m_Parameters.m_EndMask = (1 << 4) - 1;
402 desc.m_Parameters.m_ShrinkAxisMask = (1 << 3);
403
404 inputTensorInfo = armnn::TensorInfo(4, inputShape, ArmnnType);
405 outputTensorInfo = armnn::TensorInfo(3, outputShape, ArmnnType);
406
407 std::vector<float> input = std::vector<float>(
408 {
409 1.0f, 2.0f, 3.0f, 4.0f, 5.0f, 6.0f,
410
411 7.0f, 8.0f, 9.0f, 10.0f, 11.0f, 12.0f,
412
413 13.0f, 14.0f, 15.0f, 16.0f, 17.0f, 18.0f
414 });
415
416 std::vector<float> outputExpected = std::vector<float>(
417 {
418 1.0f, 2.0f, 3.0f, 4.0f, 5.0f, 6.0f,
419
420 7.0f, 8.0f, 9.0f, 10.0f, 11.0f, 12.0f,
421
422 13.0f, 14.0f, 15.0f, 16.0f, 17.0f, 18.0f
423 });
424
425 return StridedSliceTestImpl<T, 4, 3>(
426 workloadFactory, memoryManager, inputTensorInfo, outputTensorInfo, input, outputExpected, desc);
427}
428
429template<armnn::DataType ArmnnType, typename T = armnn::ResolveType<ArmnnType>>
430LayerTestResult<T, 2> StridedSliceShrinkAxisMaskBitPosition0And1Test(
431 armnn::IWorkloadFactory& workloadFactory,
432 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager)
433{
434 armnn::TensorInfo inputTensorInfo;
435 armnn::TensorInfo outputTensorInfo;
436
437 unsigned int inputShape[] = {3, 2, 3, 1};
438 unsigned int outputShape[] = {3, 1};
439
440 armnn::StridedSliceQueueDescriptor desc;
441 desc.m_Parameters.m_Begin = {0, 0, 0, 0};
442 desc.m_Parameters.m_End = {1, 1, 1, 1};
443 desc.m_Parameters.m_Stride = {1, 1, 1, 1};
444 desc.m_Parameters.m_EndMask = (1 << 4) - 1;
445 desc.m_Parameters.m_ShrinkAxisMask = (1 << 0) | (1 << 1);
446
447 inputTensorInfo = armnn::TensorInfo(4, inputShape, ArmnnType);
448 outputTensorInfo = armnn::TensorInfo(2, outputShape, ArmnnType);
449
450 std::vector<float> input = std::vector<float>(
451 {
452 1.0f, 2.0f, 3.0f, 4.0f, 5.0f, 6.0f,
453
454 7.0f, 8.0f, 9.0f, 10.0f, 11.0f, 12.0f,
455
456 13.0f, 14.0f, 15.0f, 16.0f, 17.0f, 18.0f
457 });
458
459 std::vector<float> outputExpected = std::vector<float>(
460 {
461 1.0f, 2.0f, 3.0f
462 });
463
464 return StridedSliceTestImpl<T, 4, 2>(
465 workloadFactory, memoryManager, inputTensorInfo, outputTensorInfo, input, outputExpected, desc);
466}
467
468template<armnn::DataType ArmnnType, typename T = armnn::ResolveType<ArmnnType>>
469LayerTestResult<T, 2> StridedSliceShrinkAxisMaskBitPosition0Dim3Test(
470 armnn::IWorkloadFactory& workloadFactory,
471 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager)
472{
473 armnn::TensorInfo inputTensorInfo;
474 armnn::TensorInfo outputTensorInfo;
475
476 unsigned int inputShape[] = {2, 3, 1};
477 unsigned int outputShape[] = {3, 1};
478
479 armnn::StridedSliceQueueDescriptor desc;
480 desc.m_Parameters.m_Begin = {0, 0, 0};
481 desc.m_Parameters.m_End = {0, 0, 0};
482 desc.m_Parameters.m_Stride = {1, 1, 1};
483 desc.m_Parameters.m_EndMask = (1 << 4) - 1;
484 desc.m_Parameters.m_ShrinkAxisMask = (1 << 0);
485
486 inputTensorInfo = armnn::TensorInfo(3, inputShape, ArmnnType);
487 outputTensorInfo = armnn::TensorInfo(2, outputShape, ArmnnType);
488
489 std::vector<float> input = std::vector<float>(
490 {
491 1.0f, 2.0f, 3.0f, 4.0f, 5.0f, 6.0f
492 });
493
494 std::vector<float> outputExpected = std::vector<float>(
495 {
496 1.0f, 2.0f, 3.0f
497 });
498
499 return StridedSliceTestImpl<T, 3, 2>(
500 workloadFactory, memoryManager, inputTensorInfo, outputTensorInfo, input, outputExpected, desc);
501}
502
503void FillVector(std::vector<float>& inputArray, float start, float step)
504{
505 for (uint32_t i = 0; i < inputArray.size(); ++i)
506 {
507 inputArray[i] = start;
508 start += step;
509 }
510}
511
512template<armnn::DataType ArmnnType, typename T = armnn::ResolveType<ArmnnType>>
513LayerTestResult<T, 4> StridedSliceShrinkAxisMaskCTSTest(
514 armnn::IWorkloadFactory& workloadFactory,
515 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager)
516{
517 armnn::TensorInfo inputTensorInfo;
518 armnn::TensorInfo outputTensorInfo;
519
520 unsigned int inputShape[] = {1, 1, 8, 942};
521 unsigned int outputShape[] = {1, 1, 1, 279};
522
523 armnn::StridedSliceQueueDescriptor desc;
524 desc.m_Parameters.m_Begin = {0, 0, 1, 229};
525 desc.m_Parameters.m_End = {1, 1, 2, 787};
526 desc.m_Parameters.m_Stride = {2, 3, 3, 2};
527 desc.m_Parameters.m_BeginMask = 2;
528 desc.m_Parameters.m_EndMask = 0;
529 desc.m_Parameters.m_ShrinkAxisMask = 0;
530
531 inputTensorInfo = armnn::TensorInfo(4, inputShape, ArmnnType);
532 outputTensorInfo = armnn::TensorInfo(4, outputShape, ArmnnType);
533
534 // Array from 1 to 7535
535 std::vector<float> input(7536);
536 FillVector(input, 1.0f, 1.0f);
537
538 // Array from 1171 to 1727 in steps of 2
539 std::vector<float> outputExpected(279);
540 FillVector(outputExpected, 1171.0, 2.0f);
541
542 return StridedSliceTestImpl<T, 4, 4>(
543 workloadFactory, memoryManager, inputTensorInfo, outputTensorInfo, input, outputExpected, desc);
544}
545
546template<armnn::DataType ArmnnType, typename T = armnn::ResolveType<ArmnnType>>
547LayerTestResult<T, 2> StridedSliceShrinkAxisMaskBitPosition0And2Test(
548 armnn::IWorkloadFactory& workloadFactory,
549 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager)
550{
551 armnn::TensorInfo inputTensorInfo;
552 armnn::TensorInfo outputTensorInfo;
553
554 unsigned int inputShape[] = {3, 2, 3, 1};
555 unsigned int outputShape[] = {2, 1};
556
557 armnn::StridedSliceQueueDescriptor desc;
558 desc.m_Parameters.m_Begin = {0, 0, 0, 0};
559 desc.m_Parameters.m_End = {1, 1, 1, 1};
560 desc.m_Parameters.m_Stride = {1, 1, 1, 1};
561 desc.m_Parameters.m_EndMask = (1 << 4) - 1;
562 desc.m_Parameters.m_ShrinkAxisMask = (1 << 0) | (1 << 2);
563
564 inputTensorInfo = armnn::TensorInfo(4, inputShape, ArmnnType);
565 outputTensorInfo = armnn::TensorInfo(2, outputShape, ArmnnType);
566
567 std::vector<float> input = std::vector<float>(
568 {
569 1.0f, 2.0f, 3.0f, 4.0f, 5.0f, 6.0f,
570
571 7.0f, 8.0f, 9.0f, 10.0f, 11.0f, 12.0f,
572
573 13.0f, 14.0f, 15.0f, 16.0f, 17.0f, 18.0f
574 });
575
576 std::vector<float> outputExpected = std::vector<float>(
577 {
578 1.0f, 4.0f
579 });
580
581 return StridedSliceTestImpl<T, 4, 2>(
582 workloadFactory, memoryManager, inputTensorInfo, outputTensorInfo, input, outputExpected, desc);
583}
584
585template<armnn::DataType ArmnnType, typename T = armnn::ResolveType<ArmnnType>>
586LayerTestResult<T, 2> StridedSliceShrinkAxisMaskBitPosition0And3Test(
587 armnn::IWorkloadFactory& workloadFactory,
588 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager)
589{
590 armnn::TensorInfo inputTensorInfo;
591 armnn::TensorInfo outputTensorInfo;
592
593 unsigned int inputShape[] = {3, 2, 3, 1};
594 unsigned int outputShape[] = {2, 3};
595
596 armnn::StridedSliceQueueDescriptor desc;
597 desc.m_Parameters.m_Begin = {0, 0, 0, 0};
598 desc.m_Parameters.m_End = {1, 1, 1, 1};
599 desc.m_Parameters.m_Stride = {1, 1, 1, 1};
600 desc.m_Parameters.m_EndMask = (1 << 4) - 1;
601 desc.m_Parameters.m_ShrinkAxisMask = (1 << 0) | (1 << 3);
602
603 inputTensorInfo = armnn::TensorInfo(4, inputShape, ArmnnType);
604 outputTensorInfo = armnn::TensorInfo(2, outputShape, ArmnnType);
605
606 std::vector<float> input = std::vector<float>(
607 {
608 1.0f, 2.0f, 3.0f, 4.0f, 5.0f, 6.0f,
609
610 7.0f, 8.0f, 9.0f, 10.0f, 11.0f, 12.0f,
611
612 13.0f, 14.0f, 15.0f, 16.0f, 17.0f, 18.0f
613 });
614
615 std::vector<float> outputExpected = std::vector<float>(
616 {
617 1.0f, 2.0f, 3.0f, 4.0f, 5.0f, 6.0f
618 });
619
620 return StridedSliceTestImpl<T, 4, 2>(
621 workloadFactory, memoryManager, inputTensorInfo, outputTensorInfo, input, outputExpected, desc);
622}
623
624template<armnn::DataType ArmnnType, typename T = armnn::ResolveType<ArmnnType>>
625LayerTestResult<T, 1> StridedSliceShrinkAxisMaskBitPosition0And1And3Test(
626 armnn::IWorkloadFactory& workloadFactory,
627 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager)
628{
629 armnn::TensorInfo inputTensorInfo;
630 armnn::TensorInfo outputTensorInfo;
631
632 unsigned int inputShape[] = {3, 2, 3, 1};
633 unsigned int outputShape[] = {3};
634
635 armnn::StridedSliceQueueDescriptor desc;
636 desc.m_Parameters.m_Begin = {0, 0, 0, 0};
637 desc.m_Parameters.m_End = {1, 1, 1, 1};
638 desc.m_Parameters.m_Stride = {1, 1, 1, 1};
639 desc.m_Parameters.m_EndMask = (1 << 4) - 1;
640 desc.m_Parameters.m_ShrinkAxisMask = (1 << 0) | (1 << 1) | (1 << 3);
641
642 inputTensorInfo = armnn::TensorInfo(4, inputShape, ArmnnType);
643 outputTensorInfo = armnn::TensorInfo(1, outputShape, ArmnnType);
644
645 std::vector<float> input = std::vector<float>(
646 {
647 1.0f, 2.0f, 3.0f, 4.0f, 5.0f, 6.0f,
648
649 7.0f, 8.0f, 9.0f, 10.0f, 11.0f, 12.0f,
650
651 13.0f, 14.0f, 15.0f, 16.0f, 17.0f, 18.0f
652 });
653
654 std::vector<float> outputExpected = std::vector<float>(
655 {
656 1.0f, 2.0f, 3.0f
657 });
658
659 return StridedSliceTestImpl<T, 4, 1>(
660 workloadFactory, memoryManager, inputTensorInfo, outputTensorInfo, input, outputExpected, desc);
661}
662
663template<armnn::DataType ArmnnType, typename T = armnn::ResolveType<ArmnnType>>
Aron Virginas-Tar00d306e2019-08-28 18:08:46 +0100664LayerTestResult<T, 3> StridedSlice3dTest(
Nattapat Chaimanowong1216b582018-11-23 15:33:41 +0000665 armnn::IWorkloadFactory& workloadFactory,
666 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager)
667{
668 armnn::TensorInfo inputTensorInfo;
669 armnn::TensorInfo outputTensorInfo;
670
671 unsigned int inputShape[] = {3, 3, 3};
672 unsigned int outputShape[] = {2, 2, 2};
673
674 armnn::StridedSliceQueueDescriptor desc;
675 desc.m_Parameters.m_Begin = {0, 0, 0};
676 desc.m_Parameters.m_End = {1, 1, 1};
677 desc.m_Parameters.m_Stride = {2, 2, 2};
678 desc.m_Parameters.m_EndMask = (1 << 3) - 1;
679
Nattapat Chaimanowong649dd952019-01-22 16:10:44 +0000680 inputTensorInfo = armnn::TensorInfo(3, inputShape, ArmnnType);
681 outputTensorInfo = armnn::TensorInfo(3, outputShape, ArmnnType);
Nattapat Chaimanowong1216b582018-11-23 15:33:41 +0000682
683 std::vector<float> input = std::vector<float>(
684 {
685 1.0f, 2.0f, 3.0f, 4.0f, 5.0f, 6.0f, 7.0f, 8.0f, 9.0f,
686
687 10.0f, 11.0f, 12.0f, 13.0f, 14.0f, 15.0f, 16.0f, 17.0f, 18.0f,
688
689 19.0f, 20.0f, 21.0f, 22.0f, 23.0f, 24.0f, 25.0f, 26.0f, 27.0f
690 });
691
692 std::vector<float> outputExpected = std::vector<float>(
693 {
694 1.0f, 3.0f, 7.0f, 9.0f,
695
696 19.0f, 21.0f, 25.0f, 27.0f
697 });
698
699 return StridedSliceTestImpl<T, 3, 3>(
700 workloadFactory, memoryManager, inputTensorInfo, outputTensorInfo, input, outputExpected, desc);
701}
702
Nattapat Chaimanowong649dd952019-01-22 16:10:44 +0000703template<armnn::DataType ArmnnType, typename T = armnn::ResolveType<ArmnnType>>
Aron Virginas-Tar00d306e2019-08-28 18:08:46 +0100704LayerTestResult<T, 3> StridedSlice3dReverseTest(
Nattapat Chaimanowong1216b582018-11-23 15:33:41 +0000705 armnn::IWorkloadFactory& workloadFactory,
706 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager)
707{
708 armnn::TensorInfo inputTensorInfo;
709 armnn::TensorInfo outputTensorInfo;
710
711 unsigned int inputShape[] = {3, 3, 3};
712 unsigned int outputShape[] = {2, 2, 2};
713
714 armnn::StridedSliceQueueDescriptor desc;
715 desc.m_Parameters.m_Begin = {-1, -1, -1};
716 desc.m_Parameters.m_End = {-4, -4, -4};
717 desc.m_Parameters.m_Stride = {-2, -2, -2};
718
Nattapat Chaimanowong649dd952019-01-22 16:10:44 +0000719 inputTensorInfo = armnn::TensorInfo(3, inputShape, ArmnnType);
720 outputTensorInfo = armnn::TensorInfo(3, outputShape, ArmnnType);
Nattapat Chaimanowong1216b582018-11-23 15:33:41 +0000721
722 std::vector<float> input = std::vector<float>(
723 {
724 1.0f, 2.0f, 3.0f, 4.0f, 5.0f, 6.0f, 7.0f, 8.0f, 9.0f,
725
726 10.0f, 11.0f, 12.0f, 13.0f, 14.0f, 15.0f, 16.0f, 17.0f, 18.0f,
727
728 19.0f, 20.0f, 21.0f, 22.0f, 23.0f, 24.0f, 25.0f, 26.0f, 27.0f
729 });
730
731 std::vector<float> outputExpected = std::vector<float>(
732 {
733 27.0f, 25.0f, 21.0f, 19.0f,
734
735 9.0f, 7.0f, 3.0f, 1.0f
736 });
737
738 return StridedSliceTestImpl<T, 3, 3>(
739 workloadFactory, memoryManager, inputTensorInfo, outputTensorInfo, input, outputExpected, desc);
740}
741
Nattapat Chaimanowong649dd952019-01-22 16:10:44 +0000742template<armnn::DataType ArmnnType, typename T = armnn::ResolveType<ArmnnType>>
Aron Virginas-Tar00d306e2019-08-28 18:08:46 +0100743LayerTestResult<T, 2> StridedSlice2dTest(
Nattapat Chaimanowong1216b582018-11-23 15:33:41 +0000744 armnn::IWorkloadFactory& workloadFactory,
745 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager)
746{
747 armnn::TensorInfo inputTensorInfo;
748 armnn::TensorInfo outputTensorInfo;
749
750 unsigned int inputShape[] = {3, 3};
751 unsigned int outputShape[] = {2, 2};
752
753 armnn::StridedSliceQueueDescriptor desc;
754 desc.m_Parameters.m_Begin = {0, 0};
755 desc.m_Parameters.m_End = {1, 1};
756 desc.m_Parameters.m_Stride = {2, 2};
757 desc.m_Parameters.m_EndMask = (1 << 2) - 1;
758
Nattapat Chaimanowong649dd952019-01-22 16:10:44 +0000759 inputTensorInfo = armnn::TensorInfo(2, inputShape, ArmnnType);
760 outputTensorInfo = armnn::TensorInfo(2, outputShape, ArmnnType);
Nattapat Chaimanowong1216b582018-11-23 15:33:41 +0000761
762 std::vector<float> input = std::vector<float>(
763 {
764 1.0f, 2.0f, 3.0f,
765
766 4.0f, 5.0f, 6.0f,
767
768 7.0f, 8.0f, 9.0f
769 });
770
771 std::vector<float> outputExpected = std::vector<float>(
772 {
773 1.0f, 3.0f,
774
775 7.0f, 9.0f
776 });
777
778 return StridedSliceTestImpl<T, 2, 2>(
779 workloadFactory, memoryManager, inputTensorInfo, outputTensorInfo, input, outputExpected, desc);
780}
781
Nattapat Chaimanowong649dd952019-01-22 16:10:44 +0000782template<armnn::DataType ArmnnType, typename T = armnn::ResolveType<ArmnnType>>
Aron Virginas-Tar00d306e2019-08-28 18:08:46 +0100783LayerTestResult<T, 2> StridedSlice2dReverseTest(
Nattapat Chaimanowong1216b582018-11-23 15:33:41 +0000784 armnn::IWorkloadFactory& workloadFactory,
785 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager)
786{
787 armnn::TensorInfo inputTensorInfo;
788 armnn::TensorInfo outputTensorInfo;
789
790 unsigned int inputShape[] = {3, 3};
791 unsigned int outputShape[] = {2, 2};
792
793 armnn::StridedSliceQueueDescriptor desc;
794 desc.m_Parameters.m_Begin = {0, 0};
795 desc.m_Parameters.m_End = {1, 1};
796 desc.m_Parameters.m_Stride = {-2, -2};
797 desc.m_Parameters.m_BeginMask = (1 << 2) - 1;
798 desc.m_Parameters.m_EndMask = (1 << 2) - 1;
799
Nattapat Chaimanowong649dd952019-01-22 16:10:44 +0000800 inputTensorInfo = armnn::TensorInfo(2, inputShape, ArmnnType);
801 outputTensorInfo = armnn::TensorInfo(2, outputShape, ArmnnType);
Nattapat Chaimanowong1216b582018-11-23 15:33:41 +0000802
803 std::vector<float> input = std::vector<float>(
804 {
805 1.0f, 2.0f, 3.0f,
806
807 4.0f, 5.0f, 6.0f,
808
809 7.0f, 8.0f, 9.0f
810 });
811
812 std::vector<float> outputExpected = std::vector<float>(
813 {
814 9.0f, 7.0f,
815
816 3.0f, 1.0f
817 });
818
819 return StridedSliceTestImpl<T, 2, 2>(
820 workloadFactory, memoryManager, inputTensorInfo, outputTensorInfo, input, outputExpected, desc);
821}
822
823} // anonymous namespace
Aron Virginas-Tar00d306e2019-08-28 18:08:46 +0100824
825LayerTestResult<float, 4> StridedSlice4dFloat32Test(
826 armnn::IWorkloadFactory& workloadFactory,
827 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager)
828{
829 return StridedSlice4dTest<armnn::DataType::Float32>(workloadFactory, memoryManager);
830}
831
832LayerTestResult<float, 4> StridedSlice4dReverseFloat32Test(
833 armnn::IWorkloadFactory& workloadFactory,
834 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager)
835{
836 return StridedSlice4dReverseTest<armnn::DataType::Float32>(workloadFactory, memoryManager);
837}
838
839LayerTestResult<float, 4> StridedSliceSimpleStrideFloat32Test(
840 armnn::IWorkloadFactory& workloadFactory,
841 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager)
842{
843 return StridedSliceSimpleStrideTest<armnn::DataType::Float32>(workloadFactory, memoryManager);
844}
845
846LayerTestResult<float, 4> StridedSliceSimpleRangeMaskFloat32Test(
847 armnn::IWorkloadFactory& workloadFactory,
848 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager)
849{
850 return StridedSliceSimpleRangeMaskTest<armnn::DataType::Float32>(workloadFactory, memoryManager);
851}
852
853LayerTestResult<float, 2> StridedSliceShrinkAxisMaskFloat32Test(
854 armnn::IWorkloadFactory& workloadFactory,
855 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager)
856{
857 return StridedSliceShrinkAxisMaskTest<armnn::DataType::Float32>(workloadFactory, memoryManager);
858}
859
Francis Murtaghec33a912019-11-05 14:26:23 +0000860LayerTestResult<float, 4> StridedSliceShrinkAxisMaskCTSFloat32Test(
861 armnn::IWorkloadFactory& workloadFactory,
862 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager)
863{
864 return StridedSliceShrinkAxisMaskCTSTest<armnn::DataType::Float32>(workloadFactory, memoryManager);
865}
866
867LayerTestResult<float, 2> StridedSliceShrinkAxisMaskBitPosition0Dim3Float32Test(
868 armnn::IWorkloadFactory& workloadFactory,
869 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager)
870{
871 return StridedSliceShrinkAxisMaskBitPosition0Dim3Test<armnn::DataType::Float32>(workloadFactory, memoryManager);
872}
873
874LayerTestResult<float, 3> StridedSliceShrinkAxisMaskBitPosition0Float32Test(
875 armnn::IWorkloadFactory& workloadFactory,
876 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager)
877{
878 return StridedSliceShrinkAxisMaskBitPosition0Test<armnn::DataType::Float32>(workloadFactory, memoryManager);
879}
880
881LayerTestResult<float, 3> StridedSliceShrinkAxisMaskBitPosition1Float32Test(
882 armnn::IWorkloadFactory& workloadFactory,
883 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager)
884{
885 return StridedSliceShrinkAxisMaskBitPosition1Test<armnn::DataType::Float32>(workloadFactory, memoryManager);
886}
887
888LayerTestResult<float, 3> StridedSliceShrinkAxisMaskBitPosition2Float32Test(
889 armnn::IWorkloadFactory& workloadFactory,
890 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager)
891{
892 return StridedSliceShrinkAxisMaskBitPosition2Test<armnn::DataType::Float32>(workloadFactory, memoryManager);
893}
894
895LayerTestResult<float, 3> StridedSliceShrinkAxisMaskBitPosition3Float32Test(
896 armnn::IWorkloadFactory& workloadFactory,
897 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager)
898{
899 return StridedSliceShrinkAxisMaskBitPosition3Test<armnn::DataType::Float32>(workloadFactory, memoryManager);
900}
901
902LayerTestResult<float, 2> StridedSliceShrinkAxisMaskBitPosition0And1Float32Test(
903 armnn::IWorkloadFactory& workloadFactory,
904 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager)
905{
906 return StridedSliceShrinkAxisMaskBitPosition0And1Test<armnn::DataType::Float32>(workloadFactory, memoryManager);
907}
908
909LayerTestResult<float, 2> StridedSliceShrinkAxisMaskBitPosition0And2Float32Test(
910 armnn::IWorkloadFactory& workloadFactory,
911 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager)
912{
913 return StridedSliceShrinkAxisMaskBitPosition0And2Test<armnn::DataType::Float32>(workloadFactory, memoryManager);
914}
915
916LayerTestResult<float, 2> StridedSliceShrinkAxisMaskBitPosition0And3Float32Test(
917 armnn::IWorkloadFactory& workloadFactory,
918 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager)
919{
920 return StridedSliceShrinkAxisMaskBitPosition0And3Test<armnn::DataType::Float32>(workloadFactory, memoryManager);
921}
922
923LayerTestResult<float, 1> StridedSliceShrinkAxisMaskBitPosition0And1And3Float32Test(
924 armnn::IWorkloadFactory& workloadFactory,
925 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager)
926{
927 return StridedSliceShrinkAxisMaskBitPosition0And1And3Test<armnn::DataType::Float32>(workloadFactory, memoryManager);
928}
929
Aron Virginas-Tar00d306e2019-08-28 18:08:46 +0100930LayerTestResult<float, 3> StridedSlice3dFloat32Test(
931 armnn::IWorkloadFactory& workloadFactory,
932 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager)
933{
934 return StridedSlice3dTest<armnn::DataType::Float32>(workloadFactory, memoryManager);
935}
936
937LayerTestResult<float, 3> StridedSlice3dReverseFloat32Test(
938 armnn::IWorkloadFactory& workloadFactory,
939 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager)
940{
941 return StridedSlice3dReverseTest<armnn::DataType::Float32>(workloadFactory, memoryManager);
942}
943
944LayerTestResult<float, 2> StridedSlice2dFloat32Test(
945 armnn::IWorkloadFactory& workloadFactory,
946 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager)
947{
948 return StridedSlice2dTest<armnn::DataType::Float32>(workloadFactory, memoryManager);
949}
950
951LayerTestResult<float, 2> StridedSlice2dReverseFloat32Test(
952 armnn::IWorkloadFactory& workloadFactory,
953 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager)
954{
955 return StridedSlice2dReverseTest<armnn::DataType::Float32>(workloadFactory, memoryManager);
956}
957
958LayerTestResult<uint8_t, 4> StridedSlice4dUint8Test(
959 armnn::IWorkloadFactory& workloadFactory,
960 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager)
961{
Derek Lambertif90c56d2020-01-10 17:14:08 +0000962 return StridedSlice4dTest<armnn::DataType::QAsymmU8>(workloadFactory, memoryManager);
Aron Virginas-Tar00d306e2019-08-28 18:08:46 +0100963}
964
965LayerTestResult<uint8_t, 4> StridedSlice4dReverseUint8Test(
966 armnn::IWorkloadFactory& workloadFactory,
967 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager)
968{
Derek Lambertif90c56d2020-01-10 17:14:08 +0000969 return StridedSlice4dReverseTest<armnn::DataType::QAsymmU8>(workloadFactory, memoryManager);
Aron Virginas-Tar00d306e2019-08-28 18:08:46 +0100970}
971
972LayerTestResult<uint8_t, 4> StridedSliceSimpleStrideUint8Test(
973 armnn::IWorkloadFactory& workloadFactory,
974 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager)
975{
Derek Lambertif90c56d2020-01-10 17:14:08 +0000976 return StridedSliceSimpleStrideTest<armnn::DataType::QAsymmU8>(workloadFactory, memoryManager);
Aron Virginas-Tar00d306e2019-08-28 18:08:46 +0100977}
978
979LayerTestResult<uint8_t, 4> StridedSliceSimpleRangeMaskUint8Test(
980 armnn::IWorkloadFactory& workloadFactory,
981 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager)
982{
Derek Lambertif90c56d2020-01-10 17:14:08 +0000983 return StridedSliceSimpleRangeMaskTest<armnn::DataType::QAsymmU8>(workloadFactory, memoryManager);
Aron Virginas-Tar00d306e2019-08-28 18:08:46 +0100984}
985
986LayerTestResult<uint8_t, 2> StridedSliceShrinkAxisMaskUint8Test(
987 armnn::IWorkloadFactory& workloadFactory,
988 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager)
989{
Derek Lambertif90c56d2020-01-10 17:14:08 +0000990 return StridedSliceShrinkAxisMaskTest<armnn::DataType::QAsymmU8>(workloadFactory, memoryManager);
Aron Virginas-Tar00d306e2019-08-28 18:08:46 +0100991}
992
Francis Murtaghec33a912019-11-05 14:26:23 +0000993LayerTestResult<uint8_t, 2> StridedSliceShrinkAxisMaskBitPosition0Dim3Uint8Test(
994 armnn::IWorkloadFactory& workloadFactory,
995 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager)
996{
Derek Lambertif90c56d2020-01-10 17:14:08 +0000997 return StridedSliceShrinkAxisMaskBitPosition0Dim3Test<armnn::DataType::QAsymmU8>(workloadFactory,
Francis Murtaghec33a912019-11-05 14:26:23 +0000998 memoryManager);
999}
1000
1001LayerTestResult<uint8_t, 3> StridedSliceShrinkAxisMaskBitPosition0Uint8Test(
1002 armnn::IWorkloadFactory& workloadFactory,
1003 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager)
1004{
Derek Lambertif90c56d2020-01-10 17:14:08 +00001005 return StridedSliceShrinkAxisMaskBitPosition0Test<armnn::DataType::QAsymmU8>(workloadFactory,
Francis Murtaghec33a912019-11-05 14:26:23 +00001006 memoryManager);
1007}
1008
1009LayerTestResult<uint8_t, 3> StridedSliceShrinkAxisMaskBitPosition1Uint8Test(
1010 armnn::IWorkloadFactory& workloadFactory,
1011 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager)
1012{
Derek Lambertif90c56d2020-01-10 17:14:08 +00001013 return StridedSliceShrinkAxisMaskBitPosition1Test<armnn::DataType::QAsymmU8>(workloadFactory,
Francis Murtaghec33a912019-11-05 14:26:23 +00001014 memoryManager);
1015}
1016
1017LayerTestResult<uint8_t, 3> StridedSliceShrinkAxisMaskBitPosition2Uint8Test(
1018 armnn::IWorkloadFactory& workloadFactory,
1019 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager)
1020{
Derek Lambertif90c56d2020-01-10 17:14:08 +00001021 return StridedSliceShrinkAxisMaskBitPosition2Test<armnn::DataType::QAsymmU8>(workloadFactory,
Francis Murtaghec33a912019-11-05 14:26:23 +00001022 memoryManager);
1023}
1024
1025LayerTestResult<uint8_t, 3> StridedSliceShrinkAxisMaskBitPosition3Uint8Test(
1026 armnn::IWorkloadFactory& workloadFactory,
1027 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager)
1028{
Derek Lambertif90c56d2020-01-10 17:14:08 +00001029 return StridedSliceShrinkAxisMaskBitPosition3Test<armnn::DataType::QAsymmU8>(workloadFactory,
Francis Murtaghec33a912019-11-05 14:26:23 +00001030 memoryManager);
1031}
1032
1033LayerTestResult<uint8_t, 2> StridedSliceShrinkAxisMaskBitPosition0And1Uint8Test(
1034 armnn::IWorkloadFactory& workloadFactory,
1035 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager)
1036{
Derek Lambertif90c56d2020-01-10 17:14:08 +00001037 return StridedSliceShrinkAxisMaskBitPosition0And1Test<armnn::DataType::QAsymmU8>(workloadFactory,
Francis Murtaghec33a912019-11-05 14:26:23 +00001038 memoryManager);
1039}
1040
1041LayerTestResult<uint8_t, 2> StridedSliceShrinkAxisMaskBitPosition0And2Uint8Test(
1042 armnn::IWorkloadFactory& workloadFactory,
1043 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager)
1044{
Derek Lambertif90c56d2020-01-10 17:14:08 +00001045 return StridedSliceShrinkAxisMaskBitPosition0And2Test<armnn::DataType::QAsymmU8>(workloadFactory,
Francis Murtaghec33a912019-11-05 14:26:23 +00001046 memoryManager);
1047}
1048
1049LayerTestResult<uint8_t, 2> StridedSliceShrinkAxisMaskBitPosition0And3Uint8Test(
1050 armnn::IWorkloadFactory& workloadFactory,
1051 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager)
1052{
Derek Lambertif90c56d2020-01-10 17:14:08 +00001053 return StridedSliceShrinkAxisMaskBitPosition0And3Test<armnn::DataType::QAsymmU8>(workloadFactory,
Francis Murtaghec33a912019-11-05 14:26:23 +00001054 memoryManager);
1055}
1056
1057LayerTestResult<uint8_t, 1> StridedSliceShrinkAxisMaskBitPosition0And1And3Uint8Test(
1058 armnn::IWorkloadFactory& workloadFactory,
1059 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager)
1060{
Derek Lambertif90c56d2020-01-10 17:14:08 +00001061 return StridedSliceShrinkAxisMaskBitPosition0And1And3Test<armnn::DataType::QAsymmU8>(workloadFactory,
Francis Murtaghec33a912019-11-05 14:26:23 +00001062 memoryManager);
1063}
1064
Aron Virginas-Tar00d306e2019-08-28 18:08:46 +01001065LayerTestResult<uint8_t, 3> StridedSlice3dUint8Test(
1066 armnn::IWorkloadFactory& workloadFactory,
1067 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager)
1068{
Derek Lambertif90c56d2020-01-10 17:14:08 +00001069 return StridedSlice3dTest<armnn::DataType::QAsymmU8>(workloadFactory, memoryManager);
Aron Virginas-Tar00d306e2019-08-28 18:08:46 +01001070}
1071
1072LayerTestResult<uint8_t, 3> StridedSlice3dReverseUint8Test(
1073 armnn::IWorkloadFactory& workloadFactory,
1074 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager)
1075{
Derek Lambertif90c56d2020-01-10 17:14:08 +00001076 return StridedSlice3dReverseTest<armnn::DataType::QAsymmU8>(workloadFactory, memoryManager);
Aron Virginas-Tar00d306e2019-08-28 18:08:46 +01001077}
1078
1079LayerTestResult<uint8_t, 2> StridedSlice2dUint8Test(
1080 armnn::IWorkloadFactory& workloadFactory,
1081 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager)
1082{
Derek Lambertif90c56d2020-01-10 17:14:08 +00001083 return StridedSlice2dTest<armnn::DataType::QAsymmU8>(workloadFactory, memoryManager);
Aron Virginas-Tar00d306e2019-08-28 18:08:46 +01001084}
1085
1086LayerTestResult<uint8_t, 2> StridedSlice2dReverseUint8Test(
1087 armnn::IWorkloadFactory& workloadFactory,
1088 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager)
1089{
Derek Lambertif90c56d2020-01-10 17:14:08 +00001090 return StridedSlice2dReverseTest<armnn::DataType::QAsymmU8>(workloadFactory, memoryManager);
Aron Virginas-Tar00d306e2019-08-28 18:08:46 +01001091}
1092
1093LayerTestResult<int16_t, 4> StridedSlice4dInt16Test(
1094 armnn::IWorkloadFactory& workloadFactory,
1095 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager)
1096{
Derek Lambertif90c56d2020-01-10 17:14:08 +00001097 return StridedSlice4dTest<armnn::DataType::QSymmS16>(workloadFactory, memoryManager);
Aron Virginas-Tar00d306e2019-08-28 18:08:46 +01001098}
1099
1100LayerTestResult<int16_t, 4> StridedSlice4dReverseInt16Test(
1101 armnn::IWorkloadFactory& workloadFactory,
1102 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager)
1103{
Derek Lambertif90c56d2020-01-10 17:14:08 +00001104 return StridedSlice4dReverseTest<armnn::DataType::QSymmS16>(workloadFactory, memoryManager);
Aron Virginas-Tar00d306e2019-08-28 18:08:46 +01001105}
1106
1107LayerTestResult<int16_t, 4> StridedSliceSimpleStrideInt16Test(
1108 armnn::IWorkloadFactory& workloadFactory,
1109 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager)
1110{
Derek Lambertif90c56d2020-01-10 17:14:08 +00001111 return StridedSliceSimpleStrideTest<armnn::DataType::QSymmS16>(workloadFactory, memoryManager);
Aron Virginas-Tar00d306e2019-08-28 18:08:46 +01001112}
1113
1114LayerTestResult<int16_t, 4> StridedSliceSimpleRangeMaskInt16Test(
1115 armnn::IWorkloadFactory& workloadFactory,
1116 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager)
1117{
Derek Lambertif90c56d2020-01-10 17:14:08 +00001118 return StridedSliceSimpleRangeMaskTest<armnn::DataType::QSymmS16>(workloadFactory, memoryManager);
Aron Virginas-Tar00d306e2019-08-28 18:08:46 +01001119}
1120
1121LayerTestResult<int16_t, 2> StridedSliceShrinkAxisMaskInt16Test(
1122 armnn::IWorkloadFactory& workloadFactory,
1123 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager)
1124{
Derek Lambertif90c56d2020-01-10 17:14:08 +00001125 return StridedSliceShrinkAxisMaskTest<armnn::DataType::QSymmS16>(workloadFactory, memoryManager);
Aron Virginas-Tar00d306e2019-08-28 18:08:46 +01001126}
1127
1128LayerTestResult<int16_t, 3> StridedSlice3dInt16Test(
1129 armnn::IWorkloadFactory& workloadFactory,
1130 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager)
1131{
Derek Lambertif90c56d2020-01-10 17:14:08 +00001132 return StridedSlice3dTest<armnn::DataType::QSymmS16>(workloadFactory, memoryManager);
Aron Virginas-Tar00d306e2019-08-28 18:08:46 +01001133}
1134
1135LayerTestResult<int16_t, 3> StridedSlice3dReverseInt16Test(
1136 armnn::IWorkloadFactory& workloadFactory,
1137 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager)
1138{
Derek Lambertif90c56d2020-01-10 17:14:08 +00001139 return StridedSlice3dReverseTest<armnn::DataType::QSymmS16>(workloadFactory, memoryManager);
Aron Virginas-Tar00d306e2019-08-28 18:08:46 +01001140}
1141
1142LayerTestResult<int16_t, 2> StridedSlice2dInt16Test(
1143 armnn::IWorkloadFactory& workloadFactory,
1144 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager)
1145{
Derek Lambertif90c56d2020-01-10 17:14:08 +00001146 return StridedSlice2dTest<armnn::DataType::QSymmS16>(workloadFactory, memoryManager);
Aron Virginas-Tar00d306e2019-08-28 18:08:46 +01001147}
1148
1149LayerTestResult<int16_t, 2> StridedSlice2dReverseInt16Test(
1150 armnn::IWorkloadFactory& workloadFactory,
1151 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager)
1152{
Derek Lambertif90c56d2020-01-10 17:14:08 +00001153 return StridedSlice2dReverseTest<armnn::DataType::QSymmS16>(workloadFactory, memoryManager);
Aron Virginas-Tar00d306e2019-08-28 18:08:46 +01001154}