blob: c77b075fcf3ec63b1f61409ad0cb97b891e92931 [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 **/
Michele Di Giorgio6b4e6042018-08-02 12:02:48 +010047const 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 DepthConvertLayerShiftDataset = framework::dataset::make("Shift", 0, 7);
Giorgio Arena04a8f8c2017-11-23 11:45:24 +000057} // namespace
58
59TEST_SUITE(CL)
60TEST_SUITE(DepthConvertLayer)
61template <typename T>
62using CLDepthConvertLayerToU16Fixture = DepthConvertLayerValidationFixture<CLTensor, CLAccessor, CLDepthConvertLayer, T, uint16_t>;
63template <typename T>
64using CLDepthConvertLayerToS16Fixture = DepthConvertLayerValidationFixture<CLTensor, CLAccessor, CLDepthConvertLayer, T, int16_t>;
65template <typename T>
66using CLDepthConvertLayerToS32Fixture = DepthConvertLayerValidationFixture<CLTensor, CLAccessor, CLDepthConvertLayer, T, int32_t>;
67template <typename T>
68using CLDepthConvertLayerToU8Fixture = DepthConvertLayerValidationFixture<CLTensor, CLAccessor, CLDepthConvertLayer, T, uint8_t>;
69template <typename T>
70using CLDepthConvertLayerToU32Fixture = DepthConvertLayerValidationFixture<CLTensor, CLAccessor, CLDepthConvertLayer, T, uint32_t>;
Michele Di Giorgio6b4e6042018-08-02 12:02:48 +010071template <typename T>
72using CLDepthConvertLayerToF16Fixture = DepthConvertLayerValidationFixture<CLTensor, CLAccessor, CLDepthConvertLayer, T, half>;
73template <typename T>
74using CLDepthConvertLayerToF32Fixture = DepthConvertLayerValidationFixture<CLTensor, CLAccessor, CLDepthConvertLayer, T, float>;
Giorgio Arena04a8f8c2017-11-23 11:45:24 +000075
76TEST_SUITE(U8_to_U16)
77DATA_TEST_CASE(Configuration, framework::DatasetMode::ALL, combine(combine(framework::dataset::concat(datasets::SmallShapes(), datasets::LargeShapes()), framework::dataset::make("ConvertPolicy", { ConvertPolicy::SATURATE, ConvertPolicy::WRAP })),
78 DepthConvertLayerShiftDataset),
79 shape, policy, shift)
80{
Giorgio Arena04a8f8c2017-11-23 11:45:24 +000081 // Create tensors
Vidhya Sudhan Loganathan014333d2018-07-02 09:13:49 +010082 CLTensor src = create_tensor<CLTensor>(shape, DataType::U8, 1);
83 CLTensor dst = create_tensor<CLTensor>(shape, DataType::U16, 1);
Giorgio Arena04a8f8c2017-11-23 11:45:24 +000084
85 // Create and Configure function
86 CLDepthConvertLayer depth_convert;
87 depth_convert.configure(&src, &dst, policy, shift);
88
89 // Validate valid region
90 const ValidRegion valid_region = shape_to_valid_region(shape);
91 validate(dst.info()->valid_region(), valid_region);
92
93 // Validate padding
94 const PaddingSize padding = PaddingCalculator(shape.x(), 16).required_padding();
95 validate(src.info()->padding(), padding);
96 validate(dst.info()->padding(), padding);
97}
98
99FIXTURE_DATA_TEST_CASE(RunSmall, CLDepthConvertLayerToU16Fixture<uint8_t>, framework::DatasetMode::PRECOMMIT, combine(combine(combine(datasets::SmallShapes(), DepthConvertLayerU8toU16Dataset),
100 framework::dataset::make("ConvertPolicy", { ConvertPolicy::SATURATE, ConvertPolicy::WRAP })),
101 DepthConvertLayerShiftDataset))
102{
103 // Validate output
104 validate(CLAccessor(_target), _reference);
105}
106
107FIXTURE_DATA_TEST_CASE(RunLarge, CLDepthConvertLayerToU16Fixture<uint8_t>, framework::DatasetMode::NIGHTLY, combine(combine(combine(datasets::LargeShapes(), DepthConvertLayerU8toU16Dataset),
108 framework::dataset::make("ConvertPolicy", { ConvertPolicy::SATURATE, ConvertPolicy::WRAP })),
109 DepthConvertLayerShiftDataset))
110{
111 // Validate output
112 validate(CLAccessor(_target), _reference);
113}
114TEST_SUITE_END()
115
116TEST_SUITE(U8_to_S16)
117DATA_TEST_CASE(Configuration, framework::DatasetMode::ALL, combine(combine(framework::dataset::concat(datasets::SmallShapes(), datasets::LargeShapes()), framework::dataset::make("ConvertPolicy", { ConvertPolicy::SATURATE, ConvertPolicy::WRAP })),
118 DepthConvertLayerShiftDataset),
119 shape, policy, shift)
120{
Giorgio Arena04a8f8c2017-11-23 11:45:24 +0000121 // Create tensors
Vidhya Sudhan Loganathan014333d2018-07-02 09:13:49 +0100122 CLTensor src = create_tensor<CLTensor>(shape, DataType::U8, 1);
123 CLTensor dst = create_tensor<CLTensor>(shape, DataType::S16, 1);
Giorgio Arena04a8f8c2017-11-23 11:45:24 +0000124
125 // Create and Configure function
126 CLDepthConvertLayer depth_convert;
127 depth_convert.configure(&src, &dst, policy, shift);
128
129 // Validate valid region
130 const ValidRegion valid_region = shape_to_valid_region(shape);
131 validate(dst.info()->valid_region(), valid_region);
132
133 // Validate padding
134 const PaddingSize padding = PaddingCalculator(shape.x(), 16).required_padding();
135 validate(src.info()->padding(), padding);
136 validate(dst.info()->padding(), padding);
137}
138
139FIXTURE_DATA_TEST_CASE(RunSmall, CLDepthConvertLayerToS16Fixture<uint8_t>, framework::DatasetMode::PRECOMMIT, combine(combine(combine(datasets::SmallShapes(), DepthConvertLayerU8toS16Dataset),
140 framework::dataset::make("ConvertPolicy", { ConvertPolicy::SATURATE, ConvertPolicy::WRAP })),
141 DepthConvertLayerShiftDataset))
142{
143 // Validate output
144 validate(CLAccessor(_target), _reference);
145}
146
147FIXTURE_DATA_TEST_CASE(RunLarge, CLDepthConvertLayerToS16Fixture<uint8_t>, framework::DatasetMode::NIGHTLY, combine(combine(combine(datasets::LargeShapes(), DepthConvertLayerU8toS16Dataset),
148 framework::dataset::make("ConvertPolicy", { ConvertPolicy::SATURATE, ConvertPolicy::WRAP })),
149 DepthConvertLayerShiftDataset))
150{
151 // Validate output
152 validate(CLAccessor(_target), _reference);
153}
154TEST_SUITE_END()
155TEST_SUITE(U8_to_S32)
156DATA_TEST_CASE(Configuration, framework::DatasetMode::ALL, combine(combine(framework::dataset::concat(datasets::SmallShapes(), datasets::LargeShapes()), framework::dataset::make("ConvertPolicy", { ConvertPolicy::SATURATE, ConvertPolicy::WRAP })),
157 DepthConvertLayerShiftDataset),
158 shape, policy, shift)
159{
Giorgio Arena04a8f8c2017-11-23 11:45:24 +0000160 // Create tensors
Vidhya Sudhan Loganathan014333d2018-07-02 09:13:49 +0100161 CLTensor src = create_tensor<CLTensor>(shape, DataType::U8, 1);
162 CLTensor dst = create_tensor<CLTensor>(shape, DataType::S32, 1);
Giorgio Arena04a8f8c2017-11-23 11:45:24 +0000163
164 // Create and Configure function
165 CLDepthConvertLayer depth_convert;
166 depth_convert.configure(&src, &dst, policy, shift);
167
168 // Validate valid region
169 const ValidRegion valid_region = shape_to_valid_region(shape);
170 validate(dst.info()->valid_region(), valid_region);
171
172 // Validate padding
173 const PaddingSize padding = PaddingCalculator(shape.x(), 16).required_padding();
174 validate(src.info()->padding(), padding);
175 validate(dst.info()->padding(), padding);
176}
177
178FIXTURE_DATA_TEST_CASE(RunSmall, CLDepthConvertLayerToS32Fixture<uint8_t>, framework::DatasetMode::PRECOMMIT, combine(combine(combine(datasets::SmallShapes(), DepthConvertLayerU8toS32Dataset),
179 framework::dataset::make("ConvertPolicy", { ConvertPolicy::SATURATE, ConvertPolicy::WRAP })),
180 DepthConvertLayerShiftDataset))
181{
182 // Validate output
183 validate(CLAccessor(_target), _reference);
184}
185
186FIXTURE_DATA_TEST_CASE(RunLarge, CLDepthConvertLayerToS32Fixture<uint8_t>, framework::DatasetMode::NIGHTLY, combine(combine(combine(datasets::LargeShapes(), DepthConvertLayerU8toS32Dataset),
187 framework::dataset::make("ConvertPolicy", { ConvertPolicy::SATURATE, ConvertPolicy::WRAP })),
188 DepthConvertLayerShiftDataset))
189{
190 // Validate output
191 validate(CLAccessor(_target), _reference);
192}
193TEST_SUITE_END()
194
195TEST_SUITE(U16_to_U8)
196DATA_TEST_CASE(Configuration, framework::DatasetMode::ALL, combine(combine(framework::dataset::concat(datasets::SmallShapes(), datasets::LargeShapes()), framework::dataset::make("ConvertPolicy", { ConvertPolicy::SATURATE, ConvertPolicy::WRAP })),
197 DepthConvertLayerShiftDataset),
198 shape, policy, shift)
199{
Giorgio Arena04a8f8c2017-11-23 11:45:24 +0000200 // Create tensors
Vidhya Sudhan Loganathan014333d2018-07-02 09:13:49 +0100201 CLTensor src = create_tensor<CLTensor>(shape, DataType::U16, 1);
202 CLTensor dst = create_tensor<CLTensor>(shape, DataType::U8, 1);
Giorgio Arena04a8f8c2017-11-23 11:45:24 +0000203
204 // Create and Configure function
205 CLDepthConvertLayer depth_convert;
206 depth_convert.configure(&src, &dst, policy, shift);
207
208 // Validate valid region
209 const ValidRegion valid_region = shape_to_valid_region(shape);
210 validate(dst.info()->valid_region(), valid_region);
211
212 // Validate padding
213 const PaddingSize padding = PaddingCalculator(shape.x(), 16).required_padding();
214 validate(src.info()->padding(), padding);
215 validate(dst.info()->padding(), padding);
216}
217
218FIXTURE_DATA_TEST_CASE(RunSmall, CLDepthConvertLayerToU8Fixture<uint16_t>, framework::DatasetMode::PRECOMMIT, combine(combine(combine(datasets::SmallShapes(), DepthConvertLayerU16toU8Dataset),
219 framework::dataset::make("ConvertPolicy", { ConvertPolicy::SATURATE, ConvertPolicy::WRAP })),
220 DepthConvertLayerShiftDataset))
221{
222 // Validate output
223 validate(CLAccessor(_target), _reference);
224}
225FIXTURE_DATA_TEST_CASE(RunLarge, CLDepthConvertLayerToU8Fixture<uint16_t>, framework::DatasetMode::NIGHTLY, combine(combine(combine(datasets::LargeShapes(), DepthConvertLayerU16toU8Dataset),
226 framework::dataset::make("ConvertPolicy", { ConvertPolicy::SATURATE, ConvertPolicy::WRAP })),
227 DepthConvertLayerShiftDataset))
228{
229 // Validate output
230 validate(CLAccessor(_target), _reference);
231}
232TEST_SUITE_END()
233
234TEST_SUITE(U16_to_U32)
235DATA_TEST_CASE(Configuration, framework::DatasetMode::ALL, combine(combine(framework::dataset::concat(datasets::SmallShapes(), datasets::LargeShapes()), framework::dataset::make("ConvertPolicy", { ConvertPolicy::SATURATE, ConvertPolicy::WRAP })),
236 DepthConvertLayerShiftDataset),
237 shape, policy, shift)
238{
Giorgio Arena04a8f8c2017-11-23 11:45:24 +0000239 // Create tensors
Vidhya Sudhan Loganathan014333d2018-07-02 09:13:49 +0100240 CLTensor src = create_tensor<CLTensor>(shape, DataType::U16, 1);
241 CLTensor dst = create_tensor<CLTensor>(shape, DataType::U32, 1);
Giorgio Arena04a8f8c2017-11-23 11:45:24 +0000242
243 // Create and Configure function
244 CLDepthConvertLayer depth_convert;
245 depth_convert.configure(&src, &dst, policy, shift);
246
247 // Validate valid region
248 const ValidRegion valid_region = shape_to_valid_region(shape);
249 validate(dst.info()->valid_region(), valid_region);
250
251 // Validate padding
252 const PaddingSize padding = PaddingCalculator(shape.x(), 16).required_padding();
253 validate(src.info()->padding(), padding);
254 validate(dst.info()->padding(), padding);
255}
256
257FIXTURE_DATA_TEST_CASE(RunSmall, CLDepthConvertLayerToU32Fixture<uint16_t>, framework::DatasetMode::PRECOMMIT, combine(combine(combine(datasets::SmallShapes(), DepthConvertLayerU16toU32Dataset),
258 framework::dataset::make("ConvertPolicy", { ConvertPolicy::SATURATE, ConvertPolicy::WRAP })),
259 DepthConvertLayerShiftDataset))
260{
261 // Validate output
262 validate(CLAccessor(_target), _reference);
263}
264FIXTURE_DATA_TEST_CASE(RunLarge, CLDepthConvertLayerToU32Fixture<uint16_t>, framework::DatasetMode::NIGHTLY, combine(combine(combine(datasets::LargeShapes(), DepthConvertLayerU16toU32Dataset),
265 framework::dataset::make("ConvertPolicy", { ConvertPolicy::SATURATE, ConvertPolicy::WRAP })),
266 DepthConvertLayerShiftDataset))
267{
268 // Validate output
269 validate(CLAccessor(_target), _reference);
270}
271TEST_SUITE_END()
272
273TEST_SUITE(S16_to_U8)
274DATA_TEST_CASE(Configuration, framework::DatasetMode::ALL, combine(combine(framework::dataset::concat(datasets::SmallShapes(), datasets::LargeShapes()), framework::dataset::make("ConvertPolicy", { ConvertPolicy::SATURATE, ConvertPolicy::WRAP })),
275 DepthConvertLayerShiftDataset),
276 shape, policy, shift)
277{
Giorgio Arena04a8f8c2017-11-23 11:45:24 +0000278 // Create tensors
Vidhya Sudhan Loganathan014333d2018-07-02 09:13:49 +0100279 CLTensor src = create_tensor<CLTensor>(shape, DataType::S16, 1);
280 CLTensor dst = create_tensor<CLTensor>(shape, DataType::U8, 1);
Giorgio Arena04a8f8c2017-11-23 11:45:24 +0000281
282 // Create and Configure function
283 CLDepthConvertLayer depth_convert;
284 depth_convert.configure(&src, &dst, policy, shift);
285
286 // Validate valid region
287 const ValidRegion valid_region = shape_to_valid_region(shape);
288 validate(dst.info()->valid_region(), valid_region);
289
290 // Validate padding
291 const PaddingSize padding = PaddingCalculator(shape.x(), 16).required_padding();
292 validate(src.info()->padding(), padding);
293 validate(dst.info()->padding(), padding);
294}
295
296FIXTURE_DATA_TEST_CASE(RunSmall, CLDepthConvertLayerToU8Fixture<int16_t>, framework::DatasetMode::PRECOMMIT, combine(combine(combine(datasets::SmallShapes(), DepthConvertLayerS16toU8Dataset),
297 framework::dataset::make("ConvertPolicy", { ConvertPolicy::SATURATE, ConvertPolicy::WRAP })),
298 DepthConvertLayerShiftDataset))
299{
300 // Validate output
301 validate(CLAccessor(_target), _reference);
302}
303FIXTURE_DATA_TEST_CASE(RunLarge, CLDepthConvertLayerToU8Fixture<int16_t>, framework::DatasetMode::NIGHTLY, combine(combine(combine(datasets::LargeShapes(), DepthConvertLayerS16toU8Dataset),
304 framework::dataset::make("ConvertPolicy", { ConvertPolicy::SATURATE, ConvertPolicy::WRAP })),
305 DepthConvertLayerShiftDataset))
306{
307 // Validate output
308 validate(CLAccessor(_target), _reference);
309}
310TEST_SUITE_END()
311
312TEST_SUITE(S16_to_S32)
313DATA_TEST_CASE(Configuration, framework::DatasetMode::ALL, combine(combine(framework::dataset::concat(datasets::SmallShapes(), datasets::LargeShapes()), framework::dataset::make("ConvertPolicy", { ConvertPolicy::SATURATE, ConvertPolicy::WRAP })),
314 DepthConvertLayerShiftDataset),
315 shape, policy, shift)
316{
Giorgio Arena04a8f8c2017-11-23 11:45:24 +0000317 // Create tensors
Vidhya Sudhan Loganathan014333d2018-07-02 09:13:49 +0100318 CLTensor src = create_tensor<CLTensor>(shape, DataType::S16, 1);
319 CLTensor dst = create_tensor<CLTensor>(shape, DataType::S32, 1);
Giorgio Arena04a8f8c2017-11-23 11:45:24 +0000320
321 // Create and Configure function
322 CLDepthConvertLayer depth_convert;
323 depth_convert.configure(&src, &dst, policy, shift);
324
325 // Validate valid region
326 const ValidRegion valid_region = shape_to_valid_region(shape);
327 validate(dst.info()->valid_region(), valid_region);
328
329 // Validate padding
330 const PaddingSize padding = PaddingCalculator(shape.x(), 16).required_padding();
331 validate(src.info()->padding(), padding);
332 validate(dst.info()->padding(), padding);
333}
334
335FIXTURE_DATA_TEST_CASE(RunSmall, CLDepthConvertLayerToS32Fixture<int16_t>, framework::DatasetMode::PRECOMMIT, combine(combine(combine(datasets::SmallShapes(), DepthConvertLayerS16toS32Dataset),
336 framework::dataset::make("ConvertPolicy", { ConvertPolicy::SATURATE, ConvertPolicy::WRAP })),
337 DepthConvertLayerShiftDataset))
338{
339 // Validate output
340 validate(CLAccessor(_target), _reference);
341}
342FIXTURE_DATA_TEST_CASE(RunLarge, CLDepthConvertLayerToS32Fixture<int16_t>, framework::DatasetMode::NIGHTLY, combine(combine(combine(datasets::LargeShapes(), DepthConvertLayerS16toS32Dataset),
343 framework::dataset::make("ConvertPolicy", { ConvertPolicy::SATURATE, ConvertPolicy::WRAP })),
344 DepthConvertLayerShiftDataset))
345{
346 // Validate output
347 validate(CLAccessor(_target), _reference);
348}
349TEST_SUITE_END()
350
Giorgio Arena04a8f8c2017-11-23 11:45:24 +0000351TEST_SUITE_END()
352TEST_SUITE_END()
353} // namespace validation
354} // namespace test
355} // namespace arm_compute