blob: a823b278fcb03b2172e4d0f0685c6a5eda71a177 [file] [log] [blame]
Giorgio Arena04a8f8c2017-11-23 11:45:24 +00001/*
Michalis Spyroud175ece2020-07-30 23:39:32 +01002 * Copyright (c) 2017-2020 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)
Giorgio Arena04a8f8c2017-11-23 11:45:24 +0000112FIXTURE_DATA_TEST_CASE(RunSmall, CLDepthConvertLayerToU16Fixture<uint8_t>, framework::DatasetMode::PRECOMMIT, combine(combine(combine(datasets::SmallShapes(), DepthConvertLayerU8toU16Dataset),
113 framework::dataset::make("ConvertPolicy", { ConvertPolicy::SATURATE, ConvertPolicy::WRAP })),
Michalis Spyrou80943252019-01-10 17:19:50 +0000114 DepthConvertLayerShiftDatasetPrecommit))
Giorgio Arena04a8f8c2017-11-23 11:45:24 +0000115{
116 // Validate output
117 validate(CLAccessor(_target), _reference);
118}
119
120FIXTURE_DATA_TEST_CASE(RunLarge, CLDepthConvertLayerToU16Fixture<uint8_t>, framework::DatasetMode::NIGHTLY, combine(combine(combine(datasets::LargeShapes(), DepthConvertLayerU8toU16Dataset),
121 framework::dataset::make("ConvertPolicy", { ConvertPolicy::SATURATE, ConvertPolicy::WRAP })),
Michalis Spyrou80943252019-01-10 17:19:50 +0000122 DepthConvertLayerShiftDatasetNightly))
Giorgio Arena04a8f8c2017-11-23 11:45:24 +0000123{
124 // Validate output
125 validate(CLAccessor(_target), _reference);
126}
Michalis Spyrou80943252019-01-10 17:19:50 +0000127TEST_SUITE_END() // U8_to_U16
Giorgio Arena04a8f8c2017-11-23 11:45:24 +0000128
129TEST_SUITE(U8_to_S16)
Giorgio Arena04a8f8c2017-11-23 11:45:24 +0000130FIXTURE_DATA_TEST_CASE(RunSmall, CLDepthConvertLayerToS16Fixture<uint8_t>, framework::DatasetMode::PRECOMMIT, combine(combine(combine(datasets::SmallShapes(), DepthConvertLayerU8toS16Dataset),
131 framework::dataset::make("ConvertPolicy", { ConvertPolicy::SATURATE, ConvertPolicy::WRAP })),
Michalis Spyrou80943252019-01-10 17:19:50 +0000132 DepthConvertLayerShiftDatasetPrecommit))
Giorgio Arena04a8f8c2017-11-23 11:45:24 +0000133{
134 // Validate output
135 validate(CLAccessor(_target), _reference);
136}
137
138FIXTURE_DATA_TEST_CASE(RunLarge, CLDepthConvertLayerToS16Fixture<uint8_t>, framework::DatasetMode::NIGHTLY, combine(combine(combine(datasets::LargeShapes(), DepthConvertLayerU8toS16Dataset),
139 framework::dataset::make("ConvertPolicy", { ConvertPolicy::SATURATE, ConvertPolicy::WRAP })),
Michalis Spyrou80943252019-01-10 17:19:50 +0000140 DepthConvertLayerShiftDatasetNightly))
Giorgio Arena04a8f8c2017-11-23 11:45:24 +0000141{
142 // Validate output
143 validate(CLAccessor(_target), _reference);
144}
Michalis Spyrou80943252019-01-10 17:19:50 +0000145TEST_SUITE_END() // U8_to_S16
Giorgio Arena04a8f8c2017-11-23 11:45:24 +0000146TEST_SUITE(U8_to_S32)
Giorgio Arena04a8f8c2017-11-23 11:45:24 +0000147FIXTURE_DATA_TEST_CASE(RunSmall, CLDepthConvertLayerToS32Fixture<uint8_t>, framework::DatasetMode::PRECOMMIT, combine(combine(combine(datasets::SmallShapes(), DepthConvertLayerU8toS32Dataset),
148 framework::dataset::make("ConvertPolicy", { ConvertPolicy::SATURATE, ConvertPolicy::WRAP })),
Michalis Spyrou80943252019-01-10 17:19:50 +0000149 DepthConvertLayerShiftDatasetPrecommit))
Giorgio Arena04a8f8c2017-11-23 11:45:24 +0000150{
151 // Validate output
152 validate(CLAccessor(_target), _reference);
153}
154
155FIXTURE_DATA_TEST_CASE(RunLarge, CLDepthConvertLayerToS32Fixture<uint8_t>, framework::DatasetMode::NIGHTLY, combine(combine(combine(datasets::LargeShapes(), DepthConvertLayerU8toS32Dataset),
156 framework::dataset::make("ConvertPolicy", { ConvertPolicy::SATURATE, ConvertPolicy::WRAP })),
Michalis Spyrou80943252019-01-10 17:19:50 +0000157 DepthConvertLayerShiftDatasetNightly))
Giorgio Arena04a8f8c2017-11-23 11:45:24 +0000158{
159 // Validate output
160 validate(CLAccessor(_target), _reference);
161}
Michalis Spyrou80943252019-01-10 17:19:50 +0000162TEST_SUITE_END() // U8_to_S32
Giorgio Arena04a8f8c2017-11-23 11:45:24 +0000163
164TEST_SUITE(U16_to_U8)
Giorgio Arena04a8f8c2017-11-23 11:45:24 +0000165FIXTURE_DATA_TEST_CASE(RunSmall, CLDepthConvertLayerToU8Fixture<uint16_t>, framework::DatasetMode::PRECOMMIT, combine(combine(combine(datasets::SmallShapes(), DepthConvertLayerU16toU8Dataset),
166 framework::dataset::make("ConvertPolicy", { ConvertPolicy::SATURATE, ConvertPolicy::WRAP })),
Michalis Spyrou80943252019-01-10 17:19:50 +0000167 DepthConvertLayerShiftDatasetPrecommit))
Giorgio Arena04a8f8c2017-11-23 11:45:24 +0000168{
169 // Validate output
170 validate(CLAccessor(_target), _reference);
171}
172FIXTURE_DATA_TEST_CASE(RunLarge, CLDepthConvertLayerToU8Fixture<uint16_t>, framework::DatasetMode::NIGHTLY, combine(combine(combine(datasets::LargeShapes(), DepthConvertLayerU16toU8Dataset),
173 framework::dataset::make("ConvertPolicy", { ConvertPolicy::SATURATE, ConvertPolicy::WRAP })),
Michalis Spyrou80943252019-01-10 17:19:50 +0000174 DepthConvertLayerShiftDatasetNightly))
Giorgio Arena04a8f8c2017-11-23 11:45:24 +0000175{
176 // Validate output
177 validate(CLAccessor(_target), _reference);
178}
Michalis Spyrou80943252019-01-10 17:19:50 +0000179TEST_SUITE_END() // U16_to_U8
Giorgio Arena04a8f8c2017-11-23 11:45:24 +0000180
181TEST_SUITE(U16_to_U32)
Giorgio Arena04a8f8c2017-11-23 11:45:24 +0000182FIXTURE_DATA_TEST_CASE(RunSmall, CLDepthConvertLayerToU32Fixture<uint16_t>, framework::DatasetMode::PRECOMMIT, combine(combine(combine(datasets::SmallShapes(), DepthConvertLayerU16toU32Dataset),
183 framework::dataset::make("ConvertPolicy", { ConvertPolicy::SATURATE, ConvertPolicy::WRAP })),
Michalis Spyrou80943252019-01-10 17:19:50 +0000184 DepthConvertLayerShiftDatasetPrecommit))
Giorgio Arena04a8f8c2017-11-23 11:45:24 +0000185{
186 // Validate output
187 validate(CLAccessor(_target), _reference);
188}
189FIXTURE_DATA_TEST_CASE(RunLarge, CLDepthConvertLayerToU32Fixture<uint16_t>, framework::DatasetMode::NIGHTLY, combine(combine(combine(datasets::LargeShapes(), DepthConvertLayerU16toU32Dataset),
190 framework::dataset::make("ConvertPolicy", { ConvertPolicy::SATURATE, ConvertPolicy::WRAP })),
Michalis Spyrou80943252019-01-10 17:19:50 +0000191 DepthConvertLayerShiftDatasetNightly))
Giorgio Arena04a8f8c2017-11-23 11:45:24 +0000192{
193 // Validate output
194 validate(CLAccessor(_target), _reference);
195}
Michalis Spyrou80943252019-01-10 17:19:50 +0000196TEST_SUITE_END() // U16_to_U32
Giorgio Arena04a8f8c2017-11-23 11:45:24 +0000197
198TEST_SUITE(S16_to_U8)
Giorgio Arena04a8f8c2017-11-23 11:45:24 +0000199FIXTURE_DATA_TEST_CASE(RunSmall, CLDepthConvertLayerToU8Fixture<int16_t>, framework::DatasetMode::PRECOMMIT, combine(combine(combine(datasets::SmallShapes(), DepthConvertLayerS16toU8Dataset),
200 framework::dataset::make("ConvertPolicy", { ConvertPolicy::SATURATE, ConvertPolicy::WRAP })),
Michalis Spyrou80943252019-01-10 17:19:50 +0000201 DepthConvertLayerShiftDatasetPrecommit))
Giorgio Arena04a8f8c2017-11-23 11:45:24 +0000202{
203 // Validate output
204 validate(CLAccessor(_target), _reference);
205}
206FIXTURE_DATA_TEST_CASE(RunLarge, CLDepthConvertLayerToU8Fixture<int16_t>, framework::DatasetMode::NIGHTLY, combine(combine(combine(datasets::LargeShapes(), DepthConvertLayerS16toU8Dataset),
207 framework::dataset::make("ConvertPolicy", { ConvertPolicy::SATURATE, ConvertPolicy::WRAP })),
Michalis Spyrou80943252019-01-10 17:19:50 +0000208 DepthConvertLayerShiftDatasetNightly))
Giorgio Arena04a8f8c2017-11-23 11:45:24 +0000209{
210 // Validate output
211 validate(CLAccessor(_target), _reference);
212}
Michalis Spyrou80943252019-01-10 17:19:50 +0000213TEST_SUITE_END() // S16_to_U8
Giorgio Arena04a8f8c2017-11-23 11:45:24 +0000214
215TEST_SUITE(S16_to_S32)
Giorgio Arena04a8f8c2017-11-23 11:45:24 +0000216FIXTURE_DATA_TEST_CASE(RunSmall, CLDepthConvertLayerToS32Fixture<int16_t>, framework::DatasetMode::PRECOMMIT, combine(combine(combine(datasets::SmallShapes(), DepthConvertLayerS16toS32Dataset),
217 framework::dataset::make("ConvertPolicy", { ConvertPolicy::SATURATE, ConvertPolicy::WRAP })),
Michalis Spyrou80943252019-01-10 17:19:50 +0000218 DepthConvertLayerShiftDatasetPrecommit))
Giorgio Arena04a8f8c2017-11-23 11:45:24 +0000219{
220 // Validate output
221 validate(CLAccessor(_target), _reference);
222}
223FIXTURE_DATA_TEST_CASE(RunLarge, CLDepthConvertLayerToS32Fixture<int16_t>, framework::DatasetMode::NIGHTLY, combine(combine(combine(datasets::LargeShapes(), DepthConvertLayerS16toS32Dataset),
224 framework::dataset::make("ConvertPolicy", { ConvertPolicy::SATURATE, ConvertPolicy::WRAP })),
Michalis Spyrou80943252019-01-10 17:19:50 +0000225 DepthConvertLayerShiftDatasetNightly))
Giorgio Arena04a8f8c2017-11-23 11:45:24 +0000226{
227 // Validate output
228 validate(CLAccessor(_target), _reference);
229}
Michalis Spyrou80943252019-01-10 17:19:50 +0000230TEST_SUITE_END() // S16_to_S32
Giorgio Arena04a8f8c2017-11-23 11:45:24 +0000231
Michalis Spyrou80943252019-01-10 17:19:50 +0000232TEST_SUITE_END() // DepthConvertLayer
233TEST_SUITE_END() // CL
Giorgio Arena04a8f8c2017-11-23 11:45:24 +0000234} // namespace validation
235} // namespace test
236} // namespace arm_compute