blob: a3482d1b281ee30a17455cbf33542b3a3d8ae30d [file] [log] [blame]
Giorgio Arena04a8f8c2017-11-23 11:45:24 +00001/*
Michalis Spyrouaeebe4a2019-01-09 14:21:03 +00002 * Copyright (c) 2017-2019 ARM Limited.
Giorgio Arena04a8f8c2017-11-23 11:45:24 +00003 *
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,
Michalis Spyrouaeebe4a2019-01-09 14:21:03 +000021 * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
Giorgio Arena04a8f8c2017-11-23 11:45:24 +000022 * 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 **/
Michalis Spyrouaeebe4a2019-01-09 14:21:03 +000047const auto DepthConvertLayerQASYMM8toF16Dataset = combine(framework::dataset::make("DataType", DataType::QASYMM8), framework::dataset::make("DataType", DataType::F16));
48const auto DepthConvertLayerQASYMM8toF32Dataset = combine(framework::dataset::make("DataType", DataType::QASYMM8), framework::dataset::make("DataType", DataType::F32));
Usama Arif9e631c22019-05-14 17:10:40 +010049const auto DepthConvertLayerQASYMM8toS32Dataset = combine(framework::dataset::make("DataType", DataType::QASYMM8), framework::dataset::make("DataType", DataType::S32));
Michalis Spyrouaeebe4a2019-01-09 14:21:03 +000050const auto DepthConvertLayerU8toU16Dataset = combine(framework::dataset::make("DataType", DataType::U8), framework::dataset::make("DataType", DataType::U16));
51const auto DepthConvertLayerU8toS16Dataset = combine(framework::dataset::make("DataType", DataType::U8), framework::dataset::make("DataType", DataType::S16));
52const auto DepthConvertLayerU8toS32Dataset = combine(framework::dataset::make("DataType", DataType::U8), framework::dataset::make("DataType", DataType::S32));
Usama Arif9e631c22019-05-14 17:10:40 +010053const auto DepthConvertLayerU8toF16Dataset = combine(framework::dataset::make("DataType", DataType::U8), framework::dataset::make("DataType", DataType::F16));
54const auto DepthConvertLayerU8toF32Dataset = combine(framework::dataset::make("DataType", DataType::U8), framework::dataset::make("DataType", DataType::F32));
Michalis Spyrouaeebe4a2019-01-09 14:21:03 +000055const auto DepthConvertLayerU16toU8Dataset = combine(framework::dataset::make("DataType", DataType::U16), framework::dataset::make("DataType", DataType::U8));
56const auto DepthConvertLayerU16toU32Dataset = combine(framework::dataset::make("DataType", DataType::U16), framework::dataset::make("DataType", DataType::U32));
57const auto DepthConvertLayerS16toU8Dataset = combine(framework::dataset::make("DataType", DataType::S16), framework::dataset::make("DataType", DataType::U8));
58const auto DepthConvertLayerS16toS32Dataset = combine(framework::dataset::make("DataType", DataType::S16), framework::dataset::make("DataType", DataType::S32));
Usama Arif9e631c22019-05-14 17:10:40 +010059const auto DepthConvertLayerF16toU8Dataset = combine(framework::dataset::make("DataType", DataType::F16), framework::dataset::make("DataType", DataType::U8));
Michalis Spyrouaeebe4a2019-01-09 14:21:03 +000060const auto DepthConvertLayerF16toF32Dataset = combine(framework::dataset::make("DataType", DataType::F16), framework::dataset::make("DataType", DataType::F32));
Usama Arif9e631c22019-05-14 17:10:40 +010061const auto DepthConvertLayerF16toS32Dataset = combine(framework::dataset::make("DataType", DataType::F16), framework::dataset::make("DataType", DataType::S32));
Michalis Spyrouaeebe4a2019-01-09 14:21:03 +000062const auto DepthConvertLayerF32toF16Dataset = combine(framework::dataset::make("DataType", DataType::F32), framework::dataset::make("DataType", DataType::F16));
Usama Arif9e631c22019-05-14 17:10:40 +010063const auto DepthConvertLayerF32toS32Dataset = combine(framework::dataset::make("DataType", DataType::F32), framework::dataset::make("DataType", DataType::S32));
64const auto DepthConvertLayerF32toU8Dataset = combine(framework::dataset::make("DataType", DataType::F32), framework::dataset::make("DataType", DataType::U8));
65
66const auto DepthConvertLayerS32toF32Dataset = combine(framework::dataset::make("DataType", DataType::S32), framework::dataset::make("DataType", DataType::F32));
67const auto DepthConvertLayerS32toQASYMM8Dataset = combine(framework::dataset::make("DataType", DataType::S32), framework::dataset::make("DataType", DataType::QASYMM8));
68const auto DepthConvertLayerS32toF16Dataset = combine(framework::dataset::make("DataType", DataType::S32), framework::dataset::make("DataType", DataType::F16));
69const auto DepthConvertLayerS32toU8Dataset = combine(framework::dataset::make("DataType", DataType::S32), framework::dataset::make("DataType", DataType::U8));
70
Michalis Spyrouaeebe4a2019-01-09 14:21:03 +000071const auto DepthConvertLayerF16toQASYMM8Dataset = combine(framework::dataset::make("DataType", DataType::F16), framework::dataset::make("DataType", DataType::QASYMM8));
72const auto DepthConvertLayerF32toQASYMM8Dataset = combine(framework::dataset::make("DataType", DataType::F32), framework::dataset::make("DataType", DataType::QASYMM8));
73const auto DepthConvertLayerShiftDatasetNightly = framework::dataset::make("Shift", 0, 7);
74const auto DepthConvertLayerShiftDatasetPrecommit = framework::dataset::make("Shift", { 0, 3, 6 });
75const auto DepthConvertLayerZeroShiftDataset = framework::dataset::make("Shift", 0);
Michalis Spyroue2588182018-12-13 18:31:18 +000076
77constexpr AbsoluteTolerance<uint8_t> tolerance_qasymm8(1);
Usama Arif9e631c22019-05-14 17:10:40 +010078constexpr AbsoluteTolerance<int32_t> tolerance_one_int32(1);
Michalis Spyrou775c7f52019-06-05 11:45:16 +010079#ifdef __ARM_FEATURE_FP16_VECTOR_ARITHMETIC
Usama Arif9e631c22019-05-14 17:10:40 +010080constexpr AbsoluteTolerance<uint8_t> tolerance_one_uint8(1);
Michalis Spyrou775c7f52019-06-05 11:45:16 +010081#endif /* __ARM_FEATURE_FP16_VECTOR_ARITHMETIC */
Giorgio Arena04a8f8c2017-11-23 11:45:24 +000082} // namespace
83
84TEST_SUITE(NEON)
85TEST_SUITE(DepthConvertLayer)
Michalis Spyrouaeebe4a2019-01-09 14:21:03 +000086
87// *INDENT-OFF*
88// clang-format off
89DATA_TEST_CASE(Validate, framework::DatasetMode::ALL, zip(zip(zip(zip(
Usama Arif9e631c22019-05-14 17:10:40 +010090 framework::dataset::make("InputInfo", { TensorInfo(TensorShape(32U, 13U, 2U), 1, DataType::U16), // Invalid data type combination
Michalis Spyrouaeebe4a2019-01-09 14:21:03 +000091 TensorInfo(TensorShape(32U, 13U, 2U), 1, DataType::S16), // Invalid data type combination
Michalis Spyrouaeebe4a2019-01-09 14:21:03 +000092 TensorInfo(TensorShape(32U, 13U, 2U), 1, DataType::U8), // Mismatching shapes
93 TensorInfo(TensorShape(27U, 13U, 2U), 1, DataType::U8), // Invalid shift
94 TensorInfo(TensorShape(27U, 13U, 2U), 1, DataType::U8), // Valid
95 }),
Usama Arif9e631c22019-05-14 17:10:40 +010096 framework::dataset::make("OutputInfo",{ TensorInfo(TensorShape(32U, 13U, 2U), 1, DataType::F32),
Michalis Spyrouaeebe4a2019-01-09 14:21:03 +000097 TensorInfo(TensorShape(32U, 13U, 2U), 1, DataType::F32),
Michalis Spyrouaeebe4a2019-01-09 14:21:03 +000098 TensorInfo(TensorShape(32U, 13U, 2U), 1, DataType::U8),
99 TensorInfo(TensorShape(27U, 13U, 2U), 1, DataType::U8),
100 })),
101 framework::dataset::make("Policy",{ ConvertPolicy::WRAP,
102 ConvertPolicy::WRAP,
103 ConvertPolicy::WRAP,
104 ConvertPolicy::WRAP,
105 ConvertPolicy::WRAP,
106 ConvertPolicy::WRAP,
107 ConvertPolicy::WRAP,
108 })),
109 framework::dataset::make("Shift",{ 1, 1, 1, 1, 1, 1, 8, 1,
110 })),
Usama Arif9e631c22019-05-14 17:10:40 +0100111 framework::dataset::make("Expected", { false, false, false, false, true})),
Michalis Spyrouaeebe4a2019-01-09 14:21:03 +0000112 input_info, output_info, policy, shift, expected)
113{
114 ARM_COMPUTE_EXPECT(bool(NEDepthConvertLayer::validate(&input_info.clone()->set_is_resizable(false), &output_info.clone()->set_is_resizable(false), policy, shift)) == expected, framework::LogLevel::ERRORS);
115}
116// clang-format on
117// *INDENT-ON*
118
Giorgio Arena04a8f8c2017-11-23 11:45:24 +0000119template <typename T>
120using NEDepthConvertLayerToU16Fixture = DepthConvertLayerValidationFixture<Tensor, Accessor, NEDepthConvertLayer, T, uint16_t>;
121template <typename T>
122using NEDepthConvertLayerToS16Fixture = DepthConvertLayerValidationFixture<Tensor, Accessor, NEDepthConvertLayer, T, int16_t>;
123template <typename T>
124using NEDepthConvertLayerToS32Fixture = DepthConvertLayerValidationFixture<Tensor, Accessor, NEDepthConvertLayer, T, int32_t>;
125template <typename T>
126using NEDepthConvertLayerToU8Fixture = DepthConvertLayerValidationFixture<Tensor, Accessor, NEDepthConvertLayer, T, uint8_t>;
127template <typename T>
128using NEDepthConvertLayerToU32Fixture = DepthConvertLayerValidationFixture<Tensor, Accessor, NEDepthConvertLayer, T, uint32_t>;
Michele Di Giorgio3e570db2018-08-24 18:28:48 +0100129template <typename T>
130using NEDepthConvertLayerToF16Fixture = DepthConvertLayerValidationFixture<Tensor, Accessor, NEDepthConvertLayer, T, half>;
131template <typename T>
132using NEDepthConvertLayerToF32Fixture = DepthConvertLayerValidationFixture<Tensor, Accessor, NEDepthConvertLayer, T, float>;
Michalis Spyroue2588182018-12-13 18:31:18 +0000133template <typename T>
134using NEDepthConvertLayerToQASYMM8Fixture = DepthConvertLayerValidationQuantizedFixture<Tensor, Accessor, NEDepthConvertLayer, T, uint8_t>;
135template <typename T>
136using NEDepthConvertLayerQuantizedToF16Fixture = DepthConvertLayerValidationQuantizedFixture<Tensor, Accessor, NEDepthConvertLayer, T, half>;
137template <typename T>
138using NEDepthConvertLayerQuantizedToF32Fixture = DepthConvertLayerValidationQuantizedFixture<Tensor, Accessor, NEDepthConvertLayer, T, float>;
Usama Arif9e631c22019-05-14 17:10:40 +0100139template <typename T>
140using NEDepthConvertLayerQuantizedToS32Fixture = DepthConvertLayerValidationQuantizedFixture<Tensor, Accessor, NEDepthConvertLayer, T, int32_t>;
Michalis Spyroue2588182018-12-13 18:31:18 +0000141
142TEST_SUITE(QASYMM8_to_F32)
Michalis Spyrou5c9f0c42019-01-16 14:48:48 +0000143DATA_TEST_CASE(Configuration, framework::DatasetMode::ALL, combine(combine(datasets::SmallShapes(), framework::dataset::make("ConvertPolicy", { ConvertPolicy::SATURATE, ConvertPolicy::WRAP })),
Michalis Spyroue2588182018-12-13 18:31:18 +0000144 DepthConvertLayerZeroShiftDataset),
145 shape, policy, shift)
146{
147 // Create tensors
148 Tensor src = create_tensor<Tensor>(shape, DataType::QASYMM8, 1);
149 Tensor dst = create_tensor<Tensor>(shape, DataType::F32, 1);
150
151 // Create and Configure function
152 NEDepthConvertLayer depth_convert;
153 depth_convert.configure(&src, &dst, policy, shift);
154
155 // Validate valid region
156 const ValidRegion valid_region = shape_to_valid_region(shape);
157 validate(dst.info()->valid_region(), valid_region);
158
159 // Validate padding
160 const PaddingSize padding = PaddingCalculator(shape.x(), 16).required_padding();
161 validate(src.info()->padding(), padding);
162 validate(dst.info()->padding(), padding);
163}
164
165FIXTURE_DATA_TEST_CASE(RunSmall, NEDepthConvertLayerQuantizedToF32Fixture<uint8_t>, framework::DatasetMode::PRECOMMIT, combine(combine(combine(combine(datasets::SmallShapes(),
166 DepthConvertLayerQASYMM8toF32Dataset),
167 framework::dataset::make("ConvertPolicy", { ConvertPolicy::SATURATE })),
168 DepthConvertLayerZeroShiftDataset),
169 framework::dataset::make("QuantizationInfo", { QuantizationInfo(0.5f, 10) })))
170{
171 // Validate output
172 validate(Accessor(_target), _reference);
173}
174FIXTURE_DATA_TEST_CASE(RunLarge, NEDepthConvertLayerQuantizedToF32Fixture<uint8_t>, framework::DatasetMode::NIGHTLY, combine(combine(combine(combine(datasets::LargeShapes(),
175 DepthConvertLayerQASYMM8toF32Dataset),
176 framework::dataset::make("ConvertPolicy", { ConvertPolicy::SATURATE })),
177 DepthConvertLayerZeroShiftDataset),
178 framework::dataset::make("QuantizationInfo", { QuantizationInfo(0.5f, 10) })))
179{
180 // Validate output
181 validate(Accessor(_target), _reference);
182}
183TEST_SUITE_END() // QASYMM8_to_F32
Giorgio Arena04a8f8c2017-11-23 11:45:24 +0000184
Usama Arif9e631c22019-05-14 17:10:40 +0100185TEST_SUITE(QASYMM8_to_S32)
186DATA_TEST_CASE(Configuration, framework::DatasetMode::ALL, combine(combine(datasets::SmallShapes(), framework::dataset::make("ConvertPolicy", { ConvertPolicy::SATURATE, ConvertPolicy::WRAP })),
187 DepthConvertLayerZeroShiftDataset),
188 shape, policy, shift)
189{
190 // Create tensors
191 Tensor src = create_tensor<Tensor>(shape, DataType::QASYMM8, 1);
192 Tensor dst = create_tensor<Tensor>(shape, DataType::S32, 1);
193
194 // Create and Configure function
195 NEDepthConvertLayer depth_convert;
196 depth_convert.configure(&src, &dst, policy, shift);
197
198 // Validate valid region
199 const ValidRegion valid_region = shape_to_valid_region(shape);
200 validate(dst.info()->valid_region(), valid_region);
201
202 // Validate padding
203 const PaddingSize padding = PaddingCalculator(shape.x(), 16).required_padding();
204 validate(src.info()->padding(), padding);
205 validate(dst.info()->padding(), padding);
206}
207
208FIXTURE_DATA_TEST_CASE(RunSmall, NEDepthConvertLayerQuantizedToS32Fixture<uint8_t>, framework::DatasetMode::PRECOMMIT, combine(combine(combine(combine(datasets::SmallShapes(),
209 DepthConvertLayerQASYMM8toS32Dataset),
210 framework::dataset::make("ConvertPolicy", { ConvertPolicy::SATURATE })),
211 DepthConvertLayerZeroShiftDataset),
212 framework::dataset::make("QuantizationInfo", { QuantizationInfo(0.5f, 10) })))
213{
214 // Validate output
215 validate(Accessor(_target), _reference);
216}
217FIXTURE_DATA_TEST_CASE(RunLarge, NEDepthConvertLayerQuantizedToS32Fixture<uint8_t>, framework::DatasetMode::NIGHTLY, combine(combine(combine(combine(datasets::LargeShapes(),
218 DepthConvertLayerQASYMM8toS32Dataset),
219 framework::dataset::make("ConvertPolicy", { ConvertPolicy::SATURATE })),
220 DepthConvertLayerZeroShiftDataset),
221 framework::dataset::make("QuantizationInfo", { QuantizationInfo(0.5f, 10) })))
222{
223 // Validate output
224 validate(Accessor(_target), _reference);
225}
226TEST_SUITE_END() // QASYMM8_to_S32
227
Giorgio Arena04a8f8c2017-11-23 11:45:24 +0000228TEST_SUITE(U8_to_U16)
Michalis Spyrou5c9f0c42019-01-16 14:48:48 +0000229DATA_TEST_CASE(Configuration, framework::DatasetMode::ALL, combine(combine(datasets::SmallShapes(), framework::dataset::make("ConvertPolicy", { ConvertPolicy::SATURATE, ConvertPolicy::WRAP })),
Michalis Spyrouaeebe4a2019-01-09 14:21:03 +0000230 DepthConvertLayerShiftDatasetNightly),
Giorgio Arena04a8f8c2017-11-23 11:45:24 +0000231 shape, policy, shift)
232{
Giorgio Arena04a8f8c2017-11-23 11:45:24 +0000233 // Create tensors
Vidhya Sudhan Loganathan014333d2018-07-02 09:13:49 +0100234 Tensor src = create_tensor<Tensor>(shape, DataType::U8, 1);
235 Tensor dst = create_tensor<Tensor>(shape, DataType::U16, 1);
Giorgio Arena04a8f8c2017-11-23 11:45:24 +0000236
237 // Create and Configure function
238 NEDepthConvertLayer depth_convert;
239 depth_convert.configure(&src, &dst, policy, shift);
240
241 // Validate valid region
242 const ValidRegion valid_region = shape_to_valid_region(shape);
243 validate(dst.info()->valid_region(), valid_region);
244
245 // Validate padding
246 const PaddingSize padding = PaddingCalculator(shape.x(), 16).required_padding();
247 validate(src.info()->padding(), padding);
248 validate(dst.info()->padding(), padding);
249}
250
251FIXTURE_DATA_TEST_CASE(RunSmall, NEDepthConvertLayerToU16Fixture<uint8_t>, framework::DatasetMode::PRECOMMIT, combine(combine(combine(datasets::SmallShapes(), DepthConvertLayerU8toU16Dataset),
252 framework::dataset::make("ConvertPolicy", { ConvertPolicy::SATURATE, ConvertPolicy::WRAP })),
Michalis Spyrouaeebe4a2019-01-09 14:21:03 +0000253 DepthConvertLayerShiftDatasetPrecommit))
Giorgio Arena04a8f8c2017-11-23 11:45:24 +0000254{
255 // Validate output
256 validate(Accessor(_target), _reference);
257}
258
259FIXTURE_DATA_TEST_CASE(RunLarge, NEDepthConvertLayerToU16Fixture<uint8_t>, framework::DatasetMode::NIGHTLY, combine(combine(combine(datasets::LargeShapes(), DepthConvertLayerU8toU16Dataset),
260 framework::dataset::make("ConvertPolicy", { ConvertPolicy::SATURATE, ConvertPolicy::WRAP })),
Michalis Spyrouaeebe4a2019-01-09 14:21:03 +0000261 DepthConvertLayerShiftDatasetNightly))
Giorgio Arena04a8f8c2017-11-23 11:45:24 +0000262{
263 // Validate output
264 validate(Accessor(_target), _reference);
265}
Michalis Spyroue2588182018-12-13 18:31:18 +0000266TEST_SUITE_END() // U8_to_U16
Giorgio Arena04a8f8c2017-11-23 11:45:24 +0000267
268TEST_SUITE(U8_to_S16)
Michalis Spyrou5c9f0c42019-01-16 14:48:48 +0000269DATA_TEST_CASE(Configuration, framework::DatasetMode::ALL, combine(combine(datasets::SmallShapes(), framework::dataset::make("ConvertPolicy", { ConvertPolicy::SATURATE, ConvertPolicy::WRAP })),
Michalis Spyrouaeebe4a2019-01-09 14:21:03 +0000270 DepthConvertLayerShiftDatasetNightly),
Giorgio Arena04a8f8c2017-11-23 11:45:24 +0000271 shape, policy, shift)
272{
Giorgio Arena04a8f8c2017-11-23 11:45:24 +0000273 // Create tensors
Vidhya Sudhan Loganathan014333d2018-07-02 09:13:49 +0100274 Tensor src = create_tensor<Tensor>(shape, DataType::U8, 1);
275 Tensor dst = create_tensor<Tensor>(shape, DataType::S16, 1);
Giorgio Arena04a8f8c2017-11-23 11:45:24 +0000276
277 // Create and Configure function
278 NEDepthConvertLayer depth_convert;
279 depth_convert.configure(&src, &dst, policy, shift);
280
281 // Validate valid region
282 const ValidRegion valid_region = shape_to_valid_region(shape);
283 validate(dst.info()->valid_region(), valid_region);
284
285 // Validate padding
286 const PaddingSize padding = PaddingCalculator(shape.x(), 16).required_padding();
287 validate(src.info()->padding(), padding);
288 validate(dst.info()->padding(), padding);
289}
290
291FIXTURE_DATA_TEST_CASE(RunSmall, NEDepthConvertLayerToS16Fixture<uint8_t>, framework::DatasetMode::PRECOMMIT, combine(combine(combine(datasets::SmallShapes(), DepthConvertLayerU8toS16Dataset),
292 framework::dataset::make("ConvertPolicy", { ConvertPolicy::SATURATE, ConvertPolicy::WRAP })),
Michalis Spyrouaeebe4a2019-01-09 14:21:03 +0000293 DepthConvertLayerShiftDatasetPrecommit))
Giorgio Arena04a8f8c2017-11-23 11:45:24 +0000294{
295 // Validate output
296 validate(Accessor(_target), _reference);
297}
298
299FIXTURE_DATA_TEST_CASE(RunLarge, NEDepthConvertLayerToS16Fixture<uint8_t>, framework::DatasetMode::NIGHTLY, combine(combine(combine(datasets::LargeShapes(), DepthConvertLayerU8toS16Dataset),
300 framework::dataset::make("ConvertPolicy", { ConvertPolicy::SATURATE, ConvertPolicy::WRAP })),
Michalis Spyrouaeebe4a2019-01-09 14:21:03 +0000301 DepthConvertLayerShiftDatasetNightly))
Giorgio Arena04a8f8c2017-11-23 11:45:24 +0000302{
303 // Validate output
304 validate(Accessor(_target), _reference);
305}
Michalis Spyroue2588182018-12-13 18:31:18 +0000306TEST_SUITE_END() // U8_to_S16
Giorgio Arena04a8f8c2017-11-23 11:45:24 +0000307TEST_SUITE(U8_to_S32)
Michalis Spyrou5c9f0c42019-01-16 14:48:48 +0000308DATA_TEST_CASE(Configuration, framework::DatasetMode::ALL, combine(combine(datasets::SmallShapes(), framework::dataset::make("ConvertPolicy", { ConvertPolicy::SATURATE, ConvertPolicy::WRAP })),
Michalis Spyrouaeebe4a2019-01-09 14:21:03 +0000309 DepthConvertLayerShiftDatasetNightly),
Giorgio Arena04a8f8c2017-11-23 11:45:24 +0000310 shape, policy, shift)
311{
Giorgio Arena04a8f8c2017-11-23 11:45:24 +0000312 // Create tensors
Vidhya Sudhan Loganathan014333d2018-07-02 09:13:49 +0100313 Tensor src = create_tensor<Tensor>(shape, DataType::U8, 1);
314 Tensor dst = create_tensor<Tensor>(shape, DataType::S32, 1);
Giorgio Arena04a8f8c2017-11-23 11:45:24 +0000315
316 // Create and Configure function
317 NEDepthConvertLayer depth_convert;
318 depth_convert.configure(&src, &dst, policy, shift);
319
320 // Validate valid region
321 const ValidRegion valid_region = shape_to_valid_region(shape);
322 validate(dst.info()->valid_region(), valid_region);
323
324 // Validate padding
325 const PaddingSize padding = PaddingCalculator(shape.x(), 16).required_padding();
326 validate(src.info()->padding(), padding);
327 validate(dst.info()->padding(), padding);
328}
329
330FIXTURE_DATA_TEST_CASE(RunSmall, NEDepthConvertLayerToS32Fixture<uint8_t>, framework::DatasetMode::PRECOMMIT, combine(combine(combine(datasets::SmallShapes(), DepthConvertLayerU8toS32Dataset),
331 framework::dataset::make("ConvertPolicy", { ConvertPolicy::SATURATE, ConvertPolicy::WRAP })),
Michalis Spyrouaeebe4a2019-01-09 14:21:03 +0000332 DepthConvertLayerShiftDatasetPrecommit))
Giorgio Arena04a8f8c2017-11-23 11:45:24 +0000333{
334 // Validate output
335 validate(Accessor(_target), _reference);
336}
337
338FIXTURE_DATA_TEST_CASE(RunLarge, NEDepthConvertLayerToS32Fixture<uint8_t>, framework::DatasetMode::NIGHTLY, combine(combine(combine(datasets::LargeShapes(), DepthConvertLayerU8toS32Dataset),
339 framework::dataset::make("ConvertPolicy", { ConvertPolicy::SATURATE, ConvertPolicy::WRAP })),
Michalis Spyrouaeebe4a2019-01-09 14:21:03 +0000340 DepthConvertLayerShiftDatasetNightly))
Giorgio Arena04a8f8c2017-11-23 11:45:24 +0000341{
342 // Validate output
343 validate(Accessor(_target), _reference);
344}
Michalis Spyroue2588182018-12-13 18:31:18 +0000345TEST_SUITE_END() // U8_to_S32
Giorgio Arena04a8f8c2017-11-23 11:45:24 +0000346
Usama Arif9e631c22019-05-14 17:10:40 +0100347
348TEST_SUITE(U8_to_F32)
349DATA_TEST_CASE(Configuration, framework::DatasetMode::ALL, combine(combine(datasets::SmallShapes(), framework::dataset::make("ConvertPolicy", { ConvertPolicy::SATURATE, ConvertPolicy::WRAP })),
350 DepthConvertLayerShiftDatasetNightly),
351 shape, policy, shift)
352{
353 // Create tensors
354 Tensor src = create_tensor<Tensor>(shape, DataType::U8, 1);
355 Tensor dst = create_tensor<Tensor>(shape, DataType::F32, 1);
356
357 // Create and Configure function
358 NEDepthConvertLayer depth_convert;
359 depth_convert.configure(&src, &dst, policy, shift);
360
361 // Validate valid region
362 const ValidRegion valid_region = shape_to_valid_region(shape);
363 validate(dst.info()->valid_region(), valid_region);
364
365 // Validate padding
366 const PaddingSize padding = PaddingCalculator(shape.x(), 16).required_padding();
367 validate(src.info()->padding(), padding);
368 validate(dst.info()->padding(), padding);
369}
370
371FIXTURE_DATA_TEST_CASE(RunSmall, NEDepthConvertLayerToF32Fixture<uint8_t>, framework::DatasetMode::PRECOMMIT, combine(combine(combine(datasets::SmallShapes(), DepthConvertLayerU8toF32Dataset),
372 framework::dataset::make("ConvertPolicy", { ConvertPolicy::SATURATE, ConvertPolicy::WRAP })),
373 DepthConvertLayerShiftDatasetPrecommit))
374{
375 // Validate output
376 validate(Accessor(_target), _reference);
377}
378
379FIXTURE_DATA_TEST_CASE(RunLarge, NEDepthConvertLayerToF32Fixture<uint8_t>, framework::DatasetMode::NIGHTLY, combine(combine(combine(datasets::LargeShapes(), DepthConvertLayerU8toF32Dataset),
380 framework::dataset::make("ConvertPolicy", { ConvertPolicy::SATURATE, ConvertPolicy::WRAP })),
381 DepthConvertLayerShiftDatasetNightly))
382{
383 // Validate output
384 validate(Accessor(_target), _reference);
385}
386TEST_SUITE_END() // U8_to_F32
387
388#ifdef __ARM_FEATURE_FP16_VECTOR_ARITHMETIC
389TEST_SUITE(U8_to_F16)
390DATA_TEST_CASE(Configuration, framework::DatasetMode::ALL, combine(combine(datasets::SmallShapes(), framework::dataset::make("ConvertPolicy", { ConvertPolicy::SATURATE, ConvertPolicy::WRAP })),
391 DepthConvertLayerShiftDatasetNightly),
392 shape, policy, shift)
393{
394 // Create tensors
395 Tensor src = create_tensor<Tensor>(shape, DataType::U8, 1);
396 Tensor dst = create_tensor<Tensor>(shape, DataType::F16, 1);
397
398 // Create and Configure function
399 NEDepthConvertLayer depth_convert;
400 depth_convert.configure(&src, &dst, policy, shift);
401
402 // Validate valid region
403 const ValidRegion valid_region = shape_to_valid_region(shape);
404 validate(dst.info()->valid_region(), valid_region);
405
406 // Validate padding
407 const PaddingSize padding = PaddingCalculator(shape.x(), 16).required_padding();
408 validate(src.info()->padding(), padding);
409 validate(dst.info()->padding(), padding);
410}
411
412FIXTURE_DATA_TEST_CASE(RunSmall, NEDepthConvertLayerToF16Fixture<uint8_t>, framework::DatasetMode::PRECOMMIT, combine(combine(combine(datasets::SmallShapes(), DepthConvertLayerU8toF16Dataset),
413 framework::dataset::make("ConvertPolicy", { ConvertPolicy::SATURATE, ConvertPolicy::WRAP })),
414 DepthConvertLayerShiftDatasetPrecommit))
415{
416 // Validate output
417 validate(Accessor(_target), _reference);
418}
419
420FIXTURE_DATA_TEST_CASE(RunLarge, NEDepthConvertLayerToF16Fixture<uint8_t>, framework::DatasetMode::NIGHTLY, combine(combine(combine(datasets::LargeShapes(), DepthConvertLayerU8toF16Dataset),
421 framework::dataset::make("ConvertPolicy", { ConvertPolicy::SATURATE, ConvertPolicy::WRAP })),
422 DepthConvertLayerShiftDatasetNightly))
423{
424 // Validate output
425 validate(Accessor(_target), _reference);
426}
427TEST_SUITE_END() // U8_to_F36
428#endif // __ARM_FEATURE_FP16_VECTOR_ARITHMETIC
429
430
Giorgio Arena04a8f8c2017-11-23 11:45:24 +0000431TEST_SUITE(U16_to_U8)
Michalis Spyrou5c9f0c42019-01-16 14:48:48 +0000432DATA_TEST_CASE(Configuration, framework::DatasetMode::ALL, combine(combine(datasets::SmallShapes(), framework::dataset::make("ConvertPolicy", { ConvertPolicy::SATURATE, ConvertPolicy::WRAP })),
Michalis Spyrouaeebe4a2019-01-09 14:21:03 +0000433 DepthConvertLayerShiftDatasetNightly),
Giorgio Arena04a8f8c2017-11-23 11:45:24 +0000434 shape, policy, shift)
435{
Giorgio Arena04a8f8c2017-11-23 11:45:24 +0000436 // Create tensors
Vidhya Sudhan Loganathan014333d2018-07-02 09:13:49 +0100437 Tensor src = create_tensor<Tensor>(shape, DataType::U16, 1);
438 Tensor dst = create_tensor<Tensor>(shape, DataType::U8, 1);
Giorgio Arena04a8f8c2017-11-23 11:45:24 +0000439
440 // Create and Configure function
441 NEDepthConvertLayer depth_convert;
442 depth_convert.configure(&src, &dst, policy, shift);
443
444 // Validate valid region
445 const ValidRegion valid_region = shape_to_valid_region(shape);
446 validate(dst.info()->valid_region(), valid_region);
447
448 // Validate padding
449 const PaddingSize padding = PaddingCalculator(shape.x(), 16).required_padding();
450 validate(src.info()->padding(), padding);
451 validate(dst.info()->padding(), padding);
452}
453
454FIXTURE_DATA_TEST_CASE(RunSmall, NEDepthConvertLayerToU8Fixture<uint16_t>, framework::DatasetMode::PRECOMMIT, combine(combine(combine(datasets::SmallShapes(), DepthConvertLayerU16toU8Dataset),
455 framework::dataset::make("ConvertPolicy", { ConvertPolicy::SATURATE, ConvertPolicy::WRAP })),
Michalis Spyrouaeebe4a2019-01-09 14:21:03 +0000456 DepthConvertLayerShiftDatasetPrecommit))
Giorgio Arena04a8f8c2017-11-23 11:45:24 +0000457{
458 // Validate output
459 validate(Accessor(_target), _reference);
460}
461FIXTURE_DATA_TEST_CASE(RunLarge, NEDepthConvertLayerToU8Fixture<uint16_t>, framework::DatasetMode::NIGHTLY, combine(combine(combine(datasets::LargeShapes(), DepthConvertLayerU16toU8Dataset),
462 framework::dataset::make("ConvertPolicy", { ConvertPolicy::SATURATE, ConvertPolicy::WRAP })),
Michalis Spyrouaeebe4a2019-01-09 14:21:03 +0000463 DepthConvertLayerShiftDatasetNightly))
Giorgio Arena04a8f8c2017-11-23 11:45:24 +0000464{
465 // Validate output
466 validate(Accessor(_target), _reference);
467}
Michalis Spyroue2588182018-12-13 18:31:18 +0000468TEST_SUITE_END() // U16_to_U8
Giorgio Arena04a8f8c2017-11-23 11:45:24 +0000469
470TEST_SUITE(U16_to_U32)
Michalis Spyrou5c9f0c42019-01-16 14:48:48 +0000471DATA_TEST_CASE(Configuration, framework::DatasetMode::ALL, combine(combine(datasets::SmallShapes(), framework::dataset::make("ConvertPolicy", { ConvertPolicy::SATURATE, ConvertPolicy::WRAP })),
Michalis Spyrouaeebe4a2019-01-09 14:21:03 +0000472 DepthConvertLayerShiftDatasetNightly),
Giorgio Arena04a8f8c2017-11-23 11:45:24 +0000473 shape, policy, shift)
474{
Giorgio Arena04a8f8c2017-11-23 11:45:24 +0000475 // Create tensors
Vidhya Sudhan Loganathan014333d2018-07-02 09:13:49 +0100476 Tensor src = create_tensor<Tensor>(shape, DataType::U16, 1);
477 Tensor dst = create_tensor<Tensor>(shape, DataType::U32, 1);
Giorgio Arena04a8f8c2017-11-23 11:45:24 +0000478
479 // Create and Configure function
480 NEDepthConvertLayer depth_convert;
481 depth_convert.configure(&src, &dst, policy, shift);
482
483 // Validate valid region
484 const ValidRegion valid_region = shape_to_valid_region(shape);
485 validate(dst.info()->valid_region(), valid_region);
486
487 // Validate padding
488 const PaddingSize padding = PaddingCalculator(shape.x(), 16).required_padding();
489 validate(src.info()->padding(), padding);
490 validate(dst.info()->padding(), padding);
491}
492
493FIXTURE_DATA_TEST_CASE(RunSmall, NEDepthConvertLayerToU32Fixture<uint16_t>, framework::DatasetMode::PRECOMMIT, combine(combine(combine(datasets::SmallShapes(), DepthConvertLayerU16toU32Dataset),
494 framework::dataset::make("ConvertPolicy", { ConvertPolicy::SATURATE, ConvertPolicy::WRAP })),
Michalis Spyrouaeebe4a2019-01-09 14:21:03 +0000495 DepthConvertLayerShiftDatasetPrecommit))
Giorgio Arena04a8f8c2017-11-23 11:45:24 +0000496{
497 // Validate output
498 validate(Accessor(_target), _reference);
499}
500FIXTURE_DATA_TEST_CASE(RunLarge, NEDepthConvertLayerToU32Fixture<uint16_t>, framework::DatasetMode::NIGHTLY, combine(combine(combine(datasets::LargeShapes(), DepthConvertLayerU16toU32Dataset),
501 framework::dataset::make("ConvertPolicy", { ConvertPolicy::SATURATE, ConvertPolicy::WRAP })),
Michalis Spyrouaeebe4a2019-01-09 14:21:03 +0000502 DepthConvertLayerShiftDatasetNightly))
Giorgio Arena04a8f8c2017-11-23 11:45:24 +0000503{
504 // Validate output
505 validate(Accessor(_target), _reference);
506}
Michalis Spyroue2588182018-12-13 18:31:18 +0000507TEST_SUITE_END() // U16_to_U32
Giorgio Arena04a8f8c2017-11-23 11:45:24 +0000508
509TEST_SUITE(S16_to_U8)
Michalis Spyrou5c9f0c42019-01-16 14:48:48 +0000510DATA_TEST_CASE(Configuration, framework::DatasetMode::ALL, combine(combine(datasets::SmallShapes(), framework::dataset::make("ConvertPolicy", { ConvertPolicy::SATURATE, ConvertPolicy::WRAP })),
Michalis Spyrouaeebe4a2019-01-09 14:21:03 +0000511 DepthConvertLayerShiftDatasetNightly),
Giorgio Arena04a8f8c2017-11-23 11:45:24 +0000512 shape, policy, shift)
513{
Giorgio Arena04a8f8c2017-11-23 11:45:24 +0000514 // Create tensors
Vidhya Sudhan Loganathan014333d2018-07-02 09:13:49 +0100515 Tensor src = create_tensor<Tensor>(shape, DataType::S16, 1);
516 Tensor dst = create_tensor<Tensor>(shape, DataType::U8, 1);
Giorgio Arena04a8f8c2017-11-23 11:45:24 +0000517
518 // Create and Configure function
519 NEDepthConvertLayer depth_convert;
520 depth_convert.configure(&src, &dst, policy, shift);
521
522 // Validate valid region
523 const ValidRegion valid_region = shape_to_valid_region(shape);
524 validate(dst.info()->valid_region(), valid_region);
525
526 // Validate padding
527 const PaddingSize padding = PaddingCalculator(shape.x(), 16).required_padding();
528 validate(src.info()->padding(), padding);
529 validate(dst.info()->padding(), padding);
530}
531
532FIXTURE_DATA_TEST_CASE(RunSmall, NEDepthConvertLayerToU8Fixture<int16_t>, framework::DatasetMode::PRECOMMIT, combine(combine(combine(datasets::SmallShapes(), DepthConvertLayerS16toU8Dataset),
533 framework::dataset::make("ConvertPolicy", { ConvertPolicy::SATURATE, ConvertPolicy::WRAP })),
Michalis Spyrouaeebe4a2019-01-09 14:21:03 +0000534 DepthConvertLayerShiftDatasetPrecommit))
Giorgio Arena04a8f8c2017-11-23 11:45:24 +0000535{
536 // Validate output
537 validate(Accessor(_target), _reference);
538}
539FIXTURE_DATA_TEST_CASE(RunLarge, NEDepthConvertLayerToU8Fixture<int16_t>, framework::DatasetMode::NIGHTLY, combine(combine(combine(datasets::LargeShapes(), DepthConvertLayerS16toU8Dataset),
540 framework::dataset::make("ConvertPolicy", { ConvertPolicy::SATURATE, ConvertPolicy::WRAP })),
Michalis Spyrouaeebe4a2019-01-09 14:21:03 +0000541 DepthConvertLayerShiftDatasetNightly))
Giorgio Arena04a8f8c2017-11-23 11:45:24 +0000542{
543 // Validate output
544 validate(Accessor(_target), _reference);
545}
Michalis Spyroue2588182018-12-13 18:31:18 +0000546TEST_SUITE_END() // S16_to_U8
Giorgio Arena04a8f8c2017-11-23 11:45:24 +0000547
548TEST_SUITE(S16_to_S32)
Michalis Spyrou5c9f0c42019-01-16 14:48:48 +0000549DATA_TEST_CASE(Configuration, framework::DatasetMode::ALL, combine(combine(datasets::SmallShapes(), framework::dataset::make("ConvertPolicy", { ConvertPolicy::SATURATE, ConvertPolicy::WRAP })),
Michalis Spyrouaeebe4a2019-01-09 14:21:03 +0000550 DepthConvertLayerShiftDatasetNightly),
Giorgio Arena04a8f8c2017-11-23 11:45:24 +0000551 shape, policy, shift)
552{
Giorgio Arena04a8f8c2017-11-23 11:45:24 +0000553 // Create tensors
Vidhya Sudhan Loganathan014333d2018-07-02 09:13:49 +0100554 Tensor src = create_tensor<Tensor>(shape, DataType::S16, 1);
555 Tensor dst = create_tensor<Tensor>(shape, DataType::S32, 1);
Giorgio Arena04a8f8c2017-11-23 11:45:24 +0000556
557 // Create and Configure function
558 NEDepthConvertLayer depth_convert;
559 depth_convert.configure(&src, &dst, policy, shift);
560
561 // Validate valid region
562 const ValidRegion valid_region = shape_to_valid_region(shape);
563 validate(dst.info()->valid_region(), valid_region);
564
565 // Validate padding
566 const PaddingSize padding = PaddingCalculator(shape.x(), 16).required_padding();
567 validate(src.info()->padding(), padding);
568 validate(dst.info()->padding(), padding);
569}
570
571FIXTURE_DATA_TEST_CASE(RunSmall, NEDepthConvertLayerToS32Fixture<int16_t>, framework::DatasetMode::PRECOMMIT, combine(combine(combine(datasets::SmallShapes(), DepthConvertLayerS16toS32Dataset),
572 framework::dataset::make("ConvertPolicy", { ConvertPolicy::SATURATE, ConvertPolicy::WRAP })),
Michalis Spyrouaeebe4a2019-01-09 14:21:03 +0000573 DepthConvertLayerShiftDatasetPrecommit))
Giorgio Arena04a8f8c2017-11-23 11:45:24 +0000574{
575 // Validate output
576 validate(Accessor(_target), _reference);
577}
578FIXTURE_DATA_TEST_CASE(RunLarge, NEDepthConvertLayerToS32Fixture<int16_t>, framework::DatasetMode::NIGHTLY, combine(combine(combine(datasets::LargeShapes(), DepthConvertLayerS16toS32Dataset),
579 framework::dataset::make("ConvertPolicy", { ConvertPolicy::SATURATE, ConvertPolicy::WRAP })),
Michalis Spyrouaeebe4a2019-01-09 14:21:03 +0000580 DepthConvertLayerShiftDatasetNightly))
Giorgio Arena04a8f8c2017-11-23 11:45:24 +0000581{
582 // Validate output
583 validate(Accessor(_target), _reference);
584}
Michalis Spyroue2588182018-12-13 18:31:18 +0000585TEST_SUITE_END() // S16_to_S32
Giorgio Arena04a8f8c2017-11-23 11:45:24 +0000586
Michele Di Giorgio3e570db2018-08-24 18:28:48 +0100587#ifdef __ARM_FEATURE_FP16_VECTOR_ARITHMETIC
Michalis Spyroue2588182018-12-13 18:31:18 +0000588TEST_SUITE(F16_to_QASYMM8)
Michalis Spyrou5c9f0c42019-01-16 14:48:48 +0000589DATA_TEST_CASE(Configuration, framework::DatasetMode::ALL, combine(combine(datasets::SmallShapes(), framework::dataset::make("ConvertPolicy", { ConvertPolicy::SATURATE })),
Michalis Spyroue2588182018-12-13 18:31:18 +0000590 DepthConvertLayerZeroShiftDataset),
591 shape, policy, shift)
592{
593 // Create tensors
594 Tensor src = create_tensor<Tensor>(shape, DataType::F16, 1);
595 Tensor dst = create_tensor<Tensor>(shape, DataType::QASYMM8, 1);
596
597 // Create and Configure function
598 NEDepthConvertLayer depth_convert;
599 depth_convert.configure(&src, &dst, policy, shift);
600
601 // Validate valid region
602 const ValidRegion valid_region = shape_to_valid_region(shape);
603 validate(dst.info()->valid_region(), valid_region);
604
605 // Validate padding
606 const PaddingSize padding = PaddingCalculator(shape.x(), 16).required_padding();
607 validate(src.info()->padding(), padding);
608 validate(dst.info()->padding(), padding);
609}
610
611FIXTURE_DATA_TEST_CASE(RunSmall, NEDepthConvertLayerToQASYMM8Fixture<half>, framework::DatasetMode::PRECOMMIT, combine(combine(combine(combine(datasets::SmallShapes(),
612 DepthConvertLayerF16toQASYMM8Dataset),
613 framework::dataset::make("ConvertPolicy", { ConvertPolicy::SATURATE })),
614 DepthConvertLayerZeroShiftDataset),
615 framework::dataset::make("QuantizationInfo", { QuantizationInfo(0.5f, 10) })))
616{
617 // Validate output
618 validate(Accessor(_target), _reference, tolerance_qasymm8);
619}
620FIXTURE_DATA_TEST_CASE(RunLarge, NEDepthConvertLayerToQASYMM8Fixture<half>, framework::DatasetMode::NIGHTLY, combine(combine(combine(combine(datasets::LargeShapes(),
621 DepthConvertLayerF16toQASYMM8Dataset),
622 framework::dataset::make("ConvertPolicy", { ConvertPolicy::SATURATE })),
623 DepthConvertLayerZeroShiftDataset),
624 framework::dataset::make("QuantizationInfo", { QuantizationInfo(0.5f, 10) })))
625{
626 // Validate output
627 validate(Accessor(_target), _reference, tolerance_qasymm8);
628}
629TEST_SUITE_END() // F16_to_QASYMM8
630
Usama Arif9e631c22019-05-14 17:10:40 +0100631
632TEST_SUITE(F16_to_U8)
633DATA_TEST_CASE(Configuration, framework::DatasetMode::ALL, combine(combine(datasets::SmallShapes(), framework::dataset::make("ConvertPolicy", { ConvertPolicy::SATURATE, ConvertPolicy::WRAP })),
634 DepthConvertLayerZeroShiftDataset),
635 shape, policy, shift)
636{
637 // Create tensors
638 Tensor src = create_tensor<Tensor>(shape, DataType::F16, 1);
639 Tensor dst = create_tensor<Tensor>(shape, DataType::U8, 1);
640
641 // Create and Configure function
642 NEDepthConvertLayer depth_convert;
643 depth_convert.configure(&src, &dst, policy, shift);
644
645 // Validate valid region
646 const ValidRegion valid_region = shape_to_valid_region(shape);
647 validate(dst.info()->valid_region(), valid_region);
648
649 // Validate padding
650 const PaddingSize padding = PaddingCalculator(shape.x(), 16).required_padding();
651 validate(src.info()->padding(), padding);
652 validate(dst.info()->padding(), padding);
653}
654
655FIXTURE_DATA_TEST_CASE(RunSmall, NEDepthConvertLayerToU8Fixture<half>, framework::DatasetMode::PRECOMMIT, combine(combine(combine(datasets::SmallShapes(), DepthConvertLayerF16toU8Dataset),
656 framework::dataset::make("ConvertPolicy", { ConvertPolicy::SATURATE, ConvertPolicy::WRAP })),
657 DepthConvertLayerZeroShiftDataset))
658{
659 // Validate output
660 validate(Accessor(_target), _reference, tolerance_one_uint8);
661}
662FIXTURE_DATA_TEST_CASE(RunLarge, NEDepthConvertLayerToU8Fixture<half>, framework::DatasetMode::NIGHTLY, combine(combine(combine(datasets::LargeShapes(), DepthConvertLayerF16toU8Dataset),
663 framework::dataset::make("ConvertPolicy", { ConvertPolicy::SATURATE, ConvertPolicy::WRAP })),
664 DepthConvertLayerZeroShiftDataset))
665{
666 // Validate output
667 validate(Accessor(_target), _reference, tolerance_one_uint8);
668}
669TEST_SUITE_END() // F16_to_U8
670
671
672
Michele Di Giorgio3e570db2018-08-24 18:28:48 +0100673TEST_SUITE(F16_to_F32)
Michalis Spyrou5c9f0c42019-01-16 14:48:48 +0000674DATA_TEST_CASE(Configuration, framework::DatasetMode::ALL, combine(combine(datasets::SmallShapes(), framework::dataset::make("ConvertPolicy", { ConvertPolicy::SATURATE, ConvertPolicy::WRAP })),
Georgios Pinitas6a468ef2018-12-04 13:46:48 +0000675 DepthConvertLayerZeroShiftDataset),
Michele Di Giorgio3e570db2018-08-24 18:28:48 +0100676 shape, policy, shift)
677{
678 // Create tensors
679 Tensor src = create_tensor<Tensor>(shape, DataType::F16, 1);
680 Tensor dst = create_tensor<Tensor>(shape, DataType::F32, 1);
681
682 // Create and Configure function
683 NEDepthConvertLayer depth_convert;
684 depth_convert.configure(&src, &dst, policy, shift);
685
686 // Validate valid region
687 const ValidRegion valid_region = shape_to_valid_region(shape);
688 validate(dst.info()->valid_region(), valid_region);
689
690 // Validate padding
691 const PaddingSize padding = PaddingCalculator(shape.x(), 16).required_padding();
692 validate(src.info()->padding(), padding);
693 validate(dst.info()->padding(), padding);
694}
695
696FIXTURE_DATA_TEST_CASE(RunSmall, NEDepthConvertLayerToF32Fixture<half>, framework::DatasetMode::PRECOMMIT, combine(combine(combine(datasets::SmallShapes(), DepthConvertLayerF16toF32Dataset),
697 framework::dataset::make("ConvertPolicy", { ConvertPolicy::SATURATE, ConvertPolicy::WRAP })),
Georgios Pinitas6a468ef2018-12-04 13:46:48 +0000698 DepthConvertLayerZeroShiftDataset))
Michele Di Giorgio3e570db2018-08-24 18:28:48 +0100699{
700 // Validate output
701 validate(Accessor(_target), _reference);
702}
703FIXTURE_DATA_TEST_CASE(RunLarge, NEDepthConvertLayerToF32Fixture<half>, framework::DatasetMode::NIGHTLY, combine(combine(combine(datasets::LargeShapes(), DepthConvertLayerF16toF32Dataset),
704 framework::dataset::make("ConvertPolicy", { ConvertPolicy::SATURATE, ConvertPolicy::WRAP })),
Georgios Pinitas6a468ef2018-12-04 13:46:48 +0000705 DepthConvertLayerZeroShiftDataset))
Michele Di Giorgio3e570db2018-08-24 18:28:48 +0100706{
707 // Validate output
708 validate(Accessor(_target), _reference);
709}
Michalis Spyroue2588182018-12-13 18:31:18 +0000710TEST_SUITE_END() // F16_to_F32
711
Usama Arif9e631c22019-05-14 17:10:40 +0100712TEST_SUITE(F16_to_S32)
713DATA_TEST_CASE(Configuration, framework::DatasetMode::ALL, combine(combine(datasets::SmallShapes(), framework::dataset::make("ConvertPolicy", { ConvertPolicy::SATURATE, ConvertPolicy::WRAP })),
714 DepthConvertLayerZeroShiftDataset),
715 shape, policy, shift)
716{
717 // Create tensors
718 Tensor src = create_tensor<Tensor>(shape, DataType::F16, 1);
719 Tensor dst = create_tensor<Tensor>(shape, DataType::S32, 1);
720
721 // Create and Configure function
722 NEDepthConvertLayer depth_convert;
723 depth_convert.configure(&src, &dst, policy, shift);
724
725 // Validate valid region
726 const ValidRegion valid_region = shape_to_valid_region(shape);
727 validate(dst.info()->valid_region(), valid_region);
728
729 // Validate padding
730 const PaddingSize padding = PaddingCalculator(shape.x(), 16).required_padding();
731 validate(src.info()->padding(), padding);
732 validate(dst.info()->padding(), padding);
733}
734
735FIXTURE_DATA_TEST_CASE(RunSmall, NEDepthConvertLayerToS32Fixture<half>, framework::DatasetMode::PRECOMMIT, combine(combine(combine(datasets::SmallShapes(), DepthConvertLayerF16toS32Dataset),
736 framework::dataset::make("ConvertPolicy", { ConvertPolicy::SATURATE, ConvertPolicy::WRAP })),
737 DepthConvertLayerZeroShiftDataset))
738{
739 // Validate output
740 validate(Accessor(_target), _reference, tolerance_one_int32);
741}
742FIXTURE_DATA_TEST_CASE(RunLarge, NEDepthConvertLayerToS32Fixture<half>, framework::DatasetMode::NIGHTLY, combine(combine(combine(datasets::LargeShapes(), DepthConvertLayerF16toS32Dataset),
743 framework::dataset::make("ConvertPolicy", { ConvertPolicy::SATURATE, ConvertPolicy::WRAP })),
744 DepthConvertLayerZeroShiftDataset))
745{
746 // Validate output
747 validate(Accessor(_target), _reference, tolerance_one_int32);
748}
749
750TEST_SUITE_END() // F16_to_S32
751
Michalis Spyroue2588182018-12-13 18:31:18 +0000752TEST_SUITE(QASYMM8_to_F16)
Michalis Spyrou5c9f0c42019-01-16 14:48:48 +0000753DATA_TEST_CASE(Configuration, framework::DatasetMode::ALL, combine(combine(datasets::SmallShapes(), framework::dataset::make("ConvertPolicy", { ConvertPolicy::SATURATE, ConvertPolicy::WRAP })),
Michalis Spyroue2588182018-12-13 18:31:18 +0000754 DepthConvertLayerZeroShiftDataset),
755 shape, policy, shift)
756{
757 // Create tensors
758 Tensor src = create_tensor<Tensor>(shape, DataType::QASYMM8, 1);
759 Tensor dst = create_tensor<Tensor>(shape, DataType::F16, 1);
760
761 // Create and Configure function
762 NEDepthConvertLayer depth_convert;
763 depth_convert.configure(&src, &dst, policy, shift);
764
765 // Validate valid region
766 const ValidRegion valid_region = shape_to_valid_region(shape);
767 validate(dst.info()->valid_region(), valid_region);
768
769 // Validate padding
770 const PaddingSize padding = PaddingCalculator(shape.x(), 16).required_padding();
771 validate(src.info()->padding(), padding);
772 validate(dst.info()->padding(), padding);
773}
774
775FIXTURE_DATA_TEST_CASE(RunSmall, NEDepthConvertLayerQuantizedToF16Fixture<uint8_t>, framework::DatasetMode::PRECOMMIT, combine(combine(combine(combine(datasets::SmallShapes(),
776 DepthConvertLayerQASYMM8toF16Dataset),
777 framework::dataset::make("ConvertPolicy", { ConvertPolicy::SATURATE })),
778 DepthConvertLayerZeroShiftDataset),
779 framework::dataset::make("QuantizationInfo", { QuantizationInfo(0.5f, 10) })))
780{
781 // Validate output
782 validate(Accessor(_target), _reference);
783}
784FIXTURE_DATA_TEST_CASE(RunLarge, NEDepthConvertLayerQuantizedToF16Fixture<uint8_t>, framework::DatasetMode::NIGHTLY, combine(combine(combine(combine(datasets::LargeShapes(),
785 DepthConvertLayerQASYMM8toF16Dataset),
786 framework::dataset::make("ConvertPolicy", { ConvertPolicy::SATURATE })),
787 DepthConvertLayerZeroShiftDataset),
788 framework::dataset::make("QuantizationInfo", { QuantizationInfo(0.5f, 10) })))
789{
790 // Validate output
791 validate(Accessor(_target), _reference);
792}
793TEST_SUITE_END() // QASYMM8_to_F16
Michele Di Giorgio3e570db2018-08-24 18:28:48 +0100794
795TEST_SUITE(F32_to_F16)
Michalis Spyrou5c9f0c42019-01-16 14:48:48 +0000796DATA_TEST_CASE(Configuration, framework::DatasetMode::ALL, combine(combine(datasets::SmallShapes(), framework::dataset::make("ConvertPolicy", { ConvertPolicy::SATURATE, ConvertPolicy::WRAP })),
Georgios Pinitas6a468ef2018-12-04 13:46:48 +0000797 DepthConvertLayerZeroShiftDataset),
Michele Di Giorgio3e570db2018-08-24 18:28:48 +0100798 shape, policy, shift)
799{
800 // Create tensors
801 Tensor src = create_tensor<Tensor>(shape, DataType::F32, 1);
802 Tensor dst = create_tensor<Tensor>(shape, DataType::F16, 1);
803
804 // Create and Configure function
805 NEDepthConvertLayer depth_convert;
806 depth_convert.configure(&src, &dst, policy, shift);
807
808 // Validate valid region
809 const ValidRegion valid_region = shape_to_valid_region(shape);
810 validate(dst.info()->valid_region(), valid_region);
811
812 // Validate padding
813 const PaddingSize padding = PaddingCalculator(shape.x(), 16).required_padding();
814 validate(src.info()->padding(), padding);
815 validate(dst.info()->padding(), padding);
816}
817
818FIXTURE_DATA_TEST_CASE(RunSmall, NEDepthConvertLayerToF16Fixture<float>, framework::DatasetMode::PRECOMMIT, combine(combine(combine(datasets::SmallShapes(), DepthConvertLayerF32toF16Dataset),
819 framework::dataset::make("ConvertPolicy", { ConvertPolicy::SATURATE, ConvertPolicy::WRAP })),
Georgios Pinitas6a468ef2018-12-04 13:46:48 +0000820 DepthConvertLayerZeroShiftDataset))
Michele Di Giorgio3e570db2018-08-24 18:28:48 +0100821{
822 // Validate output
823 validate(Accessor(_target), _reference);
824}
825FIXTURE_DATA_TEST_CASE(RunLarge, NEDepthConvertLayerToF16Fixture<float>, framework::DatasetMode::NIGHTLY, combine(combine(combine(datasets::LargeShapes(), DepthConvertLayerF32toF16Dataset),
826 framework::dataset::make("ConvertPolicy", { ConvertPolicy::SATURATE, ConvertPolicy::WRAP })),
Georgios Pinitas6a468ef2018-12-04 13:46:48 +0000827 DepthConvertLayerZeroShiftDataset))
Michele Di Giorgio3e570db2018-08-24 18:28:48 +0100828{
829 // Validate output
830 validate(Accessor(_target), _reference);
831}
Michalis Spyroue2588182018-12-13 18:31:18 +0000832TEST_SUITE_END() // F32_to_F16
Usama Arif9e631c22019-05-14 17:10:40 +0100833
834TEST_SUITE(S32_to_F16)
835DATA_TEST_CASE(Configuration, framework::DatasetMode::ALL, combine(combine(datasets::SmallShapes(), framework::dataset::make("ConvertPolicy", { ConvertPolicy::SATURATE, ConvertPolicy::WRAP })),
836 DepthConvertLayerZeroShiftDataset),
837 shape, policy, shift)
838{
839 // Create tensors
840 Tensor src = create_tensor<Tensor>(shape, DataType::S32, 1);
841 Tensor dst = create_tensor<Tensor>(shape, DataType::F16, 1);
842
843 // Create and Configure function
844 NEDepthConvertLayer depth_convert;
845 depth_convert.configure(&src, &dst, policy, shift);
846
847 // Validate valid region
848 const ValidRegion valid_region = shape_to_valid_region(shape);
849 validate(dst.info()->valid_region(), valid_region);
850
851 // Validate padding
852 const PaddingSize padding = PaddingCalculator(shape.x(), 16).required_padding();
853 validate(src.info()->padding(), padding);
854 validate(dst.info()->padding(), padding);
855}
856
857FIXTURE_DATA_TEST_CASE(RunSmall, NEDepthConvertLayerToF16Fixture<int32_t>, framework::DatasetMode::PRECOMMIT, combine(combine(combine(datasets::SmallShapes(), DepthConvertLayerS32toF16Dataset),
858 framework::dataset::make("ConvertPolicy", { ConvertPolicy::SATURATE, ConvertPolicy::WRAP })),
859 DepthConvertLayerZeroShiftDataset))
860{
861 // Validate output
862 validate(Accessor(_target), _reference);
863}
864FIXTURE_DATA_TEST_CASE(RunLarge, NEDepthConvertLayerToF16Fixture<int32_t>, framework::DatasetMode::NIGHTLY, combine(combine(combine(datasets::LargeShapes(), DepthConvertLayerS32toF16Dataset),
865 framework::dataset::make("ConvertPolicy", { ConvertPolicy::SATURATE, ConvertPolicy::WRAP })),
866 DepthConvertLayerZeroShiftDataset))
867{
868 // Validate output
869 validate(Accessor(_target), _reference);
870}
871TEST_SUITE_END() // S32_to_F16
872
Michalis Spyroue2588182018-12-13 18:31:18 +0000873#endif /* __ARM_FEATURE_FP16_VECTOR_ARITHMETIC */
Michele Di Giorgio3e570db2018-08-24 18:28:48 +0100874
Usama Arif9e631c22019-05-14 17:10:40 +0100875TEST_SUITE(F32_to_S32)
876DATA_TEST_CASE(Configuration, framework::DatasetMode::ALL, combine(combine(datasets::SmallShapes(), framework::dataset::make("ConvertPolicy", { ConvertPolicy::SATURATE, ConvertPolicy::WRAP })),
877 DepthConvertLayerZeroShiftDataset),
878 shape, policy, shift)
879{
880 // Create tensors
881 Tensor src = create_tensor<Tensor>(shape, DataType::F32, 1);
882 Tensor dst = create_tensor<Tensor>(shape, DataType::S32, 1);
883
884 // Create and Configure function
885 NEDepthConvertLayer depth_convert;
886 depth_convert.configure(&src, &dst, policy, shift);
887
888 // Validate valid region
889 const ValidRegion valid_region = shape_to_valid_region(shape);
890 validate(dst.info()->valid_region(), valid_region);
891
892 // Validate padding
893 const PaddingSize padding = PaddingCalculator(shape.x(), 16).required_padding();
894 validate(src.info()->padding(), padding);
895 validate(dst.info()->padding(), padding);
896}
897
898FIXTURE_DATA_TEST_CASE(RunSmall, NEDepthConvertLayerToS32Fixture<float>, framework::DatasetMode::PRECOMMIT, combine(combine(combine(datasets::SmallShapes(), DepthConvertLayerF32toS32Dataset),
899 framework::dataset::make("ConvertPolicy", { ConvertPolicy::SATURATE, ConvertPolicy::WRAP })),
900 DepthConvertLayerZeroShiftDataset))
901{
902 // Validate output
903 validate(Accessor(_target), _reference, tolerance_one_int32);
904}
905FIXTURE_DATA_TEST_CASE(RunLarge, NEDepthConvertLayerToS32Fixture<float>, framework::DatasetMode::NIGHTLY, combine(combine(combine(datasets::LargeShapes(), DepthConvertLayerF32toS32Dataset),
906 framework::dataset::make("ConvertPolicy", { ConvertPolicy::SATURATE, ConvertPolicy::WRAP })),
907 DepthConvertLayerZeroShiftDataset))
908{
909 // Validate output
910 validate(Accessor(_target), _reference, tolerance_one_int32);
911}
912TEST_SUITE_END() // F32_to_S32
913
914TEST_SUITE(F32_to_U8)
915DATA_TEST_CASE(Configuration, framework::DatasetMode::ALL, combine(combine(datasets::SmallShapes(), framework::dataset::make("ConvertPolicy", { ConvertPolicy::SATURATE, ConvertPolicy::WRAP })),
916 DepthConvertLayerZeroShiftDataset),
917 shape, policy, shift)
918{
919 // Create tensors
920 Tensor src = create_tensor<Tensor>(shape, DataType::F32, 1);
921 Tensor dst = create_tensor<Tensor>(shape, DataType::U8, 1);
922
923 // Create and Configure function
924 NEDepthConvertLayer depth_convert;
925 depth_convert.configure(&src, &dst, policy, shift);
926
927 // Validate valid region
928 const ValidRegion valid_region = shape_to_valid_region(shape);
929 validate(dst.info()->valid_region(), valid_region);
930
931 // Validate padding
932 const PaddingSize padding = PaddingCalculator(shape.x(), 16).required_padding();
933 validate(src.info()->padding(), padding);
934 validate(dst.info()->padding(), padding);
935}
936
937FIXTURE_DATA_TEST_CASE(RunSmall, NEDepthConvertLayerToU8Fixture<float>, framework::DatasetMode::PRECOMMIT, combine(combine(combine(datasets::SmallShapes(), DepthConvertLayerF32toU8Dataset),
938 framework::dataset::make("ConvertPolicy", { ConvertPolicy::SATURATE, ConvertPolicy::WRAP })),
939 DepthConvertLayerZeroShiftDataset))
940{
941 // Validate output
942 validate(Accessor(_target), _reference, tolerance_one_int32);
943}
944FIXTURE_DATA_TEST_CASE(RunLarge, NEDepthConvertLayerToU8Fixture<float>, framework::DatasetMode::NIGHTLY, combine(combine(combine(datasets::LargeShapes(), DepthConvertLayerF32toU8Dataset),
945 framework::dataset::make("ConvertPolicy", { ConvertPolicy::SATURATE, ConvertPolicy::WRAP })),
946 DepthConvertLayerZeroShiftDataset))
947{
948 // Validate output
949 validate(Accessor(_target), _reference, tolerance_one_int32);
950}
951TEST_SUITE_END() // F32_to_U8
952
953
954
Michalis Spyroue2588182018-12-13 18:31:18 +0000955TEST_SUITE(F32_to_QASYMM8)
Michalis Spyrou5c9f0c42019-01-16 14:48:48 +0000956DATA_TEST_CASE(Configuration, framework::DatasetMode::ALL, combine(combine(datasets::SmallShapes(), framework::dataset::make("ConvertPolicy", { ConvertPolicy::SATURATE, ConvertPolicy::WRAP })),
Michalis Spyroue2588182018-12-13 18:31:18 +0000957 DepthConvertLayerZeroShiftDataset),
958 shape, policy, shift)
959{
960 // Create tensors
961 Tensor src = create_tensor<Tensor>(shape, DataType::F32, 1);
962 Tensor dst = create_tensor<Tensor>(shape, DataType::QASYMM8, 1);
963
964 // Create and Configure function
965 NEDepthConvertLayer depth_convert;
966 depth_convert.configure(&src, &dst, policy, shift);
967
968 // Validate valid region
969 const ValidRegion valid_region = shape_to_valid_region(shape);
970 validate(dst.info()->valid_region(), valid_region);
971
972 // Validate padding
973 const PaddingSize padding = PaddingCalculator(shape.x(), 16).required_padding();
974 validate(src.info()->padding(), padding);
975 validate(dst.info()->padding(), padding);
976}
977
978FIXTURE_DATA_TEST_CASE(RunSmall, NEDepthConvertLayerToQASYMM8Fixture<float>, framework::DatasetMode::PRECOMMIT, combine(combine(combine(combine(datasets::SmallShapes(),
979 DepthConvertLayerF32toQASYMM8Dataset),
980 framework::dataset::make("ConvertPolicy", { ConvertPolicy::SATURATE })),
981 DepthConvertLayerZeroShiftDataset),
982 framework::dataset::make("QuantizationInfo", { QuantizationInfo(0.5f, 10) })))
983{
984 // Validate output
985 validate(Accessor(_target), _reference, tolerance_qasymm8);
986}
987FIXTURE_DATA_TEST_CASE(RunLarge, NEDepthConvertLayerToQASYMM8Fixture<float>, framework::DatasetMode::NIGHTLY, combine(combine(combine(combine(datasets::LargeShapes(),
988 DepthConvertLayerF32toQASYMM8Dataset),
989 framework::dataset::make("ConvertPolicy", { ConvertPolicy::SATURATE })),
990 DepthConvertLayerZeroShiftDataset),
991 framework::dataset::make("QuantizationInfo", { QuantizationInfo(0.5f, 10) })))
992{
993 // Validate output
994 validate(Accessor(_target), _reference, tolerance_qasymm8);
995}
996TEST_SUITE_END() // F32_to_QASYMM8
Usama Arif9e631c22019-05-14 17:10:40 +0100997
998
999TEST_SUITE(S32_to_F32)
1000DATA_TEST_CASE(Configuration, framework::DatasetMode::ALL, combine(combine(datasets::SmallShapes(), framework::dataset::make("ConvertPolicy", { ConvertPolicy::SATURATE, ConvertPolicy::WRAP })),
1001 DepthConvertLayerZeroShiftDataset),
1002 shape, policy, shift)
1003{
1004 // Create tensors
1005 Tensor src = create_tensor<Tensor>(shape, DataType::S32, 1);
1006 Tensor dst = create_tensor<Tensor>(shape, DataType::F32, 1);
1007
1008 // Create and Configure function
1009 NEDepthConvertLayer depth_convert;
1010 depth_convert.configure(&src, &dst, policy, shift);
1011
1012 // Validate valid region
1013 const ValidRegion valid_region = shape_to_valid_region(shape);
1014 validate(dst.info()->valid_region(), valid_region);
1015
1016 // Validate padding
1017 const PaddingSize padding = PaddingCalculator(shape.x(), 16).required_padding();
1018 validate(src.info()->padding(), padding);
1019 validate(dst.info()->padding(), padding);
1020}
1021
1022FIXTURE_DATA_TEST_CASE(RunSmall, NEDepthConvertLayerToF32Fixture<int32_t>, framework::DatasetMode::PRECOMMIT, combine(combine(combine(datasets::SmallShapes(), DepthConvertLayerS32toF32Dataset),
1023 framework::dataset::make("ConvertPolicy", { ConvertPolicy::SATURATE, ConvertPolicy::WRAP })),
1024 DepthConvertLayerZeroShiftDataset))
1025{
1026 // Validate output
1027 validate(Accessor(_target), _reference);
1028}
1029FIXTURE_DATA_TEST_CASE(RunLarge, NEDepthConvertLayerToF32Fixture<int32_t>, framework::DatasetMode::NIGHTLY, combine(combine(combine(datasets::LargeShapes(), DepthConvertLayerS32toF32Dataset),
1030 framework::dataset::make("ConvertPolicy", { ConvertPolicy::SATURATE, ConvertPolicy::WRAP })),
1031 DepthConvertLayerZeroShiftDataset))
1032{
1033 // Validate output
1034 validate(Accessor(_target), _reference);
1035}
1036TEST_SUITE_END() // S32_to_F32
1037
1038TEST_SUITE(S32_to_QASYMM8)
1039DATA_TEST_CASE(Configuration, framework::DatasetMode::ALL, combine(combine(datasets::SmallShapes(), framework::dataset::make("ConvertPolicy", { ConvertPolicy::SATURATE, ConvertPolicy::WRAP })),
1040 DepthConvertLayerZeroShiftDataset),
1041 shape, policy, shift)
1042{
1043 // Create tensors
1044 Tensor src = create_tensor<Tensor>(shape, DataType::S32, 1);
1045 Tensor dst = create_tensor<Tensor>(shape, DataType::QASYMM8, 1);
1046
1047 // Create and Configure function
1048 NEDepthConvertLayer depth_convert;
1049 depth_convert.configure(&src, &dst, policy, shift);
1050
1051 // Validate valid region
1052 const ValidRegion valid_region = shape_to_valid_region(shape);
1053 validate(dst.info()->valid_region(), valid_region);
1054
1055 // Validate padding
1056 const PaddingSize padding = PaddingCalculator(shape.x(), 16).required_padding();
1057 validate(src.info()->padding(), padding);
1058 validate(dst.info()->padding(), padding);
1059}
1060
1061FIXTURE_DATA_TEST_CASE(RunSmall, NEDepthConvertLayerToQASYMM8Fixture<int32_t>, framework::DatasetMode::PRECOMMIT, combine(combine(combine(combine(datasets::SmallShapes(),
1062 DepthConvertLayerS32toQASYMM8Dataset),
1063 framework::dataset::make("ConvertPolicy", { ConvertPolicy::SATURATE })),
1064 DepthConvertLayerZeroShiftDataset),
1065 framework::dataset::make("QuantizationInfo", { QuantizationInfo(0.5f, 10) })))
1066{
1067 // Validate output
1068 validate(Accessor(_target), _reference, tolerance_qasymm8);
1069}
1070FIXTURE_DATA_TEST_CASE(RunLarge, NEDepthConvertLayerToQASYMM8Fixture<int32_t>, framework::DatasetMode::NIGHTLY, combine(combine(combine(combine(datasets::LargeShapes(),
1071 DepthConvertLayerS32toQASYMM8Dataset),
1072 framework::dataset::make("ConvertPolicy", { ConvertPolicy::SATURATE })),
1073 DepthConvertLayerZeroShiftDataset),
1074 framework::dataset::make("QuantizationInfo", { QuantizationInfo(0.5f, 10) })))
1075{
1076 // Validate output
1077 validate(Accessor(_target), _reference, tolerance_qasymm8);
1078}
1079TEST_SUITE_END() // S32_to_QASYMM8
1080
1081TEST_SUITE(S32_to_U8)
1082DATA_TEST_CASE(Configuration, framework::DatasetMode::ALL, combine(combine(datasets::SmallShapes(), framework::dataset::make("ConvertPolicy", { ConvertPolicy::SATURATE, ConvertPolicy::WRAP })),
1083 DepthConvertLayerZeroShiftDataset),
1084 shape, policy, shift)
1085{
1086 // Create tensors
1087 Tensor src = create_tensor<Tensor>(shape, DataType::S32, 1);
1088 Tensor dst = create_tensor<Tensor>(shape, DataType::U8, 1);
1089
1090 // Create and Configure function
1091 NEDepthConvertLayer depth_convert;
1092 depth_convert.configure(&src, &dst, policy, shift);
1093
1094 // Validate valid region
1095 const ValidRegion valid_region = shape_to_valid_region(shape);
1096 validate(dst.info()->valid_region(), valid_region);
1097
1098 // Validate padding
1099 const PaddingSize padding = PaddingCalculator(shape.x(), 16).required_padding();
1100 validate(src.info()->padding(), padding);
1101 validate(dst.info()->padding(), padding);
1102}
1103
1104FIXTURE_DATA_TEST_CASE(RunSmall, NEDepthConvertLayerToU8Fixture<int32_t>, framework::DatasetMode::PRECOMMIT, combine(combine(combine(datasets::SmallShapes(), DepthConvertLayerS32toU8Dataset),
1105 framework::dataset::make("ConvertPolicy", { ConvertPolicy::SATURATE, ConvertPolicy::WRAP })),
1106 DepthConvertLayerZeroShiftDataset))
1107{
1108 // Validate output
1109 validate(Accessor(_target), _reference);
1110}
1111FIXTURE_DATA_TEST_CASE(RunLarge, NEDepthConvertLayerToU8Fixture<int32_t>, framework::DatasetMode::NIGHTLY, combine(combine(combine(datasets::LargeShapes(), DepthConvertLayerS32toU8Dataset),
1112 framework::dataset::make("ConvertPolicy", { ConvertPolicy::SATURATE, ConvertPolicy::WRAP })),
1113 DepthConvertLayerZeroShiftDataset))
1114{
1115 // Validate output
1116 validate(Accessor(_target), _reference);
1117}
1118TEST_SUITE_END() // S32_to_U8
1119
1120
1121
1122
Michalis Spyroue2588182018-12-13 18:31:18 +00001123TEST_SUITE_END() // DepthConvertLayer
1124TEST_SUITE_END() // NEON
Giorgio Arena04a8f8c2017-11-23 11:45:24 +00001125} // namespace validation
1126} // namespace test
1127} // namespace arm_compute