blob: 8f14337b27b3d8f83978d9b620f040e61ce0e82c [file] [log] [blame]
Giorgio Arena04a8f8c2017-11-23 11:45:24 +00001/*
Georgios Pinitas11d84152021-04-28 10:20:18 +01002 * Copyright (c) 2017-2021 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 **/
Georgios Pinitas11d84152021-04-28 10:20:18 +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 DepthConvertLayerZeroShiftDataset = framework::dataset::make("Shift", 0);
Giorgio Arena04a8f8c2017-11-23 11:45:24 +000057} // namespace
58
59TEST_SUITE(CL)
60TEST_SUITE(DepthConvertLayer)
Michalis Spyrou80943252019-01-10 17:19:50 +000061
62// *INDENT-OFF*
63// clang-format off
64DATA_TEST_CASE(Validate, framework::DatasetMode::ALL, zip(zip(zip(zip(
65 framework::dataset::make("InputInfo", { TensorInfo(TensorShape(32U, 13U, 2U), 1, DataType::QASYMM8), // Invalid data type combination
66 TensorInfo(TensorShape(32U, 13U, 2U), 1, DataType::U8), // Invalid data type combination
67 TensorInfo(TensorShape(32U, 13U, 2U), 1, DataType::U8), // Mismatching shapes
68 TensorInfo(TensorShape(27U, 13U, 2U), 1, DataType::U8), // Invalid shift
69 TensorInfo(TensorShape(27U, 13U, 2U), 1, DataType::F32), // Shift non zero and FP
70 TensorInfo(TensorShape(32U, 32U, 2U), 1, DataType::U8), // Valid
71 }),
72 framework::dataset::make("OutputInfo",{ TensorInfo(TensorShape(32U, 13U, 2U), 1, DataType::S16),
73 TensorInfo(TensorShape(32U, 13U, 2U), 1, DataType::U8),
74 TensorInfo(TensorShape(32U, 13U, 2U), 1, DataType::U8),
75 TensorInfo(TensorShape(32U, 13U, 2U), 1, DataType::U8),
76 TensorInfo(TensorShape(27U, 13U, 2U), 1, DataType::F16),
77 TensorInfo(TensorShape(32U, 32U, 2U), 1, DataType::U16),
78 })),
79 framework::dataset::make("Policy",{ ConvertPolicy::WRAP,
80 ConvertPolicy::WRAP,
81 ConvertPolicy::WRAP,
82 ConvertPolicy::WRAP,
83 ConvertPolicy::WRAP,
84 ConvertPolicy::WRAP,
85 })),
Georgios Pinitas11d84152021-04-28 10:20:18 +010086 framework::dataset::make("Shift",{ 0, 0, 0, 1, 1, 0, })),
Michalis Spyrou80943252019-01-10 17:19:50 +000087 framework::dataset::make("Expected", { false, false, false, false, false, true})),
88 input_info, output_info, policy, shift, expected)
89{
90 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);
91}
92// clang-format on
93// *INDENT-ON*
94
Giorgio Arena04a8f8c2017-11-23 11:45:24 +000095template <typename T>
96using CLDepthConvertLayerToU16Fixture = DepthConvertLayerValidationFixture<CLTensor, CLAccessor, CLDepthConvertLayer, T, uint16_t>;
97template <typename T>
98using CLDepthConvertLayerToS16Fixture = DepthConvertLayerValidationFixture<CLTensor, CLAccessor, CLDepthConvertLayer, T, int16_t>;
99template <typename T>
100using CLDepthConvertLayerToS32Fixture = DepthConvertLayerValidationFixture<CLTensor, CLAccessor, CLDepthConvertLayer, T, int32_t>;
101template <typename T>
102using CLDepthConvertLayerToU8Fixture = DepthConvertLayerValidationFixture<CLTensor, CLAccessor, CLDepthConvertLayer, T, uint8_t>;
103template <typename T>
104using CLDepthConvertLayerToU32Fixture = DepthConvertLayerValidationFixture<CLTensor, CLAccessor, CLDepthConvertLayer, T, uint32_t>;
Michele Di Giorgio6b4e6042018-08-02 12:02:48 +0100105template <typename T>
106using CLDepthConvertLayerToF16Fixture = DepthConvertLayerValidationFixture<CLTensor, CLAccessor, CLDepthConvertLayer, T, half>;
107template <typename T>
108using CLDepthConvertLayerToF32Fixture = DepthConvertLayerValidationFixture<CLTensor, CLAccessor, CLDepthConvertLayer, T, float>;
Giorgio Arena04a8f8c2017-11-23 11:45:24 +0000109
110TEST_SUITE(U8_to_U16)
Giorgio Arena04a8f8c2017-11-23 11:45:24 +0000111FIXTURE_DATA_TEST_CASE(RunSmall, CLDepthConvertLayerToU16Fixture<uint8_t>, framework::DatasetMode::PRECOMMIT, combine(combine(combine(datasets::SmallShapes(), DepthConvertLayerU8toU16Dataset),
112 framework::dataset::make("ConvertPolicy", { ConvertPolicy::SATURATE, ConvertPolicy::WRAP })),
Georgios Pinitas11d84152021-04-28 10:20:18 +0100113 DepthConvertLayerZeroShiftDataset))
Giorgio Arena04a8f8c2017-11-23 11:45:24 +0000114{
115 // Validate output
116 validate(CLAccessor(_target), _reference);
117}
118
119FIXTURE_DATA_TEST_CASE(RunLarge, CLDepthConvertLayerToU16Fixture<uint8_t>, framework::DatasetMode::NIGHTLY, combine(combine(combine(datasets::LargeShapes(), DepthConvertLayerU8toU16Dataset),
120 framework::dataset::make("ConvertPolicy", { ConvertPolicy::SATURATE, ConvertPolicy::WRAP })),
Georgios Pinitas11d84152021-04-28 10:20:18 +0100121 DepthConvertLayerZeroShiftDataset))
Giorgio Arena04a8f8c2017-11-23 11:45:24 +0000122{
123 // Validate output
124 validate(CLAccessor(_target), _reference);
125}
Michalis Spyrou80943252019-01-10 17:19:50 +0000126TEST_SUITE_END() // U8_to_U16
Giorgio Arena04a8f8c2017-11-23 11:45:24 +0000127
128TEST_SUITE(U8_to_S16)
Giorgio Arena04a8f8c2017-11-23 11:45:24 +0000129FIXTURE_DATA_TEST_CASE(RunSmall, CLDepthConvertLayerToS16Fixture<uint8_t>, framework::DatasetMode::PRECOMMIT, combine(combine(combine(datasets::SmallShapes(), DepthConvertLayerU8toS16Dataset),
130 framework::dataset::make("ConvertPolicy", { ConvertPolicy::SATURATE, ConvertPolicy::WRAP })),
Georgios Pinitas11d84152021-04-28 10:20:18 +0100131 DepthConvertLayerZeroShiftDataset))
Giorgio Arena04a8f8c2017-11-23 11:45:24 +0000132{
133 // Validate output
134 validate(CLAccessor(_target), _reference);
135}
136
137FIXTURE_DATA_TEST_CASE(RunLarge, CLDepthConvertLayerToS16Fixture<uint8_t>, framework::DatasetMode::NIGHTLY, combine(combine(combine(datasets::LargeShapes(), DepthConvertLayerU8toS16Dataset),
138 framework::dataset::make("ConvertPolicy", { ConvertPolicy::SATURATE, ConvertPolicy::WRAP })),
Georgios Pinitas11d84152021-04-28 10:20:18 +0100139 DepthConvertLayerZeroShiftDataset))
Giorgio Arena04a8f8c2017-11-23 11:45:24 +0000140{
141 // Validate output
142 validate(CLAccessor(_target), _reference);
143}
Michalis Spyrou80943252019-01-10 17:19:50 +0000144TEST_SUITE_END() // U8_to_S16
Giorgio Arena04a8f8c2017-11-23 11:45:24 +0000145TEST_SUITE(U8_to_S32)
Giorgio Arena04a8f8c2017-11-23 11:45:24 +0000146FIXTURE_DATA_TEST_CASE(RunSmall, CLDepthConvertLayerToS32Fixture<uint8_t>, framework::DatasetMode::PRECOMMIT, combine(combine(combine(datasets::SmallShapes(), DepthConvertLayerU8toS32Dataset),
147 framework::dataset::make("ConvertPolicy", { ConvertPolicy::SATURATE, ConvertPolicy::WRAP })),
Georgios Pinitas11d84152021-04-28 10:20:18 +0100148 DepthConvertLayerZeroShiftDataset))
Giorgio Arena04a8f8c2017-11-23 11:45:24 +0000149{
150 // Validate output
151 validate(CLAccessor(_target), _reference);
152}
153
154FIXTURE_DATA_TEST_CASE(RunLarge, CLDepthConvertLayerToS32Fixture<uint8_t>, framework::DatasetMode::NIGHTLY, combine(combine(combine(datasets::LargeShapes(), DepthConvertLayerU8toS32Dataset),
155 framework::dataset::make("ConvertPolicy", { ConvertPolicy::SATURATE, ConvertPolicy::WRAP })),
Georgios Pinitas11d84152021-04-28 10:20:18 +0100156 DepthConvertLayerZeroShiftDataset))
Giorgio Arena04a8f8c2017-11-23 11:45:24 +0000157{
158 // Validate output
159 validate(CLAccessor(_target), _reference);
160}
Michalis Spyrou80943252019-01-10 17:19:50 +0000161TEST_SUITE_END() // U8_to_S32
Giorgio Arena04a8f8c2017-11-23 11:45:24 +0000162
163TEST_SUITE(U16_to_U8)
Giorgio Arena04a8f8c2017-11-23 11:45:24 +0000164FIXTURE_DATA_TEST_CASE(RunSmall, CLDepthConvertLayerToU8Fixture<uint16_t>, framework::DatasetMode::PRECOMMIT, combine(combine(combine(datasets::SmallShapes(), DepthConvertLayerU16toU8Dataset),
165 framework::dataset::make("ConvertPolicy", { ConvertPolicy::SATURATE, ConvertPolicy::WRAP })),
Georgios Pinitas11d84152021-04-28 10:20:18 +0100166 DepthConvertLayerZeroShiftDataset))
Giorgio Arena04a8f8c2017-11-23 11:45:24 +0000167{
168 // Validate output
169 validate(CLAccessor(_target), _reference);
170}
171FIXTURE_DATA_TEST_CASE(RunLarge, CLDepthConvertLayerToU8Fixture<uint16_t>, framework::DatasetMode::NIGHTLY, combine(combine(combine(datasets::LargeShapes(), DepthConvertLayerU16toU8Dataset),
172 framework::dataset::make("ConvertPolicy", { ConvertPolicy::SATURATE, ConvertPolicy::WRAP })),
Georgios Pinitas11d84152021-04-28 10:20:18 +0100173 DepthConvertLayerZeroShiftDataset))
Giorgio Arena04a8f8c2017-11-23 11:45:24 +0000174{
175 // Validate output
176 validate(CLAccessor(_target), _reference);
177}
Michalis Spyrou80943252019-01-10 17:19:50 +0000178TEST_SUITE_END() // U16_to_U8
Giorgio Arena04a8f8c2017-11-23 11:45:24 +0000179
180TEST_SUITE(U16_to_U32)
Giorgio Arena04a8f8c2017-11-23 11:45:24 +0000181FIXTURE_DATA_TEST_CASE(RunSmall, CLDepthConvertLayerToU32Fixture<uint16_t>, framework::DatasetMode::PRECOMMIT, combine(combine(combine(datasets::SmallShapes(), DepthConvertLayerU16toU32Dataset),
182 framework::dataset::make("ConvertPolicy", { ConvertPolicy::SATURATE, ConvertPolicy::WRAP })),
Georgios Pinitas11d84152021-04-28 10:20:18 +0100183 DepthConvertLayerZeroShiftDataset))
Giorgio Arena04a8f8c2017-11-23 11:45:24 +0000184{
185 // Validate output
186 validate(CLAccessor(_target), _reference);
187}
188FIXTURE_DATA_TEST_CASE(RunLarge, CLDepthConvertLayerToU32Fixture<uint16_t>, framework::DatasetMode::NIGHTLY, combine(combine(combine(datasets::LargeShapes(), DepthConvertLayerU16toU32Dataset),
189 framework::dataset::make("ConvertPolicy", { ConvertPolicy::SATURATE, ConvertPolicy::WRAP })),
Georgios Pinitas11d84152021-04-28 10:20:18 +0100190 DepthConvertLayerZeroShiftDataset))
Giorgio Arena04a8f8c2017-11-23 11:45:24 +0000191{
192 // Validate output
193 validate(CLAccessor(_target), _reference);
194}
Michalis Spyrou80943252019-01-10 17:19:50 +0000195TEST_SUITE_END() // U16_to_U32
Giorgio Arena04a8f8c2017-11-23 11:45:24 +0000196
197TEST_SUITE(S16_to_U8)
Giorgio Arena04a8f8c2017-11-23 11:45:24 +0000198FIXTURE_DATA_TEST_CASE(RunSmall, CLDepthConvertLayerToU8Fixture<int16_t>, framework::DatasetMode::PRECOMMIT, combine(combine(combine(datasets::SmallShapes(), DepthConvertLayerS16toU8Dataset),
199 framework::dataset::make("ConvertPolicy", { ConvertPolicy::SATURATE, ConvertPolicy::WRAP })),
Georgios Pinitas11d84152021-04-28 10:20:18 +0100200 DepthConvertLayerZeroShiftDataset))
Giorgio Arena04a8f8c2017-11-23 11:45:24 +0000201{
202 // Validate output
203 validate(CLAccessor(_target), _reference);
204}
205FIXTURE_DATA_TEST_CASE(RunLarge, CLDepthConvertLayerToU8Fixture<int16_t>, framework::DatasetMode::NIGHTLY, combine(combine(combine(datasets::LargeShapes(), DepthConvertLayerS16toU8Dataset),
206 framework::dataset::make("ConvertPolicy", { ConvertPolicy::SATURATE, ConvertPolicy::WRAP })),
Georgios Pinitas11d84152021-04-28 10:20:18 +0100207 DepthConvertLayerZeroShiftDataset))
Giorgio Arena04a8f8c2017-11-23 11:45:24 +0000208{
209 // Validate output
210 validate(CLAccessor(_target), _reference);
211}
Michalis Spyrou80943252019-01-10 17:19:50 +0000212TEST_SUITE_END() // S16_to_U8
Giorgio Arena04a8f8c2017-11-23 11:45:24 +0000213
214TEST_SUITE(S16_to_S32)
Giorgio Arena04a8f8c2017-11-23 11:45:24 +0000215FIXTURE_DATA_TEST_CASE(RunSmall, CLDepthConvertLayerToS32Fixture<int16_t>, framework::DatasetMode::PRECOMMIT, combine(combine(combine(datasets::SmallShapes(), DepthConvertLayerS16toS32Dataset),
216 framework::dataset::make("ConvertPolicy", { ConvertPolicy::SATURATE, ConvertPolicy::WRAP })),
Georgios Pinitas11d84152021-04-28 10:20:18 +0100217 DepthConvertLayerZeroShiftDataset))
Giorgio Arena04a8f8c2017-11-23 11:45:24 +0000218{
219 // Validate output
220 validate(CLAccessor(_target), _reference);
221}
222FIXTURE_DATA_TEST_CASE(RunLarge, CLDepthConvertLayerToS32Fixture<int16_t>, framework::DatasetMode::NIGHTLY, combine(combine(combine(datasets::LargeShapes(), DepthConvertLayerS16toS32Dataset),
223 framework::dataset::make("ConvertPolicy", { ConvertPolicy::SATURATE, ConvertPolicy::WRAP })),
Georgios Pinitas11d84152021-04-28 10:20:18 +0100224 DepthConvertLayerZeroShiftDataset))
Giorgio Arena04a8f8c2017-11-23 11:45:24 +0000225{
226 // Validate output
227 validate(CLAccessor(_target), _reference);
228}
Michalis Spyrou80943252019-01-10 17:19:50 +0000229TEST_SUITE_END() // S16_to_S32
Giorgio Arena04a8f8c2017-11-23 11:45:24 +0000230
Michalis Spyrou80943252019-01-10 17:19:50 +0000231TEST_SUITE_END() // DepthConvertLayer
232TEST_SUITE_END() // CL
Giorgio Arena04a8f8c2017-11-23 11:45:24 +0000233} // namespace validation
234} // namespace test
235} // namespace arm_compute