ArmNN
 21.02
StridedSliceTestImpl.cpp
Go to the documentation of this file.
1 //
2 // Copyright © 2017 Arm Ltd and Contributors. All rights reserved.
3 // SPDX-License-Identifier: MIT
4 //
5 
7 
8 #include <QuantizeHelper.hpp>
9 #include <ResolveType.hpp>
10 
11 
14 
15 #include <test/TensorHelpers.hpp>
16 
17 namespace
18 {
19 
20 template<typename T, std::size_t InDim, std::size_t OutDim>
21 LayerTestResult<T, OutDim> StridedSliceTestImpl(
22  armnn::IWorkloadFactory& workloadFactory,
24  const armnn::ITensorHandleFactory& tensorHandleFactory,
25  armnn::TensorInfo& inputTensorInfo,
26  armnn::TensorInfo& outputTensorInfo,
27  std::vector<float>& inputData,
28  std::vector<float>& outputExpectedData,
30  const float qScale = 1.0f,
31  const int32_t qOffset = 0)
32 {
33  IgnoreUnused(memoryManager);
34  if(armnn::IsQuantizedType<T>())
35  {
36  inputTensorInfo.SetQuantizationScale(qScale);
37  inputTensorInfo.SetQuantizationOffset(qOffset);
38 
39  outputTensorInfo.SetQuantizationScale(qScale);
40  outputTensorInfo.SetQuantizationOffset(qOffset);
41  }
42 
43  boost::multi_array<T, InDim> input =
44  MakeTensor<T, InDim>(inputTensorInfo, armnnUtils::QuantizedVector<T>(inputData, qScale, qOffset));
45 
46  LayerTestResult<T, OutDim> ret(outputTensorInfo);
47  ret.outputExpected =
48  MakeTensor<T, OutDim>(outputTensorInfo, armnnUtils::QuantizedVector<T>(outputExpectedData, qScale, qOffset));
49 
50  std::unique_ptr<armnn::ITensorHandle> inputHandle =
51  tensorHandleFactory.CreateTensorHandle(inputTensorInfo);
52 
53  std::unique_ptr<armnn::ITensorHandle> outputHandle =
54  tensorHandleFactory.CreateTensorHandle(outputTensorInfo);
55 
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 
74 template<armnn::DataType ArmnnType, typename T = armnn::ResolveType<ArmnnType>>
75 LayerTestResult<T, 4> StridedSlice4dTest(
76  armnn::IWorkloadFactory& workloadFactory,
78  const armnn::ITensorHandleFactory& tensorHandleFactory)
79 {
80  armnn::TensorInfo inputTensorInfo;
81  armnn::TensorInfo outputTensorInfo;
82 
83  unsigned int inputShape[] = {3, 2, 3, 1};
84  unsigned int outputShape[] = {1, 2, 3, 1};
85 
87  desc.m_Parameters.m_Begin = {1, 0, 0, 0};
88  desc.m_Parameters.m_End = {2, 2, 3, 1};
89  desc.m_Parameters.m_Stride = {1, 1, 1, 1};
90 
91  inputTensorInfo = armnn::TensorInfo(4, inputShape, ArmnnType);
92  outputTensorInfo = armnn::TensorInfo(4, outputShape, ArmnnType);
93 
94  std::vector<float> input = std::vector<float>(
95  {
96  1.0f, 1.0f, 1.0f, 2.0f, 2.0f, 2.0f,
97 
98  3.0f, 3.0f, 3.0f, 4.0f, 4.0f, 4.0f,
99 
100  5.0f, 5.0f, 5.0f, 6.0f, 6.0f, 6.0f
101  });
102 
103  std::vector<float> outputExpected = std::vector<float>(
104  {
105  3.0f, 3.0f, 3.0f, 4.0f, 4.0f, 4.0f
106  });
107 
108  return StridedSliceTestImpl<T, 4, 4>(
109  workloadFactory, memoryManager, tensorHandleFactory,
110  inputTensorInfo, outputTensorInfo, input, outputExpected, desc);
111 }
112 
113 template<armnn::DataType ArmnnType, typename T = armnn::ResolveType<ArmnnType>>
114 LayerTestResult<T, 4> StridedSlice4dReverseTest(
115  armnn::IWorkloadFactory& workloadFactory,
117  const armnn::ITensorHandleFactory& tensorHandleFactory)
118 {
119  armnn::TensorInfo inputTensorInfo;
120  armnn::TensorInfo outputTensorInfo;
121 
122  unsigned int inputShape[] = {3, 2, 3, 1};
123  unsigned int outputShape[] = {1, 2, 3, 1};
124 
126  desc.m_Parameters.m_Begin = {1, -1, 0, 0};
127  desc.m_Parameters.m_End = {2, -3, 3, 1};
128  desc.m_Parameters.m_Stride = {1, -1, 1, 1};
129 
130  inputTensorInfo = armnn::TensorInfo(4, inputShape, ArmnnType);
131  outputTensorInfo = armnn::TensorInfo(4, outputShape, ArmnnType);
132 
133  std::vector<float> input = std::vector<float>(
134  {
135  1.0f, 1.0f, 1.0f, 2.0f, 2.0f, 2.0f,
136 
137  3.0f, 3.0f, 3.0f, 4.0f, 4.0f, 4.0f,
138 
139  5.0f, 5.0f, 5.0f, 6.0f, 6.0f, 6.0f
140  });
141 
142  std::vector<float> outputExpected = std::vector<float>(
143  {
144  4.0f, 4.0f, 4.0f, 3.0f, 3.0f, 3.0f
145  });
146 
147  return StridedSliceTestImpl<T, 4, 4>(
148  workloadFactory, memoryManager, tensorHandleFactory,
149  inputTensorInfo, outputTensorInfo, input, outputExpected, desc);
150 }
151 
152 template<armnn::DataType ArmnnType, typename T = armnn::ResolveType<ArmnnType>>
153 LayerTestResult<T, 4> StridedSliceSimpleStrideTest(
154  armnn::IWorkloadFactory& workloadFactory,
156  const armnn::ITensorHandleFactory& tensorHandleFactory)
157 {
158  armnn::TensorInfo inputTensorInfo;
159  armnn::TensorInfo outputTensorInfo;
160 
161  unsigned int inputShape[] = {3, 2, 3, 1};
162  unsigned int outputShape[] = {2, 1, 2, 1};
163 
165  desc.m_Parameters.m_Begin = {0, 0, 0, 0};
166  desc.m_Parameters.m_End = {3, 2, 3, 1};
167  desc.m_Parameters.m_Stride = {2, 2, 2, 1};
168 
169  inputTensorInfo = armnn::TensorInfo(4, inputShape, ArmnnType);
170  outputTensorInfo = armnn::TensorInfo(4, outputShape, ArmnnType);
171 
172  std::vector<float> input = std::vector<float>(
173  {
174  1.0f, 1.0f, 1.0f, 2.0f, 2.0f, 2.0f,
175 
176  3.0f, 3.0f, 3.0f, 4.0f, 4.0f, 4.0f,
177 
178  5.0f, 5.0f, 5.0f, 6.0f, 6.0f, 6.0f
179  });
180 
181  std::vector<float> outputExpected = std::vector<float>(
182  {
183  1.0f, 1.0f,
184 
185  5.0f, 5.0f
186  });
187 
188  return StridedSliceTestImpl<T, 4, 4>(
189  workloadFactory, memoryManager, tensorHandleFactory,
190  inputTensorInfo, outputTensorInfo, input, outputExpected, desc);
191 }
192 
193 template<armnn::DataType ArmnnType, typename T = armnn::ResolveType<ArmnnType>>
194 LayerTestResult<T, 4> StridedSliceSimpleRangeMaskTest(
195  armnn::IWorkloadFactory& workloadFactory,
197  const armnn::ITensorHandleFactory& tensorHandleFactory)
198 {
199  armnn::TensorInfo inputTensorInfo;
200  armnn::TensorInfo outputTensorInfo;
201 
202  unsigned int inputShape[] = {3, 2, 3, 1};
203  unsigned int outputShape[] = {3, 2, 3, 1};
204 
206  desc.m_Parameters.m_Begin = {1, 1, 1, 1};
207  desc.m_Parameters.m_End = {1, 1, 1, 1};
208  desc.m_Parameters.m_Stride = {1, 1, 1, 1};
209  desc.m_Parameters.m_BeginMask = (1 << 4) - 1;
210  desc.m_Parameters.m_EndMask = (1 << 4) - 1;
211 
212  inputTensorInfo = armnn::TensorInfo(4, inputShape, ArmnnType);
213  outputTensorInfo = armnn::TensorInfo(4, outputShape, ArmnnType);
214 
215  std::vector<float> input = std::vector<float>(
216  {
217  1.0f, 1.0f, 1.0f, 2.0f, 2.0f, 2.0f,
218 
219  3.0f, 3.0f, 3.0f, 4.0f, 4.0f, 4.0f,
220 
221  5.0f, 5.0f, 5.0f, 6.0f, 6.0f, 6.0f
222  });
223 
224  std::vector<float> outputExpected = std::vector<float>(
225  {
226  1.0f, 1.0f, 1.0f, 2.0f, 2.0f, 2.0f,
227 
228  3.0f, 3.0f, 3.0f, 4.0f, 4.0f, 4.0f,
229 
230  5.0f, 5.0f, 5.0f, 6.0f, 6.0f, 6.0f
231  });
232 
233  return StridedSliceTestImpl<T, 4, 4>(
234  workloadFactory, memoryManager, tensorHandleFactory,
235  inputTensorInfo, outputTensorInfo, input, outputExpected, desc);
236 }
237 
238 template<armnn::DataType ArmnnType, typename T = armnn::ResolveType<ArmnnType>>
239 LayerTestResult<T, 2> StridedSliceShrinkAxisMaskTest(
240  armnn::IWorkloadFactory& workloadFactory,
242  const armnn::ITensorHandleFactory& tensorHandleFactory)
243 {
244  armnn::TensorInfo inputTensorInfo;
245  armnn::TensorInfo outputTensorInfo;
246 
247  unsigned int inputShape[] = {3, 2, 3, 1};
248  unsigned int outputShape[] = {3, 1};
249 
251  desc.m_Parameters.m_Begin = {0, 0, 1, 0};
252  desc.m_Parameters.m_End = {1, 1, 1, 1};
253  desc.m_Parameters.m_Stride = {1, 1, 1, 1};
254  desc.m_Parameters.m_EndMask = (1 << 4) - 1;
255  desc.m_Parameters.m_ShrinkAxisMask = (1 << 1) | (1 << 2);
256 
257  inputTensorInfo = armnn::TensorInfo(4, inputShape, ArmnnType);
258  outputTensorInfo = armnn::TensorInfo(2, outputShape, ArmnnType);
259 
260  std::vector<float> input = std::vector<float>(
261  {
262  1.0f, 2.0f, 3.0f, 4.0f, 5.0f, 6.0f,
263 
264  7.0f, 8.0f, 9.0f, 10.0f, 11.0f, 12.0f,
265 
266  13.0f, 14.0f, 15.0f, 16.0f, 17.0f, 18.0f
267  });
268 
269  std::vector<float> outputExpected = std::vector<float>(
270  {
271  2.0f, 8.0f, 14.0f
272  });
273 
274  return StridedSliceTestImpl<T, 4, 2>(
275  workloadFactory, memoryManager, tensorHandleFactory,
276  inputTensorInfo, outputTensorInfo, input, outputExpected, desc);
277 }
278 
279 template<armnn::DataType ArmnnType, typename T = armnn::ResolveType<ArmnnType>>
280 LayerTestResult<T, 3> StridedSliceShrinkAxisMaskBitPosition0Test(
281  armnn::IWorkloadFactory& workloadFactory,
283  const armnn::ITensorHandleFactory& tensorHandleFactory)
284 {
285  armnn::TensorInfo inputTensorInfo;
286  armnn::TensorInfo outputTensorInfo;
287 
288  unsigned int inputShape[] = {3, 2, 3, 1};
289  unsigned int outputShape[] = {2, 3, 1};
290 
292  desc.m_Parameters.m_Begin = {0, 0, 0, 0};
293  desc.m_Parameters.m_End = {1, 1, 1, 1};
294  desc.m_Parameters.m_Stride = {1, 1, 1, 1};
295  desc.m_Parameters.m_EndMask = (1 << 4) - 1;
296  desc.m_Parameters.m_ShrinkAxisMask = (1 << 0);
297 
298  inputTensorInfo = armnn::TensorInfo(4, inputShape, ArmnnType);
299  outputTensorInfo = armnn::TensorInfo(3, outputShape, ArmnnType);
300 
301  std::vector<float> input = std::vector<float>(
302  {
303  1.0f, 2.0f, 3.0f, 4.0f, 5.0f, 6.0f,
304 
305  7.0f, 8.0f, 9.0f, 10.0f, 11.0f, 12.0f,
306 
307  13.0f, 14.0f, 15.0f, 16.0f, 17.0f, 18.0f
308  });
309 
310  std::vector<float> outputExpected = std::vector<float>(
311  {
312  1.0f, 2.0f, 3.0f, 4.0f, 5.0f, 6.0f
313  });
314 
315  return StridedSliceTestImpl<T, 4, 3>(
316  workloadFactory, memoryManager, tensorHandleFactory,
317  inputTensorInfo, outputTensorInfo, input, outputExpected, desc);
318 }
319 
320 template<armnn::DataType ArmnnType, typename T = armnn::ResolveType<ArmnnType>>
321 LayerTestResult<T, 3> StridedSliceShrinkAxisMaskBitPosition1Test(
322  armnn::IWorkloadFactory& workloadFactory,
324  const armnn::ITensorHandleFactory& tensorHandleFactory)
325 {
326  armnn::TensorInfo inputTensorInfo;
327  armnn::TensorInfo outputTensorInfo;
328 
329  unsigned int inputShape[] = {3, 2, 3, 1};
330  unsigned int outputShape[] = {3, 3, 1};
331 
333  desc.m_Parameters.m_Begin = {0, 0, 0, 0};
334  desc.m_Parameters.m_End = {1, 1, 1, 1};
335  desc.m_Parameters.m_Stride = {1, 1, 1, 1};
336  desc.m_Parameters.m_EndMask = (1 << 4) - 1;
337  desc.m_Parameters.m_ShrinkAxisMask = (1 << 1);
338 
339  inputTensorInfo = armnn::TensorInfo(4, inputShape, ArmnnType);
340  outputTensorInfo = armnn::TensorInfo(3, outputShape, ArmnnType);
341 
342  std::vector<float> input = std::vector<float>(
343  {
344  1.0f, 2.0f, 3.0f, 4.0f, 5.0f, 6.0f,
345 
346  7.0f, 8.0f, 9.0f, 10.0f, 11.0f, 12.0f,
347 
348  13.0f, 14.0f, 15.0f, 16.0f, 17.0f, 18.0f
349  });
350 
351  std::vector<float> outputExpected = std::vector<float>(
352  {
353  1.0f, 2.0f, 3.0f, 7.0f, 8.0f, 9.0f, 13.0f, 14.0f, 15.0f
354  });
355 
356  return StridedSliceTestImpl<T, 4, 3>(
357  workloadFactory, memoryManager, tensorHandleFactory,
358  inputTensorInfo, outputTensorInfo, input, outputExpected, desc);
359 }
360 
361 template<armnn::DataType ArmnnType, typename T = armnn::ResolveType<ArmnnType>>
362 LayerTestResult<T, 3> StridedSliceShrinkAxisMaskBitPosition2Test(
363  armnn::IWorkloadFactory& workloadFactory,
365  const armnn::ITensorHandleFactory& tensorHandleFactory)
366 {
367  armnn::TensorInfo inputTensorInfo;
368  armnn::TensorInfo outputTensorInfo;
369 
370  unsigned int inputShape[] = {3, 2, 3, 1};
371  unsigned int outputShape[] = {3, 2, 1};
372 
374  desc.m_Parameters.m_Begin = {0, 0, 0, 0};
375  desc.m_Parameters.m_End = {1, 1, 1, 1};
376  desc.m_Parameters.m_Stride = {1, 1, 1, 1};
377  desc.m_Parameters.m_EndMask = (1 << 4) - 1;
378  desc.m_Parameters.m_ShrinkAxisMask = (1 << 2);
379 
380  inputTensorInfo = armnn::TensorInfo(4, inputShape, ArmnnType);
381  outputTensorInfo = armnn::TensorInfo(3, outputShape, ArmnnType);
382 
383  std::vector<float> input = std::vector<float>(
384  {
385  1.0f, 2.0f, 3.0f, 4.0f, 5.0f, 6.0f,
386 
387  7.0f, 8.0f, 9.0f, 10.0f, 11.0f, 12.0f,
388 
389  13.0f, 14.0f, 15.0f, 16.0f, 17.0f, 18.0f
390  });
391 
392  std::vector<float> outputExpected = std::vector<float>(
393  {
394  1.0f, 4.0f, 7.0f, 10.0f, 13.0f, 16.0f
395  });
396 
397  return StridedSliceTestImpl<T, 4, 3>(
398  workloadFactory, memoryManager, tensorHandleFactory,
399  inputTensorInfo, outputTensorInfo, input, outputExpected, desc);
400 }
401 
402 template<armnn::DataType ArmnnType, typename T = armnn::ResolveType<ArmnnType>>
403 LayerTestResult<T, 3> StridedSliceShrinkAxisMaskBitPosition3Test(
404  armnn::IWorkloadFactory& workloadFactory,
406  const armnn::ITensorHandleFactory& tensorHandleFactory)
407 {
408  armnn::TensorInfo inputTensorInfo;
409  armnn::TensorInfo outputTensorInfo;
410 
411  unsigned int inputShape[] = {3, 2, 3, 1};
412  unsigned int outputShape[] = {3, 2, 3};
413 
415  desc.m_Parameters.m_Begin = {0, 0, 0, 0};
416  desc.m_Parameters.m_End = {1, 1, 1, 1};
417  desc.m_Parameters.m_Stride = {1, 1, 1, 1};
418  desc.m_Parameters.m_EndMask = (1 << 4) - 1;
419  desc.m_Parameters.m_ShrinkAxisMask = (1 << 3);
420 
421  inputTensorInfo = armnn::TensorInfo(4, inputShape, ArmnnType);
422  outputTensorInfo = armnn::TensorInfo(3, outputShape, ArmnnType);
423 
424  std::vector<float> input = std::vector<float>(
425  {
426  1.0f, 2.0f, 3.0f, 4.0f, 5.0f, 6.0f,
427 
428  7.0f, 8.0f, 9.0f, 10.0f, 11.0f, 12.0f,
429 
430  13.0f, 14.0f, 15.0f, 16.0f, 17.0f, 18.0f
431  });
432 
433  std::vector<float> outputExpected = std::vector<float>(
434  {
435  1.0f, 2.0f, 3.0f, 4.0f, 5.0f, 6.0f,
436 
437  7.0f, 8.0f, 9.0f, 10.0f, 11.0f, 12.0f,
438 
439  13.0f, 14.0f, 15.0f, 16.0f, 17.0f, 18.0f
440  });
441 
442  return StridedSliceTestImpl<T, 4, 3>(
443  workloadFactory, memoryManager, tensorHandleFactory,
444  inputTensorInfo, outputTensorInfo, input, outputExpected, desc);
445 }
446 
447 template<armnn::DataType ArmnnType, typename T = armnn::ResolveType<ArmnnType>>
448 LayerTestResult<T, 2> StridedSliceShrinkAxisMaskBitPosition0And1Test(
449  armnn::IWorkloadFactory& workloadFactory,
451  const armnn::ITensorHandleFactory& tensorHandleFactory)
452 {
453  armnn::TensorInfo inputTensorInfo;
454  armnn::TensorInfo outputTensorInfo;
455 
456  unsigned int inputShape[] = {3, 2, 3, 1};
457  unsigned int outputShape[] = {3, 1};
458 
460  desc.m_Parameters.m_Begin = {0, 0, 0, 0};
461  desc.m_Parameters.m_End = {1, 1, 1, 1};
462  desc.m_Parameters.m_Stride = {1, 1, 1, 1};
463  desc.m_Parameters.m_EndMask = (1 << 4) - 1;
464  desc.m_Parameters.m_ShrinkAxisMask = (1 << 0) | (1 << 1);
465 
466  inputTensorInfo = armnn::TensorInfo(4, inputShape, ArmnnType);
467  outputTensorInfo = armnn::TensorInfo(2, outputShape, ArmnnType);
468 
469  std::vector<float> input = std::vector<float>(
470  {
471  1.0f, 2.0f, 3.0f, 4.0f, 5.0f, 6.0f,
472 
473  7.0f, 8.0f, 9.0f, 10.0f, 11.0f, 12.0f,
474 
475  13.0f, 14.0f, 15.0f, 16.0f, 17.0f, 18.0f
476  });
477 
478  std::vector<float> outputExpected = std::vector<float>(
479  {
480  1.0f, 2.0f, 3.0f
481  });
482 
483  return StridedSliceTestImpl<T, 4, 2>(
484  workloadFactory, memoryManager, tensorHandleFactory,
485  inputTensorInfo, outputTensorInfo, input, outputExpected, desc);
486 }
487 
488 template<armnn::DataType ArmnnType, typename T = armnn::ResolveType<ArmnnType>>
489 LayerTestResult<T, 2> StridedSliceShrinkAxisMaskBitPosition0Dim3Test(
490  armnn::IWorkloadFactory& workloadFactory,
492  const armnn::ITensorHandleFactory& tensorHandleFactory)
493 {
494  armnn::TensorInfo inputTensorInfo;
495  armnn::TensorInfo outputTensorInfo;
496 
497  unsigned int inputShape[] = {2, 3, 1};
498  unsigned int outputShape[] = {3, 1};
499 
501  desc.m_Parameters.m_Begin = {0, 0, 0};
502  desc.m_Parameters.m_End = {0, 0, 0};
503  desc.m_Parameters.m_Stride = {1, 1, 1};
504  desc.m_Parameters.m_EndMask = (1 << 4) - 1;
505  desc.m_Parameters.m_ShrinkAxisMask = (1 << 0);
506 
507  inputTensorInfo = armnn::TensorInfo(3, inputShape, ArmnnType);
508  outputTensorInfo = armnn::TensorInfo(2, outputShape, ArmnnType);
509 
510  std::vector<float> input = std::vector<float>(
511  {
512  1.0f, 2.0f, 3.0f, 4.0f, 5.0f, 6.0f
513  });
514 
515  std::vector<float> outputExpected = std::vector<float>(
516  {
517  1.0f, 2.0f, 3.0f
518  });
519 
520  return StridedSliceTestImpl<T, 3, 2>(
521  workloadFactory, memoryManager, tensorHandleFactory,
522  inputTensorInfo, outputTensorInfo, input, outputExpected, desc);
523 }
524 
525 void FillVector(std::vector<float>& inputArray, float start, float step)
526 {
527  for (uint32_t i = 0; i < inputArray.size(); ++i)
528  {
529  inputArray[i] = start;
530  start += step;
531  }
532 }
533 
534 template<armnn::DataType ArmnnType, typename T = armnn::ResolveType<ArmnnType>>
535 LayerTestResult<T, 4> StridedSliceShrinkAxisMaskCTSTest(
536  armnn::IWorkloadFactory& workloadFactory,
538  const armnn::ITensorHandleFactory& tensorHandleFactory)
539 {
540  armnn::TensorInfo inputTensorInfo;
541  armnn::TensorInfo outputTensorInfo;
542 
543  unsigned int inputShape[] = {1, 1, 8, 942};
544  unsigned int outputShape[] = {1, 1, 1, 279};
545 
547  desc.m_Parameters.m_Begin = {0, 0, 1, 229};
548  desc.m_Parameters.m_End = {1, 1, 2, 787};
549  desc.m_Parameters.m_Stride = {2, 3, 3, 2};
550  desc.m_Parameters.m_BeginMask = 2;
551  desc.m_Parameters.m_EndMask = 0;
553 
554  inputTensorInfo = armnn::TensorInfo(4, inputShape, ArmnnType);
555  outputTensorInfo = armnn::TensorInfo(4, outputShape, ArmnnType);
556 
557  // Array from 1 to 7535
558  std::vector<float> input(7536);
559  FillVector(input, 1.0f, 1.0f);
560 
561  // Array from 1171 to 1727 in steps of 2
562  std::vector<float> outputExpected(279);
563  FillVector(outputExpected, 1171.0, 2.0f);
564 
565  return StridedSliceTestImpl<T, 4, 4>(
566  workloadFactory, memoryManager, tensorHandleFactory,
567  inputTensorInfo, outputTensorInfo, input, outputExpected, desc);
568 }
569 
570 template<armnn::DataType ArmnnType, typename T = armnn::ResolveType<ArmnnType>>
571 LayerTestResult<T, 2> StridedSliceShrinkAxisMaskBitPosition0And2Test(
572  armnn::IWorkloadFactory& workloadFactory,
574  const armnn::ITensorHandleFactory& tensorHandleFactory)
575 {
576  armnn::TensorInfo inputTensorInfo;
577  armnn::TensorInfo outputTensorInfo;
578 
579  unsigned int inputShape[] = {3, 2, 3, 1};
580  unsigned int outputShape[] = {2, 1};
581 
583  desc.m_Parameters.m_Begin = {0, 0, 0, 0};
584  desc.m_Parameters.m_End = {1, 1, 1, 1};
585  desc.m_Parameters.m_Stride = {1, 1, 1, 1};
586  desc.m_Parameters.m_EndMask = (1 << 4) - 1;
587  desc.m_Parameters.m_ShrinkAxisMask = (1 << 0) | (1 << 2);
588 
589  inputTensorInfo = armnn::TensorInfo(4, inputShape, ArmnnType);
590  outputTensorInfo = armnn::TensorInfo(2, outputShape, ArmnnType);
591 
592  std::vector<float> input = std::vector<float>(
593  {
594  1.0f, 2.0f, 3.0f, 4.0f, 5.0f, 6.0f,
595 
596  7.0f, 8.0f, 9.0f, 10.0f, 11.0f, 12.0f,
597 
598  13.0f, 14.0f, 15.0f, 16.0f, 17.0f, 18.0f
599  });
600 
601  std::vector<float> outputExpected = std::vector<float>(
602  {
603  1.0f, 4.0f
604  });
605 
606  return StridedSliceTestImpl<T, 4, 2>(
607  workloadFactory, memoryManager, tensorHandleFactory,
608  inputTensorInfo, outputTensorInfo, input, outputExpected, desc);
609 }
610 
611 template<armnn::DataType ArmnnType, typename T = armnn::ResolveType<ArmnnType>>
612 LayerTestResult<T, 2> StridedSliceShrinkAxisMaskBitPosition0And3Test(
613  armnn::IWorkloadFactory& workloadFactory,
615  const armnn::ITensorHandleFactory& tensorHandleFactory)
616 {
617  armnn::TensorInfo inputTensorInfo;
618  armnn::TensorInfo outputTensorInfo;
619 
620  unsigned int inputShape[] = {3, 2, 3, 1};
621  unsigned int outputShape[] = {2, 3};
622 
624  desc.m_Parameters.m_Begin = {0, 0, 0, 0};
625  desc.m_Parameters.m_End = {1, 1, 1, 1};
626  desc.m_Parameters.m_Stride = {1, 1, 1, 1};
627  desc.m_Parameters.m_EndMask = (1 << 4) - 1;
628  desc.m_Parameters.m_ShrinkAxisMask = (1 << 0) | (1 << 3);
629 
630  inputTensorInfo = armnn::TensorInfo(4, inputShape, ArmnnType);
631  outputTensorInfo = armnn::TensorInfo(2, outputShape, ArmnnType);
632 
633  std::vector<float> input = std::vector<float>(
634  {
635  1.0f, 2.0f, 3.0f, 4.0f, 5.0f, 6.0f,
636 
637  7.0f, 8.0f, 9.0f, 10.0f, 11.0f, 12.0f,
638 
639  13.0f, 14.0f, 15.0f, 16.0f, 17.0f, 18.0f
640  });
641 
642  std::vector<float> outputExpected = std::vector<float>(
643  {
644  1.0f, 2.0f, 3.0f, 4.0f, 5.0f, 6.0f
645  });
646 
647  return StridedSliceTestImpl<T, 4, 2>(
648  workloadFactory, memoryManager, tensorHandleFactory,
649  inputTensorInfo, outputTensorInfo, input, outputExpected, desc);
650 }
651 
652 template<armnn::DataType ArmnnType, typename T = armnn::ResolveType<ArmnnType>>
653 LayerTestResult<T, 1> StridedSliceShrinkAxisMaskBitPosition0And1And3Test(
654  armnn::IWorkloadFactory& workloadFactory,
656  const armnn::ITensorHandleFactory& tensorHandleFactory)
657 {
658  armnn::TensorInfo inputTensorInfo;
659  armnn::TensorInfo outputTensorInfo;
660 
661  unsigned int inputShape[] = {3, 2, 3, 1};
662  unsigned int outputShape[] = {3};
663 
665  desc.m_Parameters.m_Begin = {0, 0, 0, 0};
666  desc.m_Parameters.m_End = {1, 1, 1, 1};
667  desc.m_Parameters.m_Stride = {1, 1, 1, 1};
668  desc.m_Parameters.m_EndMask = (1 << 4) - 1;
669  desc.m_Parameters.m_ShrinkAxisMask = (1 << 0) | (1 << 1) | (1 << 3);
670 
671  inputTensorInfo = armnn::TensorInfo(4, inputShape, ArmnnType);
672  outputTensorInfo = armnn::TensorInfo(1, outputShape, ArmnnType);
673 
674  std::vector<float> input = std::vector<float>(
675  {
676  1.0f, 2.0f, 3.0f, 4.0f, 5.0f, 6.0f,
677 
678  7.0f, 8.0f, 9.0f, 10.0f, 11.0f, 12.0f,
679 
680  13.0f, 14.0f, 15.0f, 16.0f, 17.0f, 18.0f
681  });
682 
683  std::vector<float> outputExpected = std::vector<float>(
684  {
685  1.0f, 2.0f, 3.0f
686  });
687 
688  return StridedSliceTestImpl<T, 4, 1>(
689  workloadFactory, memoryManager, tensorHandleFactory,
690  inputTensorInfo, outputTensorInfo, input, outputExpected, desc);
691 }
692 
693 template<armnn::DataType ArmnnType, typename T = armnn::ResolveType<ArmnnType>>
694 LayerTestResult<T, 3> StridedSlice3dTest(
695  armnn::IWorkloadFactory& workloadFactory,
697  const armnn::ITensorHandleFactory& tensorHandleFactory)
698 {
699  armnn::TensorInfo inputTensorInfo;
700  armnn::TensorInfo outputTensorInfo;
701 
702  unsigned int inputShape[] = {3, 3, 3};
703  unsigned int outputShape[] = {2, 2, 2};
704 
706  desc.m_Parameters.m_Begin = {0, 0, 0};
707  desc.m_Parameters.m_End = {1, 1, 1};
708  desc.m_Parameters.m_Stride = {2, 2, 2};
709  desc.m_Parameters.m_EndMask = (1 << 3) - 1;
710 
711  inputTensorInfo = armnn::TensorInfo(3, inputShape, ArmnnType);
712  outputTensorInfo = armnn::TensorInfo(3, outputShape, ArmnnType);
713 
714  std::vector<float> input = std::vector<float>(
715  {
716  1.0f, 2.0f, 3.0f, 4.0f, 5.0f, 6.0f, 7.0f, 8.0f, 9.0f,
717 
718  10.0f, 11.0f, 12.0f, 13.0f, 14.0f, 15.0f, 16.0f, 17.0f, 18.0f,
719 
720  19.0f, 20.0f, 21.0f, 22.0f, 23.0f, 24.0f, 25.0f, 26.0f, 27.0f
721  });
722 
723  std::vector<float> outputExpected = std::vector<float>(
724  {
725  1.0f, 3.0f, 7.0f, 9.0f,
726 
727  19.0f, 21.0f, 25.0f, 27.0f
728  });
729 
730  return StridedSliceTestImpl<T, 3, 3>(
731  workloadFactory, memoryManager, tensorHandleFactory,
732  inputTensorInfo, outputTensorInfo, input, outputExpected, desc);
733 }
734 
735 template<armnn::DataType ArmnnType, typename T = armnn::ResolveType<ArmnnType>>
736 LayerTestResult<T, 3> StridedSlice3dReverseTest(
737  armnn::IWorkloadFactory& workloadFactory,
739  const armnn::ITensorHandleFactory& tensorHandleFactory)
740 {
741  armnn::TensorInfo inputTensorInfo;
742  armnn::TensorInfo outputTensorInfo;
743 
744  unsigned int inputShape[] = {3, 3, 3};
745  unsigned int outputShape[] = {2, 2, 2};
746 
748  desc.m_Parameters.m_Begin = {-1, -1, -1};
749  desc.m_Parameters.m_End = {-4, -4, -4};
750  desc.m_Parameters.m_Stride = {-2, -2, -2};
751 
752  inputTensorInfo = armnn::TensorInfo(3, inputShape, ArmnnType);
753  outputTensorInfo = armnn::TensorInfo(3, outputShape, ArmnnType);
754 
755  std::vector<float> input = std::vector<float>(
756  {
757  1.0f, 2.0f, 3.0f, 4.0f, 5.0f, 6.0f, 7.0f, 8.0f, 9.0f,
758 
759  10.0f, 11.0f, 12.0f, 13.0f, 14.0f, 15.0f, 16.0f, 17.0f, 18.0f,
760 
761  19.0f, 20.0f, 21.0f, 22.0f, 23.0f, 24.0f, 25.0f, 26.0f, 27.0f
762  });
763 
764  std::vector<float> outputExpected = std::vector<float>(
765  {
766  27.0f, 25.0f, 21.0f, 19.0f,
767 
768  9.0f, 7.0f, 3.0f, 1.0f
769  });
770 
771  return StridedSliceTestImpl<T, 3, 3>(
772  workloadFactory, memoryManager, tensorHandleFactory,
773  inputTensorInfo, outputTensorInfo, input, outputExpected, desc);
774 }
775 
776 template<armnn::DataType ArmnnType, typename T = armnn::ResolveType<ArmnnType>>
777 LayerTestResult<T, 2> StridedSlice2dTest(
778  armnn::IWorkloadFactory& workloadFactory,
780  const armnn::ITensorHandleFactory& tensorHandleFactory)
781 {
782  armnn::TensorInfo inputTensorInfo;
783  armnn::TensorInfo outputTensorInfo;
784 
785  unsigned int inputShape[] = {3, 3};
786  unsigned int outputShape[] = {2, 2};
787 
789  desc.m_Parameters.m_Begin = {0, 0};
790  desc.m_Parameters.m_End = {1, 1};
791  desc.m_Parameters.m_Stride = {2, 2};
792  desc.m_Parameters.m_EndMask = (1 << 2) - 1;
793 
794  inputTensorInfo = armnn::TensorInfo(2, inputShape, ArmnnType);
795  outputTensorInfo = armnn::TensorInfo(2, outputShape, ArmnnType);
796 
797  std::vector<float> input = std::vector<float>(
798  {
799  1.0f, 2.0f, 3.0f,
800 
801  4.0f, 5.0f, 6.0f,
802 
803  7.0f, 8.0f, 9.0f
804  });
805 
806  std::vector<float> outputExpected = std::vector<float>(
807  {
808  1.0f, 3.0f,
809 
810  7.0f, 9.0f
811  });
812 
813  return StridedSliceTestImpl<T, 2, 2>(
814  workloadFactory, memoryManager, tensorHandleFactory,
815  inputTensorInfo, outputTensorInfo, input, outputExpected, desc);
816 }
817 
818 template<armnn::DataType ArmnnType, typename T = armnn::ResolveType<ArmnnType>>
819 LayerTestResult<T, 2> StridedSlice2dReverseTest(
820  armnn::IWorkloadFactory& workloadFactory,
822  const armnn::ITensorHandleFactory& tensorHandleFactory)
823 {
824  armnn::TensorInfo inputTensorInfo;
825  armnn::TensorInfo outputTensorInfo;
826 
827  unsigned int inputShape[] = {3, 3};
828  unsigned int outputShape[] = {2, 2};
829 
831  desc.m_Parameters.m_Begin = {0, 0};
832  desc.m_Parameters.m_End = {1, 1};
833  desc.m_Parameters.m_Stride = {-2, -2};
834  desc.m_Parameters.m_BeginMask = (1 << 2) - 1;
835  desc.m_Parameters.m_EndMask = (1 << 2) - 1;
836 
837  inputTensorInfo = armnn::TensorInfo(2, inputShape, ArmnnType);
838  outputTensorInfo = armnn::TensorInfo(2, outputShape, ArmnnType);
839 
840  std::vector<float> input = std::vector<float>(
841  {
842  1.0f, 2.0f, 3.0f,
843 
844  4.0f, 5.0f, 6.0f,
845 
846  7.0f, 8.0f, 9.0f
847  });
848 
849  std::vector<float> outputExpected = std::vector<float>(
850  {
851  9.0f, 7.0f,
852 
853  3.0f, 1.0f
854  });
855 
856  return StridedSliceTestImpl<T, 2, 2>(
857  workloadFactory, memoryManager, tensorHandleFactory,
858  inputTensorInfo, outputTensorInfo, input, outputExpected, desc);
859 }
860 
861 } // anonymous namespace
862 
864  armnn::IWorkloadFactory& workloadFactory,
866  const armnn::ITensorHandleFactory& tensorHandleFactory)
867 {
868  return StridedSlice4dTest<armnn::DataType::Float32>(workloadFactory,
869  memoryManager,
870  tensorHandleFactory);
871 }
872 
874  armnn::IWorkloadFactory& workloadFactory,
876  const armnn::ITensorHandleFactory& tensorHandleFactory)
877 {
878  return StridedSlice4dReverseTest<armnn::DataType::Float32>(workloadFactory,
879  memoryManager,
880  tensorHandleFactory);
881 }
882 
884  armnn::IWorkloadFactory& workloadFactory,
886  const armnn::ITensorHandleFactory& tensorHandleFactory)
887 {
888  return StridedSliceSimpleStrideTest<armnn::DataType::Float32>(workloadFactory,
889  memoryManager,
890  tensorHandleFactory);
891 }
892 
894  armnn::IWorkloadFactory& workloadFactory,
896  const armnn::ITensorHandleFactory& tensorHandleFactory)
897 {
898  return StridedSliceSimpleRangeMaskTest<armnn::DataType::Float32>(workloadFactory,
899  memoryManager,
900  tensorHandleFactory);
901 }
902 
904  armnn::IWorkloadFactory& workloadFactory,
906  const armnn::ITensorHandleFactory& tensorHandleFactory)
907 {
908  return StridedSliceShrinkAxisMaskTest<armnn::DataType::Float32>(workloadFactory,
909  memoryManager,
910  tensorHandleFactory);
911 }
912 
914  armnn::IWorkloadFactory& workloadFactory,
916  const armnn::ITensorHandleFactory& tensorHandleFactory)
917 {
918  return StridedSliceShrinkAxisMaskCTSTest<armnn::DataType::Float32>(workloadFactory,
919  memoryManager,
920  tensorHandleFactory);
921 }
922 
924  armnn::IWorkloadFactory& workloadFactory,
926  const armnn::ITensorHandleFactory& tensorHandleFactory)
927 {
928  return StridedSliceShrinkAxisMaskBitPosition0Dim3Test<armnn::DataType::Float32>(workloadFactory,
929  memoryManager,
930  tensorHandleFactory);
931 }
932 
934  armnn::IWorkloadFactory& workloadFactory,
936  const armnn::ITensorHandleFactory& tensorHandleFactory)
937 {
938  return StridedSliceShrinkAxisMaskBitPosition0Test<armnn::DataType::Float32>(workloadFactory,
939  memoryManager,
940  tensorHandleFactory);
941 }
942 
944  armnn::IWorkloadFactory& workloadFactory,
946  const armnn::ITensorHandleFactory& tensorHandleFactory)
947 {
948  return StridedSliceShrinkAxisMaskBitPosition1Test<armnn::DataType::Float32>(workloadFactory,
949  memoryManager,
950  tensorHandleFactory);
951 }
952 
954  armnn::IWorkloadFactory& workloadFactory,
956  const armnn::ITensorHandleFactory& tensorHandleFactory)
957 {
958  return StridedSliceShrinkAxisMaskBitPosition2Test<armnn::DataType::Float32>(workloadFactory,
959  memoryManager,
960  tensorHandleFactory);
961 }
962 
964  armnn::IWorkloadFactory& workloadFactory,
966  const armnn::ITensorHandleFactory& tensorHandleFactory)
967 {
968  return StridedSliceShrinkAxisMaskBitPosition3Test<armnn::DataType::Float32>(workloadFactory,
969  memoryManager,
970  tensorHandleFactory);
971 }
972 
974  armnn::IWorkloadFactory& workloadFactory,
976  const armnn::ITensorHandleFactory& tensorHandleFactory)
977 {
978  return StridedSliceShrinkAxisMaskBitPosition0And1Test<armnn::DataType::Float32>(workloadFactory,
979  memoryManager,
980  tensorHandleFactory);
981 }
982 
984  armnn::IWorkloadFactory& workloadFactory,
986  const armnn::ITensorHandleFactory& tensorHandleFactory)
987 {
988  return StridedSliceShrinkAxisMaskBitPosition0And2Test<armnn::DataType::Float32>(workloadFactory,
989  memoryManager,
990  tensorHandleFactory);
991 }
992 
994  armnn::IWorkloadFactory& workloadFactory,
996  const armnn::ITensorHandleFactory& tensorHandleFactory)
997 {
998  return StridedSliceShrinkAxisMaskBitPosition0And3Test<armnn::DataType::Float32>(workloadFactory,
999  memoryManager,
1000  tensorHandleFactory);
1001 }
1002 
1004  armnn::IWorkloadFactory& workloadFactory,
1006  const armnn::ITensorHandleFactory& tensorHandleFactory)
1007 {
1008  return StridedSliceShrinkAxisMaskBitPosition0And1And3Test<armnn::DataType::Float32>(workloadFactory,
1009  memoryManager,
1010  tensorHandleFactory);
1011 }
1012 
1014  armnn::IWorkloadFactory& workloadFactory,
1016  const armnn::ITensorHandleFactory& tensorHandleFactory)
1017 {
1018  return StridedSlice3dTest<armnn::DataType::Float32>(workloadFactory,
1019  memoryManager,
1020  tensorHandleFactory);
1021 }
1022 
1024  armnn::IWorkloadFactory& workloadFactory,
1026  const armnn::ITensorHandleFactory& tensorHandleFactory)
1027 {
1028  return StridedSlice3dReverseTest<armnn::DataType::Float32>(workloadFactory,
1029  memoryManager,
1030  tensorHandleFactory);
1031 }
1032 
1034  armnn::IWorkloadFactory& workloadFactory,
1036  const armnn::ITensorHandleFactory& tensorHandleFactory)
1037 {
1038  return StridedSlice2dTest<armnn::DataType::Float32>(workloadFactory,
1039  memoryManager,
1040  tensorHandleFactory);
1041 }
1042 
1044  armnn::IWorkloadFactory& workloadFactory,
1046  const armnn::ITensorHandleFactory& tensorHandleFactory)
1047 {
1048  return StridedSlice2dReverseTest<armnn::DataType::Float32>(workloadFactory,
1049  memoryManager,
1050  tensorHandleFactory);
1051 }
1052 
1054  armnn::IWorkloadFactory& workloadFactory,
1056  const armnn::ITensorHandleFactory& tensorHandleFactory)
1057 {
1058  return StridedSlice4dTest<armnn::DataType::QAsymmU8>(workloadFactory,
1059  memoryManager,
1060  tensorHandleFactory);
1061 }
1062 
1064  armnn::IWorkloadFactory& workloadFactory,
1066  const armnn::ITensorHandleFactory& tensorHandleFactory)
1067 {
1068  return StridedSlice4dReverseTest<armnn::DataType::QAsymmU8>(workloadFactory,
1069  memoryManager,
1070  tensorHandleFactory);
1071 }
1072 
1074  armnn::IWorkloadFactory& workloadFactory,
1076  const armnn::ITensorHandleFactory& tensorHandleFactory)
1077 {
1078  return StridedSliceSimpleStrideTest<armnn::DataType::QAsymmU8>(workloadFactory,
1079  memoryManager,
1080  tensorHandleFactory);
1081 }
1082 
1084  armnn::IWorkloadFactory& workloadFactory,
1086  const armnn::ITensorHandleFactory& tensorHandleFactory)
1087 {
1088  return StridedSliceSimpleRangeMaskTest<armnn::DataType::QAsymmU8>(workloadFactory,
1089  memoryManager,
1090  tensorHandleFactory);
1091 }
1092 
1094  armnn::IWorkloadFactory& workloadFactory,
1096  const armnn::ITensorHandleFactory& tensorHandleFactory)
1097 {
1098  return StridedSliceShrinkAxisMaskTest<armnn::DataType::QAsymmU8>(workloadFactory,
1099  memoryManager,
1100  tensorHandleFactory);
1101 }
1102 
1104  armnn::IWorkloadFactory& workloadFactory,
1106  const armnn::ITensorHandleFactory& tensorHandleFactory)
1107 {
1108  return StridedSliceShrinkAxisMaskBitPosition0Dim3Test<armnn::DataType::QAsymmU8>(workloadFactory,
1109  memoryManager,
1110  tensorHandleFactory);
1111 }
1112 
1114  armnn::IWorkloadFactory& workloadFactory,
1116  const armnn::ITensorHandleFactory& tensorHandleFactory)
1117 {
1118  return StridedSliceShrinkAxisMaskBitPosition0Test<armnn::DataType::QAsymmU8>(workloadFactory,
1119  memoryManager,
1120  tensorHandleFactory);
1121 }
1122 
1124  armnn::IWorkloadFactory& workloadFactory,
1126  const armnn::ITensorHandleFactory& tensorHandleFactory)
1127 {
1128  return StridedSliceShrinkAxisMaskBitPosition1Test<armnn::DataType::QAsymmU8>(workloadFactory,
1129  memoryManager,
1130  tensorHandleFactory);
1131 }
1132 
1134  armnn::IWorkloadFactory& workloadFactory,
1136  const armnn::ITensorHandleFactory& tensorHandleFactory)
1137 {
1138  return StridedSliceShrinkAxisMaskBitPosition2Test<armnn::DataType::QAsymmU8>(workloadFactory,
1139  memoryManager,
1140  tensorHandleFactory);
1141 }
1142 
1144  armnn::IWorkloadFactory& workloadFactory,
1146  const armnn::ITensorHandleFactory& tensorHandleFactory)
1147 {
1148  return StridedSliceShrinkAxisMaskBitPosition3Test<armnn::DataType::QAsymmU8>(workloadFactory,
1149  memoryManager,
1150  tensorHandleFactory);
1151 }
1152 
1154  armnn::IWorkloadFactory& workloadFactory,
1156  const armnn::ITensorHandleFactory& tensorHandleFactory)
1157 {
1158  return StridedSliceShrinkAxisMaskBitPosition0And1Test<armnn::DataType::QAsymmU8>(workloadFactory,
1159  memoryManager,
1160  tensorHandleFactory);
1161 }
1162 
1164  armnn::IWorkloadFactory& workloadFactory,
1166  const armnn::ITensorHandleFactory& tensorHandleFactory)
1167 {
1168  return StridedSliceShrinkAxisMaskBitPosition0And2Test<armnn::DataType::QAsymmU8>(workloadFactory,
1169  memoryManager,
1170  tensorHandleFactory);
1171 }
1172 
1174  armnn::IWorkloadFactory& workloadFactory,
1176  const armnn::ITensorHandleFactory& tensorHandleFactory)
1177 {
1178  return StridedSliceShrinkAxisMaskBitPosition0And3Test<armnn::DataType::QAsymmU8>(workloadFactory,
1179  memoryManager,
1180  tensorHandleFactory);
1181 }
1182 
1184  armnn::IWorkloadFactory& workloadFactory,
1186  const armnn::ITensorHandleFactory& tensorHandleFactory)
1187 {
1188  return StridedSliceShrinkAxisMaskBitPosition0And1And3Test<armnn::DataType::QAsymmU8>(workloadFactory,
1189  memoryManager,
1190  tensorHandleFactory);
1191 }
1192 
1194  armnn::IWorkloadFactory& workloadFactory,
1196  const armnn::ITensorHandleFactory& tensorHandleFactory)
1197 {
1198  return StridedSlice3dTest<armnn::DataType::QAsymmU8>(workloadFactory, memoryManager, tensorHandleFactory);
1199 }
1200 
1202  armnn::IWorkloadFactory& workloadFactory,
1204  const armnn::ITensorHandleFactory& tensorHandleFactory)
1205 {
1206  return StridedSlice3dReverseTest<armnn::DataType::QAsymmU8>(workloadFactory, memoryManager, tensorHandleFactory);
1207 }
1208 
1210  armnn::IWorkloadFactory& workloadFactory,
1212  const armnn::ITensorHandleFactory& tensorHandleFactory)
1213 {
1214  return StridedSlice2dTest<armnn::DataType::QAsymmU8>(workloadFactory, memoryManager, tensorHandleFactory);
1215 }
1216 
1218  armnn::IWorkloadFactory& workloadFactory,
1220  const armnn::ITensorHandleFactory& tensorHandleFactory)
1221 {
1222  return StridedSlice2dReverseTest<armnn::DataType::QAsymmU8>(workloadFactory, memoryManager, tensorHandleFactory);
1223 }
1224 
1226  armnn::IWorkloadFactory& workloadFactory,
1228  const armnn::ITensorHandleFactory& tensorHandleFactory)
1229 {
1230  return StridedSlice4dTest<armnn::DataType::QSymmS16>(workloadFactory, memoryManager, tensorHandleFactory);
1231 }
1232 
1234  armnn::IWorkloadFactory& workloadFactory,
1236  const armnn::ITensorHandleFactory& tensorHandleFactory)
1237 {
1238  return StridedSlice4dReverseTest<armnn::DataType::QSymmS16>(workloadFactory, memoryManager, tensorHandleFactory);
1239 }
1240 
1242  armnn::IWorkloadFactory& workloadFactory,
1244  const armnn::ITensorHandleFactory& tensorHandleFactory)
1245 {
1246  return StridedSliceSimpleStrideTest<armnn::DataType::QSymmS16>(workloadFactory,
1247  memoryManager,
1248  tensorHandleFactory);
1249 }
1250 
1252  armnn::IWorkloadFactory& workloadFactory,
1254  const armnn::ITensorHandleFactory& tensorHandleFactory)
1255 {
1256  return StridedSliceSimpleRangeMaskTest<armnn::DataType::QSymmS16>(workloadFactory,
1257  memoryManager,
1258  tensorHandleFactory);
1259 }
1260 
1262  armnn::IWorkloadFactory& workloadFactory,
1264  const armnn::ITensorHandleFactory& tensorHandleFactory)
1265 {
1266  return StridedSliceShrinkAxisMaskTest<armnn::DataType::QSymmS16>(workloadFactory,
1267  memoryManager,
1268  tensorHandleFactory);
1269 }
1270 
1272  armnn::IWorkloadFactory& workloadFactory,
1274  const armnn::ITensorHandleFactory& tensorHandleFactory)
1275 {
1276  return StridedSlice3dTest<armnn::DataType::QSymmS16>(workloadFactory, memoryManager, tensorHandleFactory);
1277 }
1278 
1280  armnn::IWorkloadFactory& workloadFactory,
1282  const armnn::ITensorHandleFactory& tensorHandleFactory)
1283 {
1284  return StridedSlice3dReverseTest<armnn::DataType::QSymmS16>(workloadFactory, memoryManager, tensorHandleFactory);
1285 }
1286 
1288  armnn::IWorkloadFactory& workloadFactory,
1290  const armnn::ITensorHandleFactory& tensorHandleFactory)
1291 {
1292  return StridedSlice2dTest<armnn::DataType::QSymmS16>(workloadFactory, memoryManager, tensorHandleFactory);
1293 }
1294 
1296  armnn::IWorkloadFactory& workloadFactory,
1298  const armnn::ITensorHandleFactory& tensorHandleFactory)
1299 {
1300  return StridedSlice2dReverseTest<armnn::DataType::QSymmS16>(workloadFactory, memoryManager, tensorHandleFactory);
1301 }
LayerTestResult< uint8_t, 3 > StridedSlice3dUint8Test(armnn::IWorkloadFactory &workloadFactory, const armnn::IBackendInternal::IMemoryManagerSharedPtr &memoryManager, const armnn::ITensorHandleFactory &tensorHandleFactory)
LayerTestResult< float, 4 > StridedSliceShrinkAxisMaskCTSFloat32Test(armnn::IWorkloadFactory &workloadFactory, const armnn::IBackendInternal::IMemoryManagerSharedPtr &memoryManager, const armnn::ITensorHandleFactory &tensorHandleFactory)
LayerTestResult< uint8_t, 3 > StridedSliceShrinkAxisMaskBitPosition2Uint8Test(armnn::IWorkloadFactory &workloadFactory, const armnn::IBackendInternal::IMemoryManagerSharedPtr &memoryManager, const armnn::ITensorHandleFactory &tensorHandleFactory)
LayerTestResult< float, 2 > StridedSlice2dFloat32Test(armnn::IWorkloadFactory &workloadFactory, const armnn::IBackendInternal::IMemoryManagerSharedPtr &memoryManager, const armnn::ITensorHandleFactory &tensorHandleFactory)
LayerTestResult< uint8_t, 3 > StridedSliceShrinkAxisMaskBitPosition3Uint8Test(armnn::IWorkloadFactory &workloadFactory, const armnn::IBackendInternal::IMemoryManagerSharedPtr &memoryManager, const armnn::ITensorHandleFactory &tensorHandleFactory)
LayerTestResult< float, 3 > StridedSliceShrinkAxisMaskBitPosition3Float32Test(armnn::IWorkloadFactory &workloadFactory, const armnn::IBackendInternal::IMemoryManagerSharedPtr &memoryManager, const armnn::ITensorHandleFactory &tensorHandleFactory)
int32_t m_ShrinkAxisMask
Shrink axis mask value. If set, the nth specification shrinks the dimensionality by 1...
std::vector< int > m_Begin
Begin values for the input that will be sliced.
LayerTestResult< uint8_t, 2 > StridedSliceShrinkAxisMaskBitPosition0Dim3Uint8Test(armnn::IWorkloadFactory &workloadFactory, const armnn::IBackendInternal::IMemoryManagerSharedPtr &memoryManager, const armnn::ITensorHandleFactory &tensorHandleFactory)
LayerTestResult< float, 2 > StridedSlice2dReverseFloat32Test(armnn::IWorkloadFactory &workloadFactory, const armnn::IBackendInternal::IMemoryManagerSharedPtr &memoryManager, const armnn::ITensorHandleFactory &tensorHandleFactory)
virtual std::unique_ptr< IWorkload > CreateStridedSlice(const StridedSliceQueueDescriptor &descriptor, const WorkloadInfo &Info) const
LayerTestResult< float, 4 > StridedSliceSimpleRangeMaskFloat32Test(armnn::IWorkloadFactory &workloadFactory, const armnn::IBackendInternal::IMemoryManagerSharedPtr &memoryManager, const armnn::ITensorHandleFactory &tensorHandleFactory)
LayerTestResult< float, 3 > StridedSliceShrinkAxisMaskBitPosition2Float32Test(armnn::IWorkloadFactory &workloadFactory, const armnn::IBackendInternal::IMemoryManagerSharedPtr &memoryManager, const armnn::ITensorHandleFactory &tensorHandleFactory)
LayerTestResult< float, 2 > StridedSliceShrinkAxisMaskFloat32Test(armnn::IWorkloadFactory &workloadFactory, const armnn::IBackendInternal::IMemoryManagerSharedPtr &memoryManager, const armnn::ITensorHandleFactory &tensorHandleFactory)
LayerTestResult< uint8_t, 2 > StridedSlice2dReverseUint8Test(armnn::IWorkloadFactory &workloadFactory, const armnn::IBackendInternal::IMemoryManagerSharedPtr &memoryManager, const armnn::ITensorHandleFactory &tensorHandleFactory)
LayerTestResult< int16_t, 2 > StridedSliceShrinkAxisMaskInt16Test(armnn::IWorkloadFactory &workloadFactory, const armnn::IBackendInternal::IMemoryManagerSharedPtr &memoryManager, const armnn::ITensorHandleFactory &tensorHandleFactory)
void IgnoreUnused(Ts &&...)
int32_t m_BeginMask
Begin mask value.
LayerTestResult< float, 3 > StridedSlice3dFloat32Test(armnn::IWorkloadFactory &workloadFactory, const armnn::IBackendInternal::IMemoryManagerSharedPtr &memoryManager, const armnn::ITensorHandleFactory &tensorHandleFactory)
int32_t m_EndMask
End mask value.
LayerTestResult< float, 1 > StridedSliceShrinkAxisMaskBitPosition0And1And3Float32Test(armnn::IWorkloadFactory &workloadFactory, const armnn::IBackendInternal::IMemoryManagerSharedPtr &memoryManager, const armnn::ITensorHandleFactory &tensorHandleFactory)
LayerTestResult< uint8_t, 2 > StridedSliceShrinkAxisMaskBitPosition0And3Uint8Test(armnn::IWorkloadFactory &workloadFactory, const armnn::IBackendInternal::IMemoryManagerSharedPtr &memoryManager, const armnn::ITensorHandleFactory &tensorHandleFactory)
LayerTestResult< float, 3 > StridedSliceShrinkAxisMaskBitPosition0Float32Test(armnn::IWorkloadFactory &workloadFactory, const armnn::IBackendInternal::IMemoryManagerSharedPtr &memoryManager, const armnn::ITensorHandleFactory &tensorHandleFactory)
LayerTestResult< int16_t, 4 > StridedSlice4dInt16Test(armnn::IWorkloadFactory &workloadFactory, const armnn::IBackendInternal::IMemoryManagerSharedPtr &memoryManager, const armnn::ITensorHandleFactory &tensorHandleFactory)
LayerTestResult< int16_t, 4 > StridedSlice4dReverseInt16Test(armnn::IWorkloadFactory &workloadFactory, const armnn::IBackendInternal::IMemoryManagerSharedPtr &memoryManager, const armnn::ITensorHandleFactory &tensorHandleFactory)
LayerTestResult< uint8_t, 2 > StridedSlice2dUint8Test(armnn::IWorkloadFactory &workloadFactory, const armnn::IBackendInternal::IMemoryManagerSharedPtr &memoryManager, const armnn::ITensorHandleFactory &tensorHandleFactory)
LayerTestResult< float, 2 > StridedSliceShrinkAxisMaskBitPosition0And3Float32Test(armnn::IWorkloadFactory &workloadFactory, const armnn::IBackendInternal::IMemoryManagerSharedPtr &memoryManager, const armnn::ITensorHandleFactory &tensorHandleFactory)
LayerTestResult< int16_t, 3 > StridedSlice3dReverseInt16Test(armnn::IWorkloadFactory &workloadFactory, const armnn::IBackendInternal::IMemoryManagerSharedPtr &memoryManager, const armnn::ITensorHandleFactory &tensorHandleFactory)
LayerTestResult< float, 2 > StridedSliceShrinkAxisMaskBitPosition0And1Float32Test(armnn::IWorkloadFactory &workloadFactory, const armnn::IBackendInternal::IMemoryManagerSharedPtr &memoryManager, const armnn::ITensorHandleFactory &tensorHandleFactory)
std::shared_ptr< IMemoryManager > IMemoryManagerSharedPtr
LayerTestResult< uint8_t, 3 > StridedSliceShrinkAxisMaskBitPosition0Uint8Test(armnn::IWorkloadFactory &workloadFactory, const armnn::IBackendInternal::IMemoryManagerSharedPtr &memoryManager, const armnn::ITensorHandleFactory &tensorHandleFactory)
LayerTestResult< float, 4 > StridedSlice4dFloat32Test(armnn::IWorkloadFactory &workloadFactory, const armnn::IBackendInternal::IMemoryManagerSharedPtr &memoryManager, const armnn::ITensorHandleFactory &tensorHandleFactory)
LayerTestResult< uint8_t, 1 > StridedSliceShrinkAxisMaskBitPosition0And1And3Uint8Test(armnn::IWorkloadFactory &workloadFactory, const armnn::IBackendInternal::IMemoryManagerSharedPtr &memoryManager, const armnn::ITensorHandleFactory &tensorHandleFactory)
void SetQuantizationScale(float scale)
Definition: Tensor.cpp:464
LayerTestResult< uint8_t, 3 > StridedSliceShrinkAxisMaskBitPosition1Uint8Test(armnn::IWorkloadFactory &workloadFactory, const armnn::IBackendInternal::IMemoryManagerSharedPtr &memoryManager, const armnn::ITensorHandleFactory &tensorHandleFactory)
LayerTestResult< uint8_t, 3 > StridedSlice3dReverseUint8Test(armnn::IWorkloadFactory &workloadFactory, const armnn::IBackendInternal::IMemoryManagerSharedPtr &memoryManager, const armnn::ITensorHandleFactory &tensorHandleFactory)
std::vector< int > m_Stride
Stride values for the input that will be sliced.
void CopyDataFromITensorHandle(void *memory, const armnn::ITensorHandle *tensorHandle)
LayerTestResult< int16_t, 2 > StridedSlice2dReverseInt16Test(armnn::IWorkloadFactory &workloadFactory, const armnn::IBackendInternal::IMemoryManagerSharedPtr &memoryManager, const armnn::ITensorHandleFactory &tensorHandleFactory)
LayerTestResult< float, 2 > StridedSliceShrinkAxisMaskBitPosition0Dim3Float32Test(armnn::IWorkloadFactory &workloadFactory, const armnn::IBackendInternal::IMemoryManagerSharedPtr &memoryManager, const armnn::ITensorHandleFactory &tensorHandleFactory)
LayerTestResult< float, 3 > StridedSliceShrinkAxisMaskBitPosition1Float32Test(armnn::IWorkloadFactory &workloadFactory, const armnn::IBackendInternal::IMemoryManagerSharedPtr &memoryManager, const armnn::ITensorHandleFactory &tensorHandleFactory)
LayerTestResult< int16_t, 4 > StridedSliceSimpleStrideInt16Test(armnn::IWorkloadFactory &workloadFactory, const armnn::IBackendInternal::IMemoryManagerSharedPtr &memoryManager, const armnn::ITensorHandleFactory &tensorHandleFactory)
LayerTestResult< float, 3 > StridedSlice3dReverseFloat32Test(armnn::IWorkloadFactory &workloadFactory, const armnn::IBackendInternal::IMemoryManagerSharedPtr &memoryManager, const armnn::ITensorHandleFactory &tensorHandleFactory)
LayerTestResult< int16_t, 4 > StridedSliceSimpleRangeMaskInt16Test(armnn::IWorkloadFactory &workloadFactory, const armnn::IBackendInternal::IMemoryManagerSharedPtr &memoryManager, const armnn::ITensorHandleFactory &tensorHandleFactory)
std::vector< int > m_End
End values for the input that will be sliced.
LayerTestResult< uint8_t, 4 > StridedSlice4dReverseUint8Test(armnn::IWorkloadFactory &workloadFactory, const armnn::IBackendInternal::IMemoryManagerSharedPtr &memoryManager, const armnn::ITensorHandleFactory &tensorHandleFactory)
LayerTestResult< float, 2 > StridedSliceShrinkAxisMaskBitPosition0And2Float32Test(armnn::IWorkloadFactory &workloadFactory, const armnn::IBackendInternal::IMemoryManagerSharedPtr &memoryManager, const armnn::ITensorHandleFactory &tensorHandleFactory)
LayerTestResult< int16_t, 3 > StridedSlice3dInt16Test(armnn::IWorkloadFactory &workloadFactory, const armnn::IBackendInternal::IMemoryManagerSharedPtr &memoryManager, const armnn::ITensorHandleFactory &tensorHandleFactory)
LayerTestResult< uint8_t, 4 > StridedSlice4dUint8Test(armnn::IWorkloadFactory &workloadFactory, const armnn::IBackendInternal::IMemoryManagerSharedPtr &memoryManager, const armnn::ITensorHandleFactory &tensorHandleFactory)
LayerTestResult< uint8_t, 2 > StridedSliceShrinkAxisMaskBitPosition0And2Uint8Test(armnn::IWorkloadFactory &workloadFactory, const armnn::IBackendInternal::IMemoryManagerSharedPtr &memoryManager, const armnn::ITensorHandleFactory &tensorHandleFactory)
LayerTestResult< int16_t, 2 > StridedSlice2dInt16Test(armnn::IWorkloadFactory &workloadFactory, const armnn::IBackendInternal::IMemoryManagerSharedPtr &memoryManager, const armnn::ITensorHandleFactory &tensorHandleFactory)
Contains information about inputs and outputs to a layer.
LayerTestResult< uint8_t, 4 > StridedSliceSimpleStrideUint8Test(armnn::IWorkloadFactory &workloadFactory, const armnn::IBackendInternal::IMemoryManagerSharedPtr &memoryManager, const armnn::ITensorHandleFactory &tensorHandleFactory)
void SetQuantizationOffset(int32_t offset)
Definition: Tensor.cpp:480
LayerTestResult< float, 4 > StridedSliceSimpleStrideFloat32Test(armnn::IWorkloadFactory &workloadFactory, const armnn::IBackendInternal::IMemoryManagerSharedPtr &memoryManager, const armnn::ITensorHandleFactory &tensorHandleFactory)
LayerTestResult< uint8_t, 4 > StridedSliceSimpleRangeMaskUint8Test(armnn::IWorkloadFactory &workloadFactory, const armnn::IBackendInternal::IMemoryManagerSharedPtr &memoryManager, const armnn::ITensorHandleFactory &tensorHandleFactory)
LayerTestResult< float, 4 > StridedSlice4dReverseFloat32Test(armnn::IWorkloadFactory &workloadFactory, const armnn::IBackendInternal::IMemoryManagerSharedPtr &memoryManager, const armnn::ITensorHandleFactory &tensorHandleFactory)
virtual std::unique_ptr< ITensorHandle > CreateTensorHandle(const TensorInfo &tensorInfo) const =0
LayerTestResult< uint8_t, 2 > StridedSliceShrinkAxisMaskBitPosition0And1Uint8Test(armnn::IWorkloadFactory &workloadFactory, const armnn::IBackendInternal::IMemoryManagerSharedPtr &memoryManager, const armnn::ITensorHandleFactory &tensorHandleFactory)
void CopyDataToITensorHandle(armnn::ITensorHandle *tensorHandle, const void *memory)
LayerTestResult< uint8_t, 2 > StridedSliceShrinkAxisMaskUint8Test(armnn::IWorkloadFactory &workloadFactory, const armnn::IBackendInternal::IMemoryManagerSharedPtr &memoryManager, const armnn::ITensorHandleFactory &tensorHandleFactory)