blob: 24b2297c4eb4f20531fe8f690a891aec939b507e [file] [log] [blame]
Giorgio Arena04a8f8c2017-11-23 11:45:24 +00001/*
Georgios Pinitasc10bc0b2019-01-09 11:55:00 +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,
Georgios Pinitasc10bc0b2019-01-09 11:55:00 +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/CL/CLTensor.h"
26#include "arm_compute/runtime/CL/CLTensorAllocator.h"
27#include "arm_compute/runtime/CL/functions/CLDepthConvertLayer.h"
28#include "tests/CL/CLAccessor.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 Spyrou80943252019-01-10 17:19:50 +000047const 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 DepthConvertLayerF16toF32Dataset = combine(framework::dataset::make("DataType", DataType::F16), framework::dataset::make("DataType", DataType::F32));
55const auto DepthConvertLayerF32toF16Dataset = combine(framework::dataset::make("DataType", DataType::F32), framework::dataset::make("DataType", DataType::F16));
56const auto DepthConvertLayerShiftDatasetNightly = framework::dataset::make("Shift", 0, 7);
57const auto DepthConvertLayerShiftDatasetPrecommit = framework::dataset::make("Shift", { 0, 3, 6 });
Giorgio Arena04a8f8c2017-11-23 11:45:24 +000058} // namespace
59
60TEST_SUITE(CL)
61TEST_SUITE(DepthConvertLayer)
Michalis Spyrou80943252019-01-10 17:19:50 +000062
63// *INDENT-OFF*
64// clang-format off
65DATA_TEST_CASE(Validate, framework::DatasetMode::ALL, zip(zip(zip(zip(
66 framework::dataset::make("InputInfo", { TensorInfo(TensorShape(32U, 13U, 2U), 1, DataType::QASYMM8), // Invalid data type combination
67 TensorInfo(TensorShape(32U, 13U, 2U), 1, DataType::U8), // Invalid data type combination
68 TensorInfo(TensorShape(32U, 13U, 2U), 1, DataType::U8), // Mismatching shapes
69 TensorInfo(TensorShape(27U, 13U, 2U), 1, DataType::U8), // Invalid shift
70 TensorInfo(TensorShape(27U, 13U, 2U), 1, DataType::F32), // Shift non zero and FP
71 TensorInfo(TensorShape(32U, 32U, 2U), 1, DataType::U8), // Valid
72 }),
73 framework::dataset::make("OutputInfo",{ TensorInfo(TensorShape(32U, 13U, 2U), 1, DataType::S16),
74 TensorInfo(TensorShape(32U, 13U, 2U), 1, DataType::U8),
75 TensorInfo(TensorShape(32U, 13U, 2U), 1, DataType::U8),
76 TensorInfo(TensorShape(32U, 13U, 2U), 1, DataType::U8),
77 TensorInfo(TensorShape(27U, 13U, 2U), 1, DataType::F16),
78 TensorInfo(TensorShape(32U, 32U, 2U), 1, DataType::U16),
79 })),
80 framework::dataset::make("Policy",{ ConvertPolicy::WRAP,
81 ConvertPolicy::WRAP,
82 ConvertPolicy::WRAP,
83 ConvertPolicy::WRAP,
84 ConvertPolicy::WRAP,
85 ConvertPolicy::WRAP,
86 })),
87 framework::dataset::make("Shift",{ 1, 1, 8, 1, 1, 1, })),
88 framework::dataset::make("Expected", { false, false, false, false, false, true})),
89 input_info, output_info, policy, shift, expected)
90{
91 ARM_COMPUTE_EXPECT(bool(CLDepthConvertLayer::validate(&input_info.clone()->set_is_resizable(false), &output_info.clone()->set_is_resizable(false), policy, shift)) == expected, framework::LogLevel::ERRORS);
92}
93// clang-format on
94// *INDENT-ON*
95
Giorgio Arena04a8f8c2017-11-23 11:45:24 +000096template <typename T>
97using CLDepthConvertLayerToU16Fixture = DepthConvertLayerValidationFixture<CLTensor, CLAccessor, CLDepthConvertLayer, T, uint16_t>;
98template <typename T>
99using CLDepthConvertLayerToS16Fixture = DepthConvertLayerValidationFixture<CLTensor, CLAccessor, CLDepthConvertLayer, T, int16_t>;
100template <typename T>
101using CLDepthConvertLayerToS32Fixture = DepthConvertLayerValidationFixture<CLTensor, CLAccessor, CLDepthConvertLayer, T, int32_t>;
102template <typename T>
103using CLDepthConvertLayerToU8Fixture = DepthConvertLayerValidationFixture<CLTensor, CLAccessor, CLDepthConvertLayer, T, uint8_t>;
104template <typename T>
105using CLDepthConvertLayerToU32Fixture = DepthConvertLayerValidationFixture<CLTensor, CLAccessor, CLDepthConvertLayer, T, uint32_t>;
Michele Di Giorgio6b4e6042018-08-02 12:02:48 +0100106template <typename T>
107using CLDepthConvertLayerToF16Fixture = DepthConvertLayerValidationFixture<CLTensor, CLAccessor, CLDepthConvertLayer, T, half>;
108template <typename T>
109using CLDepthConvertLayerToF32Fixture = DepthConvertLayerValidationFixture<CLTensor, CLAccessor, CLDepthConvertLayer, T, float>;
Giorgio Arena04a8f8c2017-11-23 11:45:24 +0000110
111TEST_SUITE(U8_to_U16)
Michalis Spyrou80943252019-01-10 17:19:50 +0000112DATA_TEST_CASE(Configuration, framework::DatasetMode::ALL, combine(combine(datasets::SmallShapes(), framework::dataset::make("ConvertPolicy", { ConvertPolicy::SATURATE, ConvertPolicy::WRAP })),
113 DepthConvertLayerShiftDatasetNightly),
Giorgio Arena04a8f8c2017-11-23 11:45:24 +0000114 shape, policy, shift)
115{
Giorgio Arena04a8f8c2017-11-23 11:45:24 +0000116 // Create tensors
Vidhya Sudhan Loganathan014333d2018-07-02 09:13:49 +0100117 CLTensor src = create_tensor<CLTensor>(shape, DataType::U8, 1);
118 CLTensor dst = create_tensor<CLTensor>(shape, DataType::U16, 1);
Giorgio Arena04a8f8c2017-11-23 11:45:24 +0000119
120 // Create and Configure function
121 CLDepthConvertLayer depth_convert;
122 depth_convert.configure(&src, &dst, policy, shift);
123
124 // Validate valid region
125 const ValidRegion valid_region = shape_to_valid_region(shape);
126 validate(dst.info()->valid_region(), valid_region);
127
128 // Validate padding
129 const PaddingSize padding = PaddingCalculator(shape.x(), 16).required_padding();
130 validate(src.info()->padding(), padding);
131 validate(dst.info()->padding(), padding);
132}
133
134FIXTURE_DATA_TEST_CASE(RunSmall, CLDepthConvertLayerToU16Fixture<uint8_t>, framework::DatasetMode::PRECOMMIT, combine(combine(combine(datasets::SmallShapes(), DepthConvertLayerU8toU16Dataset),
135 framework::dataset::make("ConvertPolicy", { ConvertPolicy::SATURATE, ConvertPolicy::WRAP })),
Michalis Spyrou80943252019-01-10 17:19:50 +0000136 DepthConvertLayerShiftDatasetPrecommit))
Giorgio Arena04a8f8c2017-11-23 11:45:24 +0000137{
138 // Validate output
139 validate(CLAccessor(_target), _reference);
140}
141
142FIXTURE_DATA_TEST_CASE(RunLarge, CLDepthConvertLayerToU16Fixture<uint8_t>, framework::DatasetMode::NIGHTLY, combine(combine(combine(datasets::LargeShapes(), DepthConvertLayerU8toU16Dataset),
143 framework::dataset::make("ConvertPolicy", { ConvertPolicy::SATURATE, ConvertPolicy::WRAP })),
Michalis Spyrou80943252019-01-10 17:19:50 +0000144 DepthConvertLayerShiftDatasetNightly))
Giorgio Arena04a8f8c2017-11-23 11:45:24 +0000145{
146 // Validate output
147 validate(CLAccessor(_target), _reference);
148}
Michalis Spyrou80943252019-01-10 17:19:50 +0000149TEST_SUITE_END() // U8_to_U16
Giorgio Arena04a8f8c2017-11-23 11:45:24 +0000150
151TEST_SUITE(U8_to_S16)
Michalis Spyrou80943252019-01-10 17:19:50 +0000152DATA_TEST_CASE(Configuration, framework::DatasetMode::ALL, combine(combine(datasets::SmallShapes(), framework::dataset::make("ConvertPolicy", { ConvertPolicy::SATURATE, ConvertPolicy::WRAP })),
153 DepthConvertLayerShiftDatasetNightly),
Giorgio Arena04a8f8c2017-11-23 11:45:24 +0000154 shape, policy, shift)
155{
Giorgio Arena04a8f8c2017-11-23 11:45:24 +0000156 // Create tensors
Vidhya Sudhan Loganathan014333d2018-07-02 09:13:49 +0100157 CLTensor src = create_tensor<CLTensor>(shape, DataType::U8, 1);
158 CLTensor dst = create_tensor<CLTensor>(shape, DataType::S16, 1);
Giorgio Arena04a8f8c2017-11-23 11:45:24 +0000159
160 // Create and Configure function
161 CLDepthConvertLayer depth_convert;
162 depth_convert.configure(&src, &dst, policy, shift);
163
164 // Validate valid region
165 const ValidRegion valid_region = shape_to_valid_region(shape);
166 validate(dst.info()->valid_region(), valid_region);
167
168 // Validate padding
169 const PaddingSize padding = PaddingCalculator(shape.x(), 16).required_padding();
170 validate(src.info()->padding(), padding);
171 validate(dst.info()->padding(), padding);
172}
173
174FIXTURE_DATA_TEST_CASE(RunSmall, CLDepthConvertLayerToS16Fixture<uint8_t>, framework::DatasetMode::PRECOMMIT, combine(combine(combine(datasets::SmallShapes(), DepthConvertLayerU8toS16Dataset),
175 framework::dataset::make("ConvertPolicy", { ConvertPolicy::SATURATE, ConvertPolicy::WRAP })),
Michalis Spyrou80943252019-01-10 17:19:50 +0000176 DepthConvertLayerShiftDatasetPrecommit))
Giorgio Arena04a8f8c2017-11-23 11:45:24 +0000177{
178 // Validate output
179 validate(CLAccessor(_target), _reference);
180}
181
182FIXTURE_DATA_TEST_CASE(RunLarge, CLDepthConvertLayerToS16Fixture<uint8_t>, framework::DatasetMode::NIGHTLY, combine(combine(combine(datasets::LargeShapes(), DepthConvertLayerU8toS16Dataset),
183 framework::dataset::make("ConvertPolicy", { ConvertPolicy::SATURATE, ConvertPolicy::WRAP })),
Michalis Spyrou80943252019-01-10 17:19:50 +0000184 DepthConvertLayerShiftDatasetNightly))
Giorgio Arena04a8f8c2017-11-23 11:45:24 +0000185{
186 // Validate output
187 validate(CLAccessor(_target), _reference);
188}
Michalis Spyrou80943252019-01-10 17:19:50 +0000189TEST_SUITE_END() // U8_to_S16
Giorgio Arena04a8f8c2017-11-23 11:45:24 +0000190TEST_SUITE(U8_to_S32)
Michalis Spyrou80943252019-01-10 17:19:50 +0000191DATA_TEST_CASE(Configuration, framework::DatasetMode::ALL, combine(combine(datasets::SmallShapes(), framework::dataset::make("ConvertPolicy", { ConvertPolicy::SATURATE, ConvertPolicy::WRAP })),
192 DepthConvertLayerShiftDatasetNightly),
Giorgio Arena04a8f8c2017-11-23 11:45:24 +0000193 shape, policy, shift)
194{
Giorgio Arena04a8f8c2017-11-23 11:45:24 +0000195 // Create tensors
Vidhya Sudhan Loganathan014333d2018-07-02 09:13:49 +0100196 CLTensor src = create_tensor<CLTensor>(shape, DataType::U8, 1);
197 CLTensor dst = create_tensor<CLTensor>(shape, DataType::S32, 1);
Giorgio Arena04a8f8c2017-11-23 11:45:24 +0000198
199 // Create and Configure function
200 CLDepthConvertLayer depth_convert;
201 depth_convert.configure(&src, &dst, policy, shift);
202
203 // Validate valid region
204 const ValidRegion valid_region = shape_to_valid_region(shape);
205 validate(dst.info()->valid_region(), valid_region);
206
207 // Validate padding
208 const PaddingSize padding = PaddingCalculator(shape.x(), 16).required_padding();
209 validate(src.info()->padding(), padding);
210 validate(dst.info()->padding(), padding);
211}
212
213FIXTURE_DATA_TEST_CASE(RunSmall, CLDepthConvertLayerToS32Fixture<uint8_t>, framework::DatasetMode::PRECOMMIT, combine(combine(combine(datasets::SmallShapes(), DepthConvertLayerU8toS32Dataset),
214 framework::dataset::make("ConvertPolicy", { ConvertPolicy::SATURATE, ConvertPolicy::WRAP })),
Michalis Spyrou80943252019-01-10 17:19:50 +0000215 DepthConvertLayerShiftDatasetPrecommit))
Giorgio Arena04a8f8c2017-11-23 11:45:24 +0000216{
217 // Validate output
218 validate(CLAccessor(_target), _reference);
219}
220
221FIXTURE_DATA_TEST_CASE(RunLarge, CLDepthConvertLayerToS32Fixture<uint8_t>, framework::DatasetMode::NIGHTLY, combine(combine(combine(datasets::LargeShapes(), DepthConvertLayerU8toS32Dataset),
222 framework::dataset::make("ConvertPolicy", { ConvertPolicy::SATURATE, ConvertPolicy::WRAP })),
Michalis Spyrou80943252019-01-10 17:19:50 +0000223 DepthConvertLayerShiftDatasetNightly))
Giorgio Arena04a8f8c2017-11-23 11:45:24 +0000224{
225 // Validate output
226 validate(CLAccessor(_target), _reference);
227}
Michalis Spyrou80943252019-01-10 17:19:50 +0000228TEST_SUITE_END() // U8_to_S32
Giorgio Arena04a8f8c2017-11-23 11:45:24 +0000229
230TEST_SUITE(U16_to_U8)
Michalis Spyrou80943252019-01-10 17:19:50 +0000231DATA_TEST_CASE(Configuration, framework::DatasetMode::ALL, combine(combine(datasets::SmallShapes(), framework::dataset::make("ConvertPolicy", { ConvertPolicy::SATURATE, ConvertPolicy::WRAP })),
232 DepthConvertLayerShiftDatasetNightly),
Giorgio Arena04a8f8c2017-11-23 11:45:24 +0000233 shape, policy, shift)
234{
Giorgio Arena04a8f8c2017-11-23 11:45:24 +0000235 // Create tensors
Vidhya Sudhan Loganathan014333d2018-07-02 09:13:49 +0100236 CLTensor src = create_tensor<CLTensor>(shape, DataType::U16, 1);
237 CLTensor dst = create_tensor<CLTensor>(shape, DataType::U8, 1);
Giorgio Arena04a8f8c2017-11-23 11:45:24 +0000238
239 // Create and Configure function
240 CLDepthConvertLayer depth_convert;
241 depth_convert.configure(&src, &dst, policy, shift);
242
243 // Validate valid region
244 const ValidRegion valid_region = shape_to_valid_region(shape);
245 validate(dst.info()->valid_region(), valid_region);
246
247 // Validate padding
248 const PaddingSize padding = PaddingCalculator(shape.x(), 16).required_padding();
249 validate(src.info()->padding(), padding);
250 validate(dst.info()->padding(), padding);
251}
252
253FIXTURE_DATA_TEST_CASE(RunSmall, CLDepthConvertLayerToU8Fixture<uint16_t>, framework::DatasetMode::PRECOMMIT, combine(combine(combine(datasets::SmallShapes(), DepthConvertLayerU16toU8Dataset),
254 framework::dataset::make("ConvertPolicy", { ConvertPolicy::SATURATE, ConvertPolicy::WRAP })),
Michalis Spyrou80943252019-01-10 17:19:50 +0000255 DepthConvertLayerShiftDatasetPrecommit))
Giorgio Arena04a8f8c2017-11-23 11:45:24 +0000256{
257 // Validate output
258 validate(CLAccessor(_target), _reference);
259}
260FIXTURE_DATA_TEST_CASE(RunLarge, CLDepthConvertLayerToU8Fixture<uint16_t>, framework::DatasetMode::NIGHTLY, combine(combine(combine(datasets::LargeShapes(), DepthConvertLayerU16toU8Dataset),
261 framework::dataset::make("ConvertPolicy", { ConvertPolicy::SATURATE, ConvertPolicy::WRAP })),
Michalis Spyrou80943252019-01-10 17:19:50 +0000262 DepthConvertLayerShiftDatasetNightly))
Giorgio Arena04a8f8c2017-11-23 11:45:24 +0000263{
264 // Validate output
265 validate(CLAccessor(_target), _reference);
266}
Michalis Spyrou80943252019-01-10 17:19:50 +0000267TEST_SUITE_END() // U16_to_U8
Giorgio Arena04a8f8c2017-11-23 11:45:24 +0000268
269TEST_SUITE(U16_to_U32)
Michalis Spyrou80943252019-01-10 17:19:50 +0000270DATA_TEST_CASE(Configuration, framework::DatasetMode::ALL, combine(combine(datasets::SmallShapes(), framework::dataset::make("ConvertPolicy", { ConvertPolicy::SATURATE, ConvertPolicy::WRAP })),
271 DepthConvertLayerShiftDatasetNightly),
Giorgio Arena04a8f8c2017-11-23 11:45:24 +0000272 shape, policy, shift)
273{
Giorgio Arena04a8f8c2017-11-23 11:45:24 +0000274 // Create tensors
Vidhya Sudhan Loganathan014333d2018-07-02 09:13:49 +0100275 CLTensor src = create_tensor<CLTensor>(shape, DataType::U16, 1);
276 CLTensor dst = create_tensor<CLTensor>(shape, DataType::U32, 1);
Giorgio Arena04a8f8c2017-11-23 11:45:24 +0000277
278 // Create and Configure function
279 CLDepthConvertLayer depth_convert;
280 depth_convert.configure(&src, &dst, policy, shift);
281
282 // Validate valid region
283 const ValidRegion valid_region = shape_to_valid_region(shape);
284 validate(dst.info()->valid_region(), valid_region);
285
286 // Validate padding
287 const PaddingSize padding = PaddingCalculator(shape.x(), 16).required_padding();
288 validate(src.info()->padding(), padding);
289 validate(dst.info()->padding(), padding);
290}
291
292FIXTURE_DATA_TEST_CASE(RunSmall, CLDepthConvertLayerToU32Fixture<uint16_t>, framework::DatasetMode::PRECOMMIT, combine(combine(combine(datasets::SmallShapes(), DepthConvertLayerU16toU32Dataset),
293 framework::dataset::make("ConvertPolicy", { ConvertPolicy::SATURATE, ConvertPolicy::WRAP })),
Michalis Spyrou80943252019-01-10 17:19:50 +0000294 DepthConvertLayerShiftDatasetPrecommit))
Giorgio Arena04a8f8c2017-11-23 11:45:24 +0000295{
296 // Validate output
297 validate(CLAccessor(_target), _reference);
298}
299FIXTURE_DATA_TEST_CASE(RunLarge, CLDepthConvertLayerToU32Fixture<uint16_t>, framework::DatasetMode::NIGHTLY, combine(combine(combine(datasets::LargeShapes(), DepthConvertLayerU16toU32Dataset),
300 framework::dataset::make("ConvertPolicy", { ConvertPolicy::SATURATE, ConvertPolicy::WRAP })),
Michalis Spyrou80943252019-01-10 17:19:50 +0000301 DepthConvertLayerShiftDatasetNightly))
Giorgio Arena04a8f8c2017-11-23 11:45:24 +0000302{
303 // Validate output
304 validate(CLAccessor(_target), _reference);
305}
Michalis Spyrou80943252019-01-10 17:19:50 +0000306TEST_SUITE_END() // U16_to_U32
Giorgio Arena04a8f8c2017-11-23 11:45:24 +0000307
308TEST_SUITE(S16_to_U8)
Michalis Spyrou80943252019-01-10 17:19:50 +0000309DATA_TEST_CASE(Configuration, framework::DatasetMode::ALL, combine(combine(datasets::SmallShapes(), framework::dataset::make("ConvertPolicy", { ConvertPolicy::SATURATE, ConvertPolicy::WRAP })),
310 DepthConvertLayerShiftDatasetNightly),
Giorgio Arena04a8f8c2017-11-23 11:45:24 +0000311 shape, policy, shift)
312{
Giorgio Arena04a8f8c2017-11-23 11:45:24 +0000313 // Create tensors
Vidhya Sudhan Loganathan014333d2018-07-02 09:13:49 +0100314 CLTensor src = create_tensor<CLTensor>(shape, DataType::S16, 1);
315 CLTensor dst = create_tensor<CLTensor>(shape, DataType::U8, 1);
Giorgio Arena04a8f8c2017-11-23 11:45:24 +0000316
317 // Create and Configure function
318 CLDepthConvertLayer depth_convert;
319 depth_convert.configure(&src, &dst, policy, shift);
320
321 // Validate valid region
322 const ValidRegion valid_region = shape_to_valid_region(shape);
323 validate(dst.info()->valid_region(), valid_region);
324
325 // Validate padding
326 const PaddingSize padding = PaddingCalculator(shape.x(), 16).required_padding();
327 validate(src.info()->padding(), padding);
328 validate(dst.info()->padding(), padding);
329}
330
331FIXTURE_DATA_TEST_CASE(RunSmall, CLDepthConvertLayerToU8Fixture<int16_t>, framework::DatasetMode::PRECOMMIT, combine(combine(combine(datasets::SmallShapes(), DepthConvertLayerS16toU8Dataset),
332 framework::dataset::make("ConvertPolicy", { ConvertPolicy::SATURATE, ConvertPolicy::WRAP })),
Michalis Spyrou80943252019-01-10 17:19:50 +0000333 DepthConvertLayerShiftDatasetPrecommit))
Giorgio Arena04a8f8c2017-11-23 11:45:24 +0000334{
335 // Validate output
336 validate(CLAccessor(_target), _reference);
337}
338FIXTURE_DATA_TEST_CASE(RunLarge, CLDepthConvertLayerToU8Fixture<int16_t>, framework::DatasetMode::NIGHTLY, combine(combine(combine(datasets::LargeShapes(), DepthConvertLayerS16toU8Dataset),
339 framework::dataset::make("ConvertPolicy", { ConvertPolicy::SATURATE, ConvertPolicy::WRAP })),
Michalis Spyrou80943252019-01-10 17:19:50 +0000340 DepthConvertLayerShiftDatasetNightly))
Giorgio Arena04a8f8c2017-11-23 11:45:24 +0000341{
342 // Validate output
343 validate(CLAccessor(_target), _reference);
344}
Michalis Spyrou80943252019-01-10 17:19:50 +0000345TEST_SUITE_END() // S16_to_U8
Giorgio Arena04a8f8c2017-11-23 11:45:24 +0000346
347TEST_SUITE(S16_to_S32)
Michalis Spyrou80943252019-01-10 17:19:50 +0000348DATA_TEST_CASE(Configuration, framework::DatasetMode::ALL, combine(combine(datasets::SmallShapes(), framework::dataset::make("ConvertPolicy", { ConvertPolicy::SATURATE, ConvertPolicy::WRAP })),
349 DepthConvertLayerShiftDatasetNightly),
Giorgio Arena04a8f8c2017-11-23 11:45:24 +0000350 shape, policy, shift)
351{
Giorgio Arena04a8f8c2017-11-23 11:45:24 +0000352 // Create tensors
Vidhya Sudhan Loganathan014333d2018-07-02 09:13:49 +0100353 CLTensor src = create_tensor<CLTensor>(shape, DataType::S16, 1);
354 CLTensor dst = create_tensor<CLTensor>(shape, DataType::S32, 1);
Giorgio Arena04a8f8c2017-11-23 11:45:24 +0000355
356 // Create and Configure function
357 CLDepthConvertLayer depth_convert;
358 depth_convert.configure(&src, &dst, policy, shift);
359
360 // Validate valid region
361 const ValidRegion valid_region = shape_to_valid_region(shape);
362 validate(dst.info()->valid_region(), valid_region);
363
364 // Validate padding
365 const PaddingSize padding = PaddingCalculator(shape.x(), 16).required_padding();
366 validate(src.info()->padding(), padding);
367 validate(dst.info()->padding(), padding);
368}
369
370FIXTURE_DATA_TEST_CASE(RunSmall, CLDepthConvertLayerToS32Fixture<int16_t>, framework::DatasetMode::PRECOMMIT, combine(combine(combine(datasets::SmallShapes(), DepthConvertLayerS16toS32Dataset),
371 framework::dataset::make("ConvertPolicy", { ConvertPolicy::SATURATE, ConvertPolicy::WRAP })),
Michalis Spyrou80943252019-01-10 17:19:50 +0000372 DepthConvertLayerShiftDatasetPrecommit))
Giorgio Arena04a8f8c2017-11-23 11:45:24 +0000373{
374 // Validate output
375 validate(CLAccessor(_target), _reference);
376}
377FIXTURE_DATA_TEST_CASE(RunLarge, CLDepthConvertLayerToS32Fixture<int16_t>, framework::DatasetMode::NIGHTLY, combine(combine(combine(datasets::LargeShapes(), DepthConvertLayerS16toS32Dataset),
378 framework::dataset::make("ConvertPolicy", { ConvertPolicy::SATURATE, ConvertPolicy::WRAP })),
Michalis Spyrou80943252019-01-10 17:19:50 +0000379 DepthConvertLayerShiftDatasetNightly))
Giorgio Arena04a8f8c2017-11-23 11:45:24 +0000380{
381 // Validate output
382 validate(CLAccessor(_target), _reference);
383}
Michalis Spyrou80943252019-01-10 17:19:50 +0000384TEST_SUITE_END() // S16_to_S32
Giorgio Arena04a8f8c2017-11-23 11:45:24 +0000385
Michalis Spyrou80943252019-01-10 17:19:50 +0000386TEST_SUITE_END() // DepthConvertLayer
387TEST_SUITE_END() // CL
Giorgio Arena04a8f8c2017-11-23 11:45:24 +0000388} // namespace validation
389} // namespace test
390} // namespace arm_compute