blob: a56298babcebee9d53489f03ca6bcfd9b03891f1 [file] [log] [blame]
Giorgio Arena04a8f8c2017-11-23 11:45:24 +00001/*
2 * Copyright (c) 2017 ARM Limited.
3 *
4 * SPDX-License-Identifier: MIT
5 *
6 * Permission is hereby granted, free of charge, to any person obtaining a copy
7 * of this software and associated documentation files (the "Software"), to
8 * deal in the Software without restriction, including without limitation the
9 * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
10 * sell copies of the Software, and to permit persons to whom the Software is
11 * furnished to do so, subject to the following conditions:
12 *
13 * The above copyright notice and this permission notice shall be included in all
14 * copies or substantial portions of the Software.
15 *
16 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
17 * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
18 * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
19 * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
20 * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
21 * OUT OF OR IN CONCLCTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
22 * SOFTWARE.
23 */
24#include "arm_compute/core/Types.h"
25#include "arm_compute/runtime/NEON/functions/NEDepthConvertLayer.h"
26#include "arm_compute/runtime/Tensor.h"
27#include "arm_compute/runtime/TensorAllocator.h"
28#include "tests/NEON/Accessor.h"
29#include "tests/PaddingCalculator.h"
30#include "tests/datasets/ConvertPolicyDataset.h"
31#include "tests/datasets/ShapeDatasets.h"
32#include "tests/framework/Asserts.h"
33#include "tests/framework/Macros.h"
34#include "tests/framework/datasets/Datasets.h"
35#include "tests/validation/Validation.h"
36#include "tests/validation/fixtures/DepthConvertLayerFixture.h"
37
38namespace arm_compute
39{
40namespace test
41{
42namespace validation
43{
44namespace
45{
46/** Input data sets **/
47const auto DepthConvertLayerU8toU16Dataset = combine(framework::dataset::make("DataType", DataType::U8), framework::dataset::make("DataType", DataType::U16));
48const auto DepthConvertLayerU8toS16Dataset = combine(framework::dataset::make("DataType", DataType::U8), framework::dataset::make("DataType", DataType::S16));
49const auto DepthConvertLayerU8toS32Dataset = combine(framework::dataset::make("DataType", DataType::U8), framework::dataset::make("DataType", DataType::S32));
50const auto DepthConvertLayerU16toU8Dataset = combine(framework::dataset::make("DataType", DataType::U16), framework::dataset::make("DataType", DataType::U8));
51const auto DepthConvertLayerU16toU32Dataset = combine(framework::dataset::make("DataType", DataType::U16), framework::dataset::make("DataType", DataType::U32));
52const auto DepthConvertLayerS16toU8Dataset = combine(framework::dataset::make("DataType", DataType::S16), framework::dataset::make("DataType", DataType::U8));
53const auto DepthConvertLayerS16toS32Dataset = combine(framework::dataset::make("DataType", DataType::S16), framework::dataset::make("DataType", DataType::S32));
54const auto DepthConvertLayerQS8toFP32Dataset = combine(framework::dataset::make("DataType", DataType::QS8), framework::dataset::make("DataType", DataType::F32));
55const auto DepthConvertLayerQS16toFP32Dataset = combine(framework::dataset::make("DataType", DataType::QS16), framework::dataset::make("DataType", DataType::F32));
56const auto DepthConvertLayerFP32toQS8Dataset = combine(framework::dataset::make("DataType", DataType::F32), framework::dataset::make("DataType", DataType::QS8));
57const auto DepthConvertLayerFP32toQS16Dataset = combine(framework::dataset::make("DataType", DataType::F32), framework::dataset::make("DataType", DataType::QS16));
58const auto DepthConvertLayerShiftDataset = framework::dataset::make("Shift", 0, 7);
59const auto DepthConvertLayerFixedPointQuantizedDataset = framework::dataset::make("FractionalBits", 1, 7);
60} // namespace
61
62TEST_SUITE(NEON)
63TEST_SUITE(DepthConvertLayer)
64template <typename T>
65using NEDepthConvertLayerToU16Fixture = DepthConvertLayerValidationFixture<Tensor, Accessor, NEDepthConvertLayer, T, uint16_t>;
66template <typename T>
67using NEDepthConvertLayerToS16Fixture = DepthConvertLayerValidationFixture<Tensor, Accessor, NEDepthConvertLayer, T, int16_t>;
68template <typename T>
69using NEDepthConvertLayerToS32Fixture = DepthConvertLayerValidationFixture<Tensor, Accessor, NEDepthConvertLayer, T, int32_t>;
70template <typename T>
71using NEDepthConvertLayerToU8Fixture = DepthConvertLayerValidationFixture<Tensor, Accessor, NEDepthConvertLayer, T, uint8_t>;
72template <typename T>
73using NEDepthConvertLayerToU32Fixture = DepthConvertLayerValidationFixture<Tensor, Accessor, NEDepthConvertLayer, T, uint32_t>;
74template <typename T>
75using NEDepthConvertLayerToFP32FixedPointFixture = DepthConvertLayerValidationFractionalBitsFixture<Tensor, Accessor, NEDepthConvertLayer, T, float>;
76template <typename T>
77using NEDepthConvertLayerToQS8FixedPointFixture = DepthConvertLayerValidationFractionalBitsFixture<Tensor, Accessor, NEDepthConvertLayer, T, int8_t>;
78template <typename T>
79using NEDepthConvertLayerToQS16FixedPointFixture = DepthConvertLayerValidationFractionalBitsFixture<Tensor, Accessor, NEDepthConvertLayer, T, int16_t>;
80
81TEST_SUITE(U8_to_U16)
82DATA_TEST_CASE(Configuration, framework::DatasetMode::ALL, combine(combine(framework::dataset::concat(datasets::SmallShapes(), datasets::LargeShapes()), framework::dataset::make("ConvertPolicy", { ConvertPolicy::SATURATE, ConvertPolicy::WRAP })),
83 DepthConvertLayerShiftDataset),
84 shape, policy, shift)
85{
86 int fixed_point_position = 0;
87
88 // Create tensors
89 Tensor src = create_tensor<Tensor>(shape, DataType::U8, 1, fixed_point_position);
90 Tensor dst = create_tensor<Tensor>(shape, DataType::U16, 1, fixed_point_position);
91
92 // Create and Configure function
93 NEDepthConvertLayer depth_convert;
94 depth_convert.configure(&src, &dst, policy, shift);
95
96 // Validate valid region
97 const ValidRegion valid_region = shape_to_valid_region(shape);
98 validate(dst.info()->valid_region(), valid_region);
99
100 // Validate padding
101 const PaddingSize padding = PaddingCalculator(shape.x(), 16).required_padding();
102 validate(src.info()->padding(), padding);
103 validate(dst.info()->padding(), padding);
104}
105
106FIXTURE_DATA_TEST_CASE(RunSmall, NEDepthConvertLayerToU16Fixture<uint8_t>, framework::DatasetMode::PRECOMMIT, combine(combine(combine(datasets::SmallShapes(), DepthConvertLayerU8toU16Dataset),
107 framework::dataset::make("ConvertPolicy", { ConvertPolicy::SATURATE, ConvertPolicy::WRAP })),
108 DepthConvertLayerShiftDataset))
109{
110 // Validate output
111 validate(Accessor(_target), _reference);
112}
113
114FIXTURE_DATA_TEST_CASE(RunLarge, NEDepthConvertLayerToU16Fixture<uint8_t>, framework::DatasetMode::NIGHTLY, combine(combine(combine(datasets::LargeShapes(), DepthConvertLayerU8toU16Dataset),
115 framework::dataset::make("ConvertPolicy", { ConvertPolicy::SATURATE, ConvertPolicy::WRAP })),
116 DepthConvertLayerShiftDataset))
117{
118 // Validate output
119 validate(Accessor(_target), _reference);
120}
121TEST_SUITE_END()
122
123TEST_SUITE(U8_to_S16)
124DATA_TEST_CASE(Configuration, framework::DatasetMode::ALL, combine(combine(framework::dataset::concat(datasets::SmallShapes(), datasets::LargeShapes()), framework::dataset::make("ConvertPolicy", { ConvertPolicy::SATURATE, ConvertPolicy::WRAP })),
125 DepthConvertLayerShiftDataset),
126 shape, policy, shift)
127{
128 int fixed_point_position = 0;
129
130 // Create tensors
131 Tensor src = create_tensor<Tensor>(shape, DataType::U8, 1, fixed_point_position);
132 Tensor dst = create_tensor<Tensor>(shape, DataType::S16, 1, fixed_point_position);
133
134 // Create and Configure function
135 NEDepthConvertLayer depth_convert;
136 depth_convert.configure(&src, &dst, policy, shift);
137
138 // Validate valid region
139 const ValidRegion valid_region = shape_to_valid_region(shape);
140 validate(dst.info()->valid_region(), valid_region);
141
142 // Validate padding
143 const PaddingSize padding = PaddingCalculator(shape.x(), 16).required_padding();
144 validate(src.info()->padding(), padding);
145 validate(dst.info()->padding(), padding);
146}
147
148FIXTURE_DATA_TEST_CASE(RunSmall, NEDepthConvertLayerToS16Fixture<uint8_t>, framework::DatasetMode::PRECOMMIT, combine(combine(combine(datasets::SmallShapes(), DepthConvertLayerU8toS16Dataset),
149 framework::dataset::make("ConvertPolicy", { ConvertPolicy::SATURATE, ConvertPolicy::WRAP })),
150 DepthConvertLayerShiftDataset))
151{
152 // Validate output
153 validate(Accessor(_target), _reference);
154}
155
156FIXTURE_DATA_TEST_CASE(RunLarge, NEDepthConvertLayerToS16Fixture<uint8_t>, framework::DatasetMode::NIGHTLY, combine(combine(combine(datasets::LargeShapes(), DepthConvertLayerU8toS16Dataset),
157 framework::dataset::make("ConvertPolicy", { ConvertPolicy::SATURATE, ConvertPolicy::WRAP })),
158 DepthConvertLayerShiftDataset))
159{
160 // Validate output
161 validate(Accessor(_target), _reference);
162}
163TEST_SUITE_END()
164TEST_SUITE(U8_to_S32)
165DATA_TEST_CASE(Configuration, framework::DatasetMode::ALL, combine(combine(framework::dataset::concat(datasets::SmallShapes(), datasets::LargeShapes()), framework::dataset::make("ConvertPolicy", { ConvertPolicy::SATURATE, ConvertPolicy::WRAP })),
166 DepthConvertLayerShiftDataset),
167 shape, policy, shift)
168{
169 int fixed_point_position = 0;
170
171 // Create tensors
172 Tensor src = create_tensor<Tensor>(shape, DataType::U8, 1, fixed_point_position);
173 Tensor dst = create_tensor<Tensor>(shape, DataType::S32, 1, fixed_point_position);
174
175 // Create and Configure function
176 NEDepthConvertLayer depth_convert;
177 depth_convert.configure(&src, &dst, policy, shift);
178
179 // Validate valid region
180 const ValidRegion valid_region = shape_to_valid_region(shape);
181 validate(dst.info()->valid_region(), valid_region);
182
183 // Validate padding
184 const PaddingSize padding = PaddingCalculator(shape.x(), 16).required_padding();
185 validate(src.info()->padding(), padding);
186 validate(dst.info()->padding(), padding);
187}
188
189FIXTURE_DATA_TEST_CASE(RunSmall, NEDepthConvertLayerToS32Fixture<uint8_t>, framework::DatasetMode::PRECOMMIT, combine(combine(combine(datasets::SmallShapes(), DepthConvertLayerU8toS32Dataset),
190 framework::dataset::make("ConvertPolicy", { ConvertPolicy::SATURATE, ConvertPolicy::WRAP })),
191 DepthConvertLayerShiftDataset))
192{
193 // Validate output
194 validate(Accessor(_target), _reference);
195}
196
197FIXTURE_DATA_TEST_CASE(RunLarge, NEDepthConvertLayerToS32Fixture<uint8_t>, framework::DatasetMode::NIGHTLY, combine(combine(combine(datasets::LargeShapes(), DepthConvertLayerU8toS32Dataset),
198 framework::dataset::make("ConvertPolicy", { ConvertPolicy::SATURATE, ConvertPolicy::WRAP })),
199 DepthConvertLayerShiftDataset))
200{
201 // Validate output
202 validate(Accessor(_target), _reference);
203}
204TEST_SUITE_END()
205
206TEST_SUITE(U16_to_U8)
207DATA_TEST_CASE(Configuration, framework::DatasetMode::ALL, combine(combine(framework::dataset::concat(datasets::SmallShapes(), datasets::LargeShapes()), framework::dataset::make("ConvertPolicy", { ConvertPolicy::SATURATE, ConvertPolicy::WRAP })),
208 DepthConvertLayerShiftDataset),
209 shape, policy, shift)
210{
211 int fixed_point_position = 0;
212
213 // Create tensors
214 Tensor src = create_tensor<Tensor>(shape, DataType::U16, 1, fixed_point_position);
215 Tensor dst = create_tensor<Tensor>(shape, DataType::U8, 1, fixed_point_position);
216
217 // Create and Configure function
218 NEDepthConvertLayer depth_convert;
219 depth_convert.configure(&src, &dst, policy, shift);
220
221 // Validate valid region
222 const ValidRegion valid_region = shape_to_valid_region(shape);
223 validate(dst.info()->valid_region(), valid_region);
224
225 // Validate padding
226 const PaddingSize padding = PaddingCalculator(shape.x(), 16).required_padding();
227 validate(src.info()->padding(), padding);
228 validate(dst.info()->padding(), padding);
229}
230
231FIXTURE_DATA_TEST_CASE(RunSmall, NEDepthConvertLayerToU8Fixture<uint16_t>, framework::DatasetMode::PRECOMMIT, combine(combine(combine(datasets::SmallShapes(), DepthConvertLayerU16toU8Dataset),
232 framework::dataset::make("ConvertPolicy", { ConvertPolicy::SATURATE, ConvertPolicy::WRAP })),
233 DepthConvertLayerShiftDataset))
234{
235 // Validate output
236 validate(Accessor(_target), _reference);
237}
238FIXTURE_DATA_TEST_CASE(RunLarge, NEDepthConvertLayerToU8Fixture<uint16_t>, framework::DatasetMode::NIGHTLY, combine(combine(combine(datasets::LargeShapes(), DepthConvertLayerU16toU8Dataset),
239 framework::dataset::make("ConvertPolicy", { ConvertPolicy::SATURATE, ConvertPolicy::WRAP })),
240 DepthConvertLayerShiftDataset))
241{
242 // Validate output
243 validate(Accessor(_target), _reference);
244}
245TEST_SUITE_END()
246
247TEST_SUITE(U16_to_U32)
248DATA_TEST_CASE(Configuration, framework::DatasetMode::ALL, combine(combine(framework::dataset::concat(datasets::SmallShapes(), datasets::LargeShapes()), framework::dataset::make("ConvertPolicy", { ConvertPolicy::SATURATE, ConvertPolicy::WRAP })),
249 DepthConvertLayerShiftDataset),
250 shape, policy, shift)
251{
252 int fixed_point_position = 0;
253
254 // Create tensors
255 Tensor src = create_tensor<Tensor>(shape, DataType::U16, 1, fixed_point_position);
256 Tensor dst = create_tensor<Tensor>(shape, DataType::U32, 1, fixed_point_position);
257
258 // Create and Configure function
259 NEDepthConvertLayer depth_convert;
260 depth_convert.configure(&src, &dst, policy, shift);
261
262 // Validate valid region
263 const ValidRegion valid_region = shape_to_valid_region(shape);
264 validate(dst.info()->valid_region(), valid_region);
265
266 // Validate padding
267 const PaddingSize padding = PaddingCalculator(shape.x(), 16).required_padding();
268 validate(src.info()->padding(), padding);
269 validate(dst.info()->padding(), padding);
270}
271
272FIXTURE_DATA_TEST_CASE(RunSmall, NEDepthConvertLayerToU32Fixture<uint16_t>, framework::DatasetMode::PRECOMMIT, combine(combine(combine(datasets::SmallShapes(), DepthConvertLayerU16toU32Dataset),
273 framework::dataset::make("ConvertPolicy", { ConvertPolicy::SATURATE, ConvertPolicy::WRAP })),
274 DepthConvertLayerShiftDataset))
275{
276 // Validate output
277 validate(Accessor(_target), _reference);
278}
279FIXTURE_DATA_TEST_CASE(RunLarge, NEDepthConvertLayerToU32Fixture<uint16_t>, framework::DatasetMode::NIGHTLY, combine(combine(combine(datasets::LargeShapes(), DepthConvertLayerU16toU32Dataset),
280 framework::dataset::make("ConvertPolicy", { ConvertPolicy::SATURATE, ConvertPolicy::WRAP })),
281 DepthConvertLayerShiftDataset))
282{
283 // Validate output
284 validate(Accessor(_target), _reference);
285}
286TEST_SUITE_END()
287
288TEST_SUITE(S16_to_U8)
289DATA_TEST_CASE(Configuration, framework::DatasetMode::ALL, combine(combine(framework::dataset::concat(datasets::SmallShapes(), datasets::LargeShapes()), framework::dataset::make("ConvertPolicy", { ConvertPolicy::SATURATE, ConvertPolicy::WRAP })),
290 DepthConvertLayerShiftDataset),
291 shape, policy, shift)
292{
293 int fixed_point_position = 0;
294
295 // Create tensors
296 Tensor src = create_tensor<Tensor>(shape, DataType::S16, 1, fixed_point_position);
297 Tensor dst = create_tensor<Tensor>(shape, DataType::U8, 1, fixed_point_position);
298
299 // Create and Configure function
300 NEDepthConvertLayer depth_convert;
301 depth_convert.configure(&src, &dst, policy, shift);
302
303 // Validate valid region
304 const ValidRegion valid_region = shape_to_valid_region(shape);
305 validate(dst.info()->valid_region(), valid_region);
306
307 // Validate padding
308 const PaddingSize padding = PaddingCalculator(shape.x(), 16).required_padding();
309 validate(src.info()->padding(), padding);
310 validate(dst.info()->padding(), padding);
311}
312
313FIXTURE_DATA_TEST_CASE(RunSmall, NEDepthConvertLayerToU8Fixture<int16_t>, framework::DatasetMode::PRECOMMIT, combine(combine(combine(datasets::SmallShapes(), DepthConvertLayerS16toU8Dataset),
314 framework::dataset::make("ConvertPolicy", { ConvertPolicy::SATURATE, ConvertPolicy::WRAP })),
315 DepthConvertLayerShiftDataset))
316{
317 // Validate output
318 validate(Accessor(_target), _reference);
319}
320FIXTURE_DATA_TEST_CASE(RunLarge, NEDepthConvertLayerToU8Fixture<int16_t>, framework::DatasetMode::NIGHTLY, combine(combine(combine(datasets::LargeShapes(), DepthConvertLayerS16toU8Dataset),
321 framework::dataset::make("ConvertPolicy", { ConvertPolicy::SATURATE, ConvertPolicy::WRAP })),
322 DepthConvertLayerShiftDataset))
323{
324 // Validate output
325 validate(Accessor(_target), _reference);
326}
327TEST_SUITE_END()
328
329TEST_SUITE(S16_to_S32)
330DATA_TEST_CASE(Configuration, framework::DatasetMode::ALL, combine(combine(framework::dataset::concat(datasets::SmallShapes(), datasets::LargeShapes()), framework::dataset::make("ConvertPolicy", { ConvertPolicy::SATURATE, ConvertPolicy::WRAP })),
331 DepthConvertLayerShiftDataset),
332 shape, policy, shift)
333{
334 int fixed_point_position = 0;
335
336 // Create tensors
337 Tensor src = create_tensor<Tensor>(shape, DataType::S16, 1, fixed_point_position);
338 Tensor dst = create_tensor<Tensor>(shape, DataType::S32, 1, fixed_point_position);
339
340 // Create and Configure function
341 NEDepthConvertLayer depth_convert;
342 depth_convert.configure(&src, &dst, policy, shift);
343
344 // Validate valid region
345 const ValidRegion valid_region = shape_to_valid_region(shape);
346 validate(dst.info()->valid_region(), valid_region);
347
348 // Validate padding
349 const PaddingSize padding = PaddingCalculator(shape.x(), 16).required_padding();
350 validate(src.info()->padding(), padding);
351 validate(dst.info()->padding(), padding);
352}
353
354FIXTURE_DATA_TEST_CASE(RunSmall, NEDepthConvertLayerToS32Fixture<int16_t>, framework::DatasetMode::PRECOMMIT, combine(combine(combine(datasets::SmallShapes(), DepthConvertLayerS16toS32Dataset),
355 framework::dataset::make("ConvertPolicy", { ConvertPolicy::SATURATE, ConvertPolicy::WRAP })),
356 DepthConvertLayerShiftDataset))
357{
358 // Validate output
359 validate(Accessor(_target), _reference);
360}
361FIXTURE_DATA_TEST_CASE(RunLarge, NEDepthConvertLayerToS32Fixture<int16_t>, framework::DatasetMode::NIGHTLY, combine(combine(combine(datasets::LargeShapes(), DepthConvertLayerS16toS32Dataset),
362 framework::dataset::make("ConvertPolicy", { ConvertPolicy::SATURATE, ConvertPolicy::WRAP })),
363 DepthConvertLayerShiftDataset))
364{
365 // Validate output
366 validate(Accessor(_target), _reference);
367}
368TEST_SUITE_END()
369
370TEST_SUITE(Quantized_to_FP32)
371DATA_TEST_CASE(Configuration, framework::DatasetMode::ALL, combine(combine(combine(framework::dataset::concat(datasets::SmallShapes(), datasets::LargeShapes()), framework::dataset::make("DataType", { DataType::QS8, DataType::QS16 })),
372 framework::dataset::make("ConvertPolicy", { ConvertPolicy::SATURATE, ConvertPolicy::WRAP })),
373 DepthConvertLayerFixedPointQuantizedDataset),
374 shape, dt, policy, fixed_point_position)
375{
376 int shift = 0;
377
378 // Create tensors
379 Tensor src = create_tensor<Tensor>(shape, dt, 1, fixed_point_position);
380 Tensor dst = create_tensor<Tensor>(shape, DataType::F32, 1, fixed_point_position);
381
382 // Create and Configure function
383 NEDepthConvertLayer depth_convert;
384 depth_convert.configure(&src, &dst, policy, shift);
385
386 // Validate valid region
387 const ValidRegion valid_region = shape_to_valid_region(shape);
388 validate(dst.info()->valid_region(), valid_region);
389
390 // Validate padding
391 const PaddingSize padding = PaddingCalculator(shape.x(), 16).required_padding();
392 validate(src.info()->padding(), padding);
393 validate(dst.info()->padding(), padding);
394}
395FIXTURE_DATA_TEST_CASE(RunSmallQS8, NEDepthConvertLayerToFP32FixedPointFixture<int8_t>, framework::DatasetMode::PRECOMMIT, combine(combine(combine(datasets::SmallShapes(),
396 DepthConvertLayerQS8toFP32Dataset),
397 framework::dataset::make("ConvertPolicy", { ConvertPolicy::SATURATE, ConvertPolicy::WRAP })),
398 DepthConvertLayerFixedPointQuantizedDataset))
399{
400 // Validate output
401 validate(Accessor(_target), _reference);
402}
403FIXTURE_DATA_TEST_CASE(RunSmallQS16, NEDepthConvertLayerToFP32FixedPointFixture<int16_t>, framework::DatasetMode::PRECOMMIT, combine(combine(combine(datasets::SmallShapes(),
404 DepthConvertLayerQS16toFP32Dataset),
405 framework::dataset::make("ConvertPolicy", { ConvertPolicy::SATURATE, ConvertPolicy::WRAP })),
406 DepthConvertLayerFixedPointQuantizedDataset))
407{
408 // Validate output
409 validate(Accessor(_target), _reference);
410}
411FIXTURE_DATA_TEST_CASE(RunLargeQS8, NEDepthConvertLayerToFP32FixedPointFixture<int8_t>, framework::DatasetMode::NIGHTLY, combine(combine(combine(datasets::LargeShapes(),
412 DepthConvertLayerQS8toFP32Dataset),
413 framework::dataset::make("ConvertPolicy", { ConvertPolicy::SATURATE, ConvertPolicy::WRAP })),
414 DepthConvertLayerFixedPointQuantizedDataset))
415{
416 // Validate output
417 validate(Accessor(_target), _reference);
418}
419FIXTURE_DATA_TEST_CASE(RunLargeQS16, NEDepthConvertLayerToFP32FixedPointFixture<int16_t>, framework::DatasetMode::NIGHTLY, combine(combine(combine(datasets::LargeShapes(),
420 DepthConvertLayerQS16toFP32Dataset),
421 framework::dataset::make("ConvertPolicy", { ConvertPolicy::SATURATE, ConvertPolicy::WRAP })),
422 DepthConvertLayerFixedPointQuantizedDataset))
423{
424 // Validate output
425 validate(Accessor(_target), _reference);
426}
427TEST_SUITE_END()
428
429TEST_SUITE(FP32_to_Quantized)
430DATA_TEST_CASE(Configuration, framework::DatasetMode::ALL, combine(combine(combine(framework::dataset::concat(datasets::SmallShapes(), datasets::LargeShapes()), framework::dataset::make("DataType", { DataType::QS8, DataType::QS16 })),
431 framework::dataset::make("ConvertPolicy", { ConvertPolicy::SATURATE, ConvertPolicy::WRAP })),
432 DepthConvertLayerFixedPointQuantizedDataset),
433 shape, dt, policy, fixed_point_position)
434{
435 int shift = 0;
436
437 // Create tensors
438 Tensor src = create_tensor<Tensor>(shape, DataType::F32, 1, fixed_point_position);
439 Tensor dst = create_tensor<Tensor>(shape, dt, 1, fixed_point_position);
440
441 // Create and Configure function
442 NEDepthConvertLayer depth_convert;
443 depth_convert.configure(&src, &dst, policy, shift);
444
445 // Validate valid region
446 const ValidRegion valid_region = shape_to_valid_region(shape);
447 validate(dst.info()->valid_region(), valid_region);
448
449 // Validate padding
450 const PaddingSize padding = PaddingCalculator(shape.x(), 16).required_padding();
451 validate(src.info()->padding(), padding);
452 validate(dst.info()->padding(), padding);
453}
454FIXTURE_DATA_TEST_CASE(RunSmallQS8, NEDepthConvertLayerToQS8FixedPointFixture<float>, framework::DatasetMode::PRECOMMIT, combine(combine(combine(datasets::SmallShapes(),
455 DepthConvertLayerFP32toQS8Dataset),
456 framework::dataset::make("ConvertPolicy", { ConvertPolicy::SATURATE, ConvertPolicy::WRAP })),
457 DepthConvertLayerFixedPointQuantizedDataset))
458{
459 // Validate output
460 validate(Accessor(_target), _reference);
461}
462FIXTURE_DATA_TEST_CASE(RunSmallQS16, NEDepthConvertLayerToQS16FixedPointFixture<float>, framework::DatasetMode::PRECOMMIT, combine(combine(combine(datasets::SmallShapes(),
463 DepthConvertLayerFP32toQS16Dataset),
464 framework::dataset::make("ConvertPolicy", { ConvertPolicy::SATURATE, ConvertPolicy::WRAP })),
465 DepthConvertLayerFixedPointQuantizedDataset))
466{
467 // Validate output
468 validate(Accessor(_target), _reference);
469}
470FIXTURE_DATA_TEST_CASE(RunLargeQS8, NEDepthConvertLayerToQS8FixedPointFixture<float>, framework::DatasetMode::NIGHTLY, combine(combine(combine(datasets::LargeShapes(),
471 DepthConvertLayerFP32toQS8Dataset),
472 framework::dataset::make("ConvertPolicy", { ConvertPolicy::SATURATE, ConvertPolicy::WRAP })),
473 DepthConvertLayerFixedPointQuantizedDataset))
474{
475 // Validate output
476 validate(Accessor(_target), _reference);
477}
478FIXTURE_DATA_TEST_CASE(RunLargeQS16, NEDepthConvertLayerToQS16FixedPointFixture<float>, framework::DatasetMode::NIGHTLY, combine(combine(combine(datasets::LargeShapes(),
479 DepthConvertLayerFP32toQS16Dataset),
480 framework::dataset::make("ConvertPolicy", { ConvertPolicy::SATURATE, ConvertPolicy::WRAP })),
481 DepthConvertLayerFixedPointQuantizedDataset))
482{
483 // Validate output
484 validate(Accessor(_target), _reference);
485}
486TEST_SUITE_END()
487
488TEST_SUITE_END()
489TEST_SUITE_END()
490} // namespace validation
491} // namespace test
492} // namespace arm_compute