blob: 10915acfaa309d78b5de012435af1b165b430638 [file] [log] [blame]
Jakub Sujak8ae57142022-12-02 16:09:06 +00001/*
Viet-Hoa Dofdf56fb2024-01-18 16:10:46 +00002* Copyright (c) 2022-2024 Arm Limited.
Jakub Sujak8ae57142022-12-02 16:09:06 +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,
21 * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
22 * SOFTWARE.
23 */
24
25#include "arm_compute/dynamic_fusion/sketch/gpu/operators/GpuResize.h"
26
27#include "tests/CL/CLAccessor.h"
28#include "tests/datasets/ScaleValidationDataset.h"
29#include "tests/framework/Asserts.h"
30#include "tests/framework/Fixture.h"
31#include "tests/framework/Macros.h"
Jakub Sujak8ae57142022-12-02 16:09:06 +000032#include "tests/validation/fixtures/dynamic_fusion/operators/ResizeFixture.h"
Viet-Hoa Dofdf56fb2024-01-18 16:10:46 +000033#include "tests/validation/Validation.h"
Jakub Sujak8ae57142022-12-02 16:09:06 +000034
35using namespace arm_compute::experimental::dynamic_fusion;
36namespace arm_compute
37{
38namespace test
39{
40namespace validation
41{
42namespace
43{
Viet-Hoa Dofdf56fb2024-01-18 16:10:46 +000044using datasets::ScaleAlignCornersSamplingPolicySet;
Jakub Sujak8ae57142022-12-02 16:09:06 +000045using datasets::ScaleInterpolationPolicySet;
46using datasets::ScaleSamplingPolicySet;
Viet-Hoa Dofdf56fb2024-01-18 16:10:46 +000047using datasets::ScaleShapesBaseDataSet;
Jakub Sujak8ae57142022-12-02 16:09:06 +000048
49/** We consider vector size in byte 16 since the maximum size of
50 * a vector used by @ref CLScaleKernel is currently 16-byte (float4).
51 */
52constexpr uint32_t vector_byte = 16;
53
54template <typename T>
55constexpr uint32_t num_elements_per_vector()
56{
57 return vector_byte / sizeof(T);
58}
59
60/** Quantization information data set */
61const auto QuantizationInfoSet = framework::dataset::make("QuantizationInfo",
Viet-Hoa Dofdf56fb2024-01-18 16:10:46 +000062 {
63 QuantizationInfo(0.5f, -1),
64 });
Jakub Sujak8ae57142022-12-02 16:09:06 +000065
66/** Tolerance */
67constexpr AbsoluteTolerance<uint8_t> tolerance_q8(1);
68constexpr AbsoluteTolerance<int8_t> tolerance_qs8(1);
69constexpr AbsoluteTolerance<int16_t> tolerance_s16(1);
70constexpr float tolerance_f32_absolute(0.001f);
71
72RelativeTolerance<float> tolerance_f32(0.05);
73constexpr float abs_tolerance_f16(0.1f);
74RelativeTolerance<half> tolerance_f16(half(0.1));
75
76constexpr float tolerance_num_f32(0.01f);
77
78} // namespace
79
80TEST_SUITE(CL)
81TEST_SUITE(DYNAMIC_FUSION)
82TEST_SUITE(RESIZE)
83
84TEST_SUITE(Validate)
85
Viet-Hoa Dofdf56fb2024-01-18 16:10:46 +000086const auto default_input_shape = TensorShape{2, 3, 3, 2};
87const auto default_output_shape = TensorShape{4, 6, 3, 2};
Jakub Sujak8ae57142022-12-02 16:09:06 +000088
Gunes Bayircc287732023-01-19 15:56:00 +000089constexpr auto default_data_type = DataType::U8;
90constexpr auto default_data_layout = DataLayout::NHWC;
Jakub Sujak8ae57142022-12-02 16:09:06 +000091
92TEST_CASE(NullPtr, framework::DatasetMode::ALL)
93{
Viet-Hoa Dofdf56fb2024-01-18 16:10:46 +000094 const TensorInfo input_info = TensorInfo{default_input_shape, 1, default_data_type, default_data_layout};
95 const TensorInfo output_info = TensorInfo{default_output_shape, 1, default_data_type, default_data_layout};
Jakub Sujak8ae57142022-12-02 16:09:06 +000096
97 CLCompileContext cl_compile_ctx = CLKernelLibrary::get().get_compile_context();
Viet-Hoa Dofdf56fb2024-01-18 16:10:46 +000098 GpuWorkloadContext context = GpuWorkloadContext{&cl_compile_ctx};
99 GpuWorkloadSketch sketch{&context};
Jakub Sujak8ae57142022-12-02 16:09:06 +0000100
101 // nullptr is given as input
Gunes Bayircc287732023-01-19 15:56:00 +0000102 Status status = GpuResize::validate_op(sketch, nullptr, ResizeAttributes());
Jakub Sujak8ae57142022-12-02 16:09:06 +0000103 ARM_COMPUTE_EXPECT(bool(status) == false, framework::LogLevel::ERRORS);
104}
105
106TEST_CASE(SupportDataType, framework::DatasetMode::ALL)
107{
Viet-Hoa Dofdf56fb2024-01-18 16:10:46 +0000108 const std::map<DataType, bool> supported_data_types = {
109 {DataType::U8, true},
110 {DataType::S8, false},
111 {DataType::QSYMM8, false},
112 {DataType::QASYMM8, true},
113 {DataType::QASYMM8_SIGNED, true},
114 {DataType::QSYMM8_PER_CHANNEL, false},
115 {DataType::U16, false},
116 {DataType::S16, true},
117 {DataType::QSYMM16, false},
118 {DataType::QASYMM16, false},
119 {DataType::U32, false},
120 {DataType::S32, false},
121 {DataType::U64, false},
122 {DataType::S64, false},
123 {DataType::BFLOAT16, false},
124 {DataType::F16, true},
125 {DataType::F32, true},
126 {DataType::F64, false},
127 {DataType::SIZET, false},
Jakub Sujak8ae57142022-12-02 16:09:06 +0000128 };
129
Viet-Hoa Dofdf56fb2024-01-18 16:10:46 +0000130 for (auto &kv : supported_data_types)
Jakub Sujak8ae57142022-12-02 16:09:06 +0000131 {
Viet-Hoa Dofdf56fb2024-01-18 16:10:46 +0000132 const TensorInfo input_info = TensorInfo{default_input_shape, 1, kv.first, default_data_layout};
Jakub Sujak8ae57142022-12-02 16:09:06 +0000133
134 CLCompileContext cl_compile_ctx = CLKernelLibrary::get().get_compile_context();
Viet-Hoa Dofdf56fb2024-01-18 16:10:46 +0000135 GpuWorkloadContext context = GpuWorkloadContext{&cl_compile_ctx};
136 GpuWorkloadSketch sketch{&context};
Jakub Sujak8ae57142022-12-02 16:09:06 +0000137
Viet-Hoa Dofdf56fb2024-01-18 16:10:46 +0000138 const ITensorInfo *sketch_input_info = context.create_tensor_info(input_info);
Jakub Sujak8ae57142022-12-02 16:09:06 +0000139
Gunes Bayircc287732023-01-19 15:56:00 +0000140 ResizeAttributes attributes;
141 attributes.output_width(default_output_shape[0]); // shape is not important unless it's empty
142 attributes.output_height(default_output_shape[1]);
143
Viet-Hoa Dofdf56fb2024-01-18 16:10:46 +0000144 Status status = GpuResize::validate_op(sketch, sketch_input_info, attributes);
Jakub Sujak8ae57142022-12-02 16:09:06 +0000145 ARM_COMPUTE_EXPECT(bool(status) == kv.second, framework::LogLevel::ERRORS);
146 }
147}
148
149TEST_CASE(MismatchingDataType, framework::DatasetMode::ALL)
150{
151 constexpr DataType non_default_data_type = DataType::F32;
152
Viet-Hoa Dofdf56fb2024-01-18 16:10:46 +0000153 const TensorInfo input_info = TensorInfo{default_input_shape, 1, default_data_type, default_data_layout};
154 const TensorInfo output_info = TensorInfo{default_output_shape, 1, non_default_data_type, default_data_layout};
Jakub Sujak8ae57142022-12-02 16:09:06 +0000155
156 CLCompileContext cl_compile_ctx = CLKernelLibrary::get().get_compile_context();
Viet-Hoa Dofdf56fb2024-01-18 16:10:46 +0000157 GpuWorkloadContext context = GpuWorkloadContext{&cl_compile_ctx};
158 GpuWorkloadSketch sketch{&context};
Jakub Sujak8ae57142022-12-02 16:09:06 +0000159
Viet-Hoa Dofdf56fb2024-01-18 16:10:46 +0000160 const ITensorInfo *sketch_input_info = context.create_tensor_info(input_info);
Jakub Sujak8ae57142022-12-02 16:09:06 +0000161
Viet-Hoa Dofdf56fb2024-01-18 16:10:46 +0000162 Status status = GpuResize::validate_op(sketch, sketch_input_info, ResizeAttributes());
Jakub Sujak8ae57142022-12-02 16:09:06 +0000163 ARM_COMPUTE_EXPECT(bool(status) == false, framework::LogLevel::ERRORS);
164}
165
166TEST_CASE(AlignedCornerNotSupported, framework::DatasetMode::ALL)
167{
168 // Aligned corners require sampling policy to be TOP_LEFT.
169 constexpr InterpolationPolicy interpolation_policy = InterpolationPolicy::BILINEAR;
170 constexpr bool align_corners = true;
171 constexpr SamplingPolicy sampling_policy = SamplingPolicy::CENTER;
172
Viet-Hoa Dofdf56fb2024-01-18 16:10:46 +0000173 const TensorInfo input_info = TensorInfo{default_input_shape, 1, default_data_type, default_data_layout};
174 const TensorInfo output_info = TensorInfo{default_output_shape, 1, default_data_type, default_data_layout};
Jakub Sujak8ae57142022-12-02 16:09:06 +0000175
176 CLCompileContext cl_compile_ctx = CLKernelLibrary::get().get_compile_context();
Viet-Hoa Dofdf56fb2024-01-18 16:10:46 +0000177 GpuWorkloadContext context = GpuWorkloadContext{&cl_compile_ctx};
178 GpuWorkloadSketch sketch{&context};
Jakub Sujak8ae57142022-12-02 16:09:06 +0000179
Viet-Hoa Dofdf56fb2024-01-18 16:10:46 +0000180 const ITensorInfo *sketch_input_info = context.create_tensor_info(input_info);
Jakub Sujak8ae57142022-12-02 16:09:06 +0000181
182 ResizeAttributes attributes{};
Viet-Hoa Dofdf56fb2024-01-18 16:10:46 +0000183 attributes.interpolation_policy(interpolation_policy).sampling_policy(sampling_policy).align_corners(align_corners);
Jakub Sujak8ae57142022-12-02 16:09:06 +0000184
Viet-Hoa Dofdf56fb2024-01-18 16:10:46 +0000185 Status status = GpuResize::validate_op(sketch, sketch_input_info, attributes);
Jakub Sujak8ae57142022-12-02 16:09:06 +0000186 ARM_COMPUTE_EXPECT(bool(status) == false, framework::LogLevel::ERRORS);
187}
188
189TEST_CASE(UnsupportedInterpolationPolicy, framework::DatasetMode::ALL)
190{
Viet-Hoa Dofdf56fb2024-01-18 16:10:46 +0000191 const TensorInfo input_info = TensorInfo{TensorShape(28U, 33U, 2U), 1, DataType::F32, default_data_layout};
192 const TensorInfo output_info = TensorInfo{TensorShape(26U, 21U, 2U), 1, DataType::F32, default_data_layout};
Jakub Sujak8ae57142022-12-02 16:09:06 +0000193 constexpr auto interpolation_policy = InterpolationPolicy::AREA;
194
195 CLCompileContext cl_compile_ctx = CLKernelLibrary::get().get_compile_context();
Viet-Hoa Dofdf56fb2024-01-18 16:10:46 +0000196 GpuWorkloadContext context = GpuWorkloadContext{&cl_compile_ctx};
197 GpuWorkloadSketch sketch{&context};
Jakub Sujak8ae57142022-12-02 16:09:06 +0000198
Viet-Hoa Dofdf56fb2024-01-18 16:10:46 +0000199 const ITensorInfo *sketch_input_info = context.create_tensor_info(input_info);
Jakub Sujak8ae57142022-12-02 16:09:06 +0000200
201 ResizeAttributes attributes{};
202 attributes.interpolation_policy(interpolation_policy);
203
Viet-Hoa Dofdf56fb2024-01-18 16:10:46 +0000204 Status status = GpuResize::validate_op(sketch, sketch_input_info, attributes);
Jakub Sujak8ae57142022-12-02 16:09:06 +0000205 ARM_COMPUTE_EXPECT(bool(status) == false, framework::LogLevel::ERRORS);
206}
207
208TEST_CASE(UnsupportedLayout, framework::DatasetMode::ALL)
209{
Viet-Hoa Dofdf56fb2024-01-18 16:10:46 +0000210 const TensorInfo input_info = TensorInfo{default_input_shape, 1, default_data_type, DataLayout::NCHW};
211 const TensorInfo output_info = TensorInfo{default_output_shape, 1, default_data_type, DataLayout::NCHW};
Jakub Sujak8ae57142022-12-02 16:09:06 +0000212 constexpr auto interpolation_policy = InterpolationPolicy::BILINEAR;
213
214 CLCompileContext cl_compile_ctx = CLKernelLibrary::get().get_compile_context();
Viet-Hoa Dofdf56fb2024-01-18 16:10:46 +0000215 GpuWorkloadContext context = GpuWorkloadContext{&cl_compile_ctx};
216 GpuWorkloadSketch sketch{&context};
Jakub Sujak8ae57142022-12-02 16:09:06 +0000217
Viet-Hoa Dofdf56fb2024-01-18 16:10:46 +0000218 const ITensorInfo *sketch_input_info = context.create_tensor_info(input_info);
Jakub Sujak8ae57142022-12-02 16:09:06 +0000219
220 ResizeAttributes attributes{};
221 attributes.interpolation_policy(interpolation_policy);
222
Viet-Hoa Dofdf56fb2024-01-18 16:10:46 +0000223 Status status = GpuResize::validate_op(sketch, sketch_input_info, attributes);
Jakub Sujak8ae57142022-12-02 16:09:06 +0000224 ARM_COMPUTE_EXPECT(bool(status) == false, framework::LogLevel::ERRORS);
225}
226
227TEST_SUITE_END() // Validate
228
229template <typename T>
230using DynamicFusionResizeFixture = DynamicFusionResizeValidationFixture<CLTensor, CLAccessor, GpuResize, T>;
231
232TEST_SUITE(Float)
233TEST_SUITE(FP32)
234
Viet-Hoa Dofdf56fb2024-01-18 16:10:46 +0000235const auto f32_shape = combine((SCALE_PRECOMMIT_SHAPE_DATASET(num_elements_per_vector<float>())),
236 framework::dataset::make("DataType", DataType::F32));
Jakub Sujak8ae57142022-12-02 16:09:06 +0000237
Viet-Hoa Dofdf56fb2024-01-18 16:10:46 +0000238FIXTURE_DATA_TEST_CASE(Run,
239 DynamicFusionResizeFixture<float>,
240 framework::DatasetMode::ALL,
241 ASSEMBLE_DATASET_DYNAMIC_FUSION(f32_shape, ScaleSamplingPolicySet))
Jakub Sujak8ae57142022-12-02 16:09:06 +0000242{
243 //Create valid region
244 TensorInfo src_info(_shape, 1, _data_type);
Viet-Hoa Dofdf56fb2024-01-18 16:10:46 +0000245 const ValidRegion valid_region =
246 calculate_valid_region_scale(src_info, _reference.shape(), _interpolation_policy, _sampling_policy, false);
Jakub Sujak8ae57142022-12-02 16:09:06 +0000247
248 // Validate output
249 validate(CLAccessor(_target), _reference, valid_region, tolerance_f32, tolerance_num_f32, tolerance_f32_absolute);
250}
251
Viet-Hoa Dofdf56fb2024-01-18 16:10:46 +0000252FIXTURE_DATA_TEST_CASE(RunAlignCorners,
253 DynamicFusionResizeFixture<float>,
254 framework::DatasetMode::ALL,
255 ASSEMBLE_DATASET_DYNAMIC_FUSION(f32_shape, ScaleAlignCornersSamplingPolicySet))
Jakub Sujak8ae57142022-12-02 16:09:06 +0000256{
257 //Create valid region
258 TensorInfo src_info(_shape, 1, _data_type);
Viet-Hoa Dofdf56fb2024-01-18 16:10:46 +0000259 const ValidRegion valid_region =
260 calculate_valid_region_scale(src_info, _reference.shape(), _interpolation_policy, _sampling_policy, false);
Jakub Sujak8ae57142022-12-02 16:09:06 +0000261
262 // Validate output
263 validate(CLAccessor(_target), _reference, valid_region, tolerance_f32, tolerance_num_f32, tolerance_f32_absolute);
264}
Viet-Hoa Dofdf56fb2024-01-18 16:10:46 +0000265const auto f32_nightly_shape = combine((SCALE_NIGHTLY_SHAPE_DATASET(num_elements_per_vector<float>())),
266 framework::dataset::make("DataType", DataType::F32));
267FIXTURE_DATA_TEST_CASE(RunNightly,
268 DynamicFusionResizeFixture<float>,
269 framework::DatasetMode::NIGHTLY,
270 ASSEMBLE_DATASET_DYNAMIC_FUSION(f32_nightly_shape, ScaleSamplingPolicySet))
Jakub Sujak8ae57142022-12-02 16:09:06 +0000271{
272 //Create valid region
273 TensorInfo src_info(_shape, 1, _data_type);
Viet-Hoa Dofdf56fb2024-01-18 16:10:46 +0000274 const ValidRegion valid_region =
275 calculate_valid_region_scale(src_info, _reference.shape(), _interpolation_policy, _sampling_policy, false);
Jakub Sujak8ae57142022-12-02 16:09:06 +0000276
277 // Validate output
278 validate(CLAccessor(_target), _reference, valid_region, tolerance_f32, tolerance_num_f32, tolerance_f32_absolute);
279}
Viet-Hoa Dofdf56fb2024-01-18 16:10:46 +0000280FIXTURE_DATA_TEST_CASE(RunNightlyAlignCorners,
281 DynamicFusionResizeFixture<float>,
282 framework::DatasetMode::NIGHTLY,
283 ASSEMBLE_DATASET_DYNAMIC_FUSION(f32_nightly_shape, ScaleAlignCornersSamplingPolicySet))
Jakub Sujak8ae57142022-12-02 16:09:06 +0000284{
285 //Create valid region
286 TensorInfo src_info(_shape, 1, _data_type);
Viet-Hoa Dofdf56fb2024-01-18 16:10:46 +0000287 const ValidRegion valid_region =
288 calculate_valid_region_scale(src_info, _reference.shape(), _interpolation_policy, _sampling_policy, false);
Jakub Sujak8ae57142022-12-02 16:09:06 +0000289
290 // Validate output
291 validate(CLAccessor(_target), _reference, valid_region, tolerance_f32, tolerance_num_f32, tolerance_f32_absolute);
292}
293TEST_SUITE_END() // FP32
294
295TEST_SUITE(FP16)
Viet-Hoa Dofdf56fb2024-01-18 16:10:46 +0000296const auto f16_shape = combine((SCALE_PRECOMMIT_SHAPE_DATASET(num_elements_per_vector<half>())),
297 framework::dataset::make("DataType", DataType::F16));
298FIXTURE_DATA_TEST_CASE(Run,
299 DynamicFusionResizeFixture<half>,
300 framework::DatasetMode::ALL,
301 ASSEMBLE_DATASET_DYNAMIC_FUSION(f16_shape, ScaleSamplingPolicySet))
Jakub Sujak8ae57142022-12-02 16:09:06 +0000302{
303 //Create valid region
304 TensorInfo src_info(_shape, 1, _data_type);
Viet-Hoa Dofdf56fb2024-01-18 16:10:46 +0000305 const ValidRegion valid_region =
306 calculate_valid_region_scale(src_info, _reference.shape(), _interpolation_policy, _sampling_policy, false);
Jakub Sujak8ae57142022-12-02 16:09:06 +0000307
308 // Validate output
309 validate(CLAccessor(_target), _reference, valid_region, tolerance_f16, 0.0f, abs_tolerance_f16);
310}
Viet-Hoa Dofdf56fb2024-01-18 16:10:46 +0000311FIXTURE_DATA_TEST_CASE(RunAlignCorners,
312 DynamicFusionResizeFixture<half>,
313 framework::DatasetMode::ALL,
314 ASSEMBLE_DATASET_DYNAMIC_FUSION(f16_shape, ScaleAlignCornersSamplingPolicySet))
Jakub Sujak8ae57142022-12-02 16:09:06 +0000315{
316 //Create valid region
317 TensorInfo src_info(_shape, 1, _data_type);
Viet-Hoa Dofdf56fb2024-01-18 16:10:46 +0000318 const ValidRegion valid_region =
319 calculate_valid_region_scale(src_info, _reference.shape(), _interpolation_policy, _sampling_policy, false);
Jakub Sujak8ae57142022-12-02 16:09:06 +0000320
321 // Validate output
322 validate(CLAccessor(_target), _reference, valid_region, tolerance_f16, 0.0f, abs_tolerance_f16);
323}
Viet-Hoa Dofdf56fb2024-01-18 16:10:46 +0000324const auto f16_nightly_shape = combine((SCALE_NIGHTLY_SHAPE_DATASET(num_elements_per_vector<half>())),
325 framework::dataset::make("DataType", DataType::F16));
326FIXTURE_DATA_TEST_CASE(RunNightly,
327 DynamicFusionResizeFixture<half>,
328 framework::DatasetMode::NIGHTLY,
329 ASSEMBLE_DATASET_DYNAMIC_FUSION(f16_nightly_shape, ScaleSamplingPolicySet))
Jakub Sujak8ae57142022-12-02 16:09:06 +0000330{
331 //Create valid region
332 TensorInfo src_info(_shape, 1, _data_type);
Viet-Hoa Dofdf56fb2024-01-18 16:10:46 +0000333 const ValidRegion valid_region =
334 calculate_valid_region_scale(src_info, _reference.shape(), _interpolation_policy, _sampling_policy, false);
Jakub Sujak8ae57142022-12-02 16:09:06 +0000335
336 // Validate output
337 validate(CLAccessor(_target), _reference, valid_region, tolerance_f16, 0.0f, abs_tolerance_f16);
338}
Viet-Hoa Dofdf56fb2024-01-18 16:10:46 +0000339FIXTURE_DATA_TEST_CASE(RunNightlyAlignCorners,
340 DynamicFusionResizeFixture<half>,
341 framework::DatasetMode::NIGHTLY,
342 ASSEMBLE_DATASET_DYNAMIC_FUSION(f16_nightly_shape, ScaleAlignCornersSamplingPolicySet))
Jakub Sujak8ae57142022-12-02 16:09:06 +0000343{
344 //Create valid region
345 TensorInfo src_info(_shape, 1, _data_type);
Viet-Hoa Dofdf56fb2024-01-18 16:10:46 +0000346 const ValidRegion valid_region =
347 calculate_valid_region_scale(src_info, _reference.shape(), _interpolation_policy, _sampling_policy, false);
Jakub Sujak8ae57142022-12-02 16:09:06 +0000348
349 // Validate output
350 validate(CLAccessor(_target), _reference, valid_region, tolerance_f16, 0.0f, abs_tolerance_f16);
351}
352TEST_SUITE_END() // FP16
353TEST_SUITE_END() // Float
354
355TEST_SUITE(Integer)
356TEST_SUITE(U8)
Viet-Hoa Dofdf56fb2024-01-18 16:10:46 +0000357const auto u8_shape = combine((SCALE_PRECOMMIT_SHAPE_DATASET(num_elements_per_vector<uint8_t>())),
358 framework::dataset::make("DataType", DataType::U8));
359FIXTURE_DATA_TEST_CASE(Run,
360 DynamicFusionResizeFixture<uint8_t>,
361 framework::DatasetMode::ALL,
362 ASSEMBLE_DATASET_DYNAMIC_FUSION(u8_shape, ScaleSamplingPolicySet))
Jakub Sujak8ae57142022-12-02 16:09:06 +0000363{
364 //Create valid region
365 TensorInfo src_info(_shape, 1, _data_type);
Viet-Hoa Dofdf56fb2024-01-18 16:10:46 +0000366 const ValidRegion valid_region =
367 calculate_valid_region_scale(src_info, _reference.shape(), _interpolation_policy, _sampling_policy, false);
Jakub Sujak8ae57142022-12-02 16:09:06 +0000368
369 // Validate output
370 validate(CLAccessor(_target), _reference, valid_region, tolerance_q8);
371}
Viet-Hoa Dofdf56fb2024-01-18 16:10:46 +0000372FIXTURE_DATA_TEST_CASE(RunAlignCorners,
373 DynamicFusionResizeFixture<uint8_t>,
374 framework::DatasetMode::ALL,
375 ASSEMBLE_DATASET_DYNAMIC_FUSION(u8_shape, ScaleAlignCornersSamplingPolicySet))
Jakub Sujak8ae57142022-12-02 16:09:06 +0000376{
377 //Create valid region
378 TensorInfo src_info(_shape, 1, _data_type);
Viet-Hoa Dofdf56fb2024-01-18 16:10:46 +0000379 const ValidRegion valid_region =
380 calculate_valid_region_scale(src_info, _reference.shape(), _interpolation_policy, _sampling_policy, false);
Jakub Sujak8ae57142022-12-02 16:09:06 +0000381
382 // Validate output
383 validate(CLAccessor(_target), _reference, valid_region, tolerance_q8);
384}
Viet-Hoa Dofdf56fb2024-01-18 16:10:46 +0000385const auto u8_nightly_shape = combine((SCALE_NIGHTLY_SHAPE_DATASET(num_elements_per_vector<uint8_t>())),
386 framework::dataset::make("DataType", DataType::U8));
387FIXTURE_DATA_TEST_CASE(RunNightly,
388 DynamicFusionResizeFixture<uint8_t>,
389 framework::DatasetMode::NIGHTLY,
390 ASSEMBLE_DATASET_DYNAMIC_FUSION(u8_nightly_shape, ScaleSamplingPolicySet))
Jakub Sujak8ae57142022-12-02 16:09:06 +0000391{
392 //Create valid region
393 TensorInfo src_info(_shape, 1, _data_type);
Viet-Hoa Dofdf56fb2024-01-18 16:10:46 +0000394 const ValidRegion valid_region =
395 calculate_valid_region_scale(src_info, _reference.shape(), _interpolation_policy, _sampling_policy, false);
Jakub Sujak8ae57142022-12-02 16:09:06 +0000396
397 // Validate output
398 validate(CLAccessor(_target), _reference, valid_region, tolerance_q8);
399}
Viet-Hoa Dofdf56fb2024-01-18 16:10:46 +0000400FIXTURE_DATA_TEST_CASE(RunNightlyAlignCorners,
401 DynamicFusionResizeFixture<uint8_t>,
402 framework::DatasetMode::NIGHTLY,
403 ASSEMBLE_DATASET_DYNAMIC_FUSION(u8_nightly_shape, ScaleAlignCornersSamplingPolicySet))
Jakub Sujak8ae57142022-12-02 16:09:06 +0000404{
405 //Create valid region
406 TensorInfo src_info(_shape, 1, _data_type);
Viet-Hoa Dofdf56fb2024-01-18 16:10:46 +0000407 const ValidRegion valid_region =
408 calculate_valid_region_scale(src_info, _reference.shape(), _interpolation_policy, _sampling_policy, false);
Jakub Sujak8ae57142022-12-02 16:09:06 +0000409
410 // Validate output
411 validate(CLAccessor(_target), _reference, valid_region, tolerance_q8);
412}
413TEST_SUITE_END() // U8
414
415TEST_SUITE(S16)
Viet-Hoa Dofdf56fb2024-01-18 16:10:46 +0000416const auto s16_shape = combine((SCALE_PRECOMMIT_SHAPE_DATASET(num_elements_per_vector<int16_t>())),
417 framework::dataset::make("DataType", DataType::S16));
418FIXTURE_DATA_TEST_CASE(Run,
419 DynamicFusionResizeFixture<int16_t>,
420 framework::DatasetMode::ALL,
421 ASSEMBLE_DATASET_DYNAMIC_FUSION(s16_shape, ScaleSamplingPolicySet))
Jakub Sujak8ae57142022-12-02 16:09:06 +0000422{
423 //Create valid region
424 TensorInfo src_info(_shape, 1, _data_type);
Viet-Hoa Dofdf56fb2024-01-18 16:10:46 +0000425 const ValidRegion valid_region =
426 calculate_valid_region_scale(src_info, _reference.shape(), _interpolation_policy, _sampling_policy, false);
Jakub Sujak8ae57142022-12-02 16:09:06 +0000427
428 // Validate output
429 validate(CLAccessor(_target), _reference, valid_region, tolerance_s16);
430}
Viet-Hoa Dofdf56fb2024-01-18 16:10:46 +0000431FIXTURE_DATA_TEST_CASE(RunAlignCorners,
432 DynamicFusionResizeFixture<int16_t>,
433 framework::DatasetMode::ALL,
434 ASSEMBLE_DATASET_DYNAMIC_FUSION(s16_shape, ScaleAlignCornersSamplingPolicySet))
Jakub Sujak8ae57142022-12-02 16:09:06 +0000435{
436 //Create valid region
437 TensorInfo src_info(_shape, 1, _data_type);
Viet-Hoa Dofdf56fb2024-01-18 16:10:46 +0000438 const ValidRegion valid_region =
439 calculate_valid_region_scale(src_info, _reference.shape(), _interpolation_policy, _sampling_policy, false);
Jakub Sujak8ae57142022-12-02 16:09:06 +0000440
441 // Validate output
442 validate(CLAccessor(_target), _reference, valid_region, tolerance_s16);
443}
Viet-Hoa Dofdf56fb2024-01-18 16:10:46 +0000444const auto s16_nightly_shape = combine((SCALE_NIGHTLY_SHAPE_DATASET(num_elements_per_vector<int16_t>())),
445 framework::dataset::make("DataType", DataType::S16));
446FIXTURE_DATA_TEST_CASE(RunNightly,
447 DynamicFusionResizeFixture<int16_t>,
448 framework::DatasetMode::NIGHTLY,
449 ASSEMBLE_DATASET_DYNAMIC_FUSION(s16_nightly_shape, ScaleSamplingPolicySet))
Jakub Sujak8ae57142022-12-02 16:09:06 +0000450{
451 //Create valid region
452 TensorInfo src_info(_shape, 1, _data_type);
Viet-Hoa Dofdf56fb2024-01-18 16:10:46 +0000453 const ValidRegion valid_region =
454 calculate_valid_region_scale(src_info, _reference.shape(), _interpolation_policy, _sampling_policy, false);
Jakub Sujak8ae57142022-12-02 16:09:06 +0000455
456 // Validate output
457 validate(CLAccessor(_target), _reference, valid_region, tolerance_s16);
458}
Viet-Hoa Dofdf56fb2024-01-18 16:10:46 +0000459FIXTURE_DATA_TEST_CASE(RunNightlyAlignCorners,
460 DynamicFusionResizeFixture<int16_t>,
461 framework::DatasetMode::NIGHTLY,
462 ASSEMBLE_DATASET_DYNAMIC_FUSION(s16_nightly_shape, ScaleAlignCornersSamplingPolicySet))
Jakub Sujak8ae57142022-12-02 16:09:06 +0000463{
464 //Create valid region
465 TensorInfo src_info(_shape, 1, _data_type);
Viet-Hoa Dofdf56fb2024-01-18 16:10:46 +0000466 const ValidRegion valid_region =
467 calculate_valid_region_scale(src_info, _reference.shape(), _interpolation_policy, _sampling_policy, false);
Jakub Sujak8ae57142022-12-02 16:09:06 +0000468
469 // Validate output
470 validate(CLAccessor(_target), _reference, valid_region, tolerance_s16);
471}
472TEST_SUITE_END() // S16
473TEST_SUITE_END() // Integer
474
475template <typename T>
Viet-Hoa Dofdf56fb2024-01-18 16:10:46 +0000476using DynamicFusionResizeQuantizedFixture =
477 DynamicFusionResizeQuantizedValidationFixture<CLTensor, CLAccessor, GpuResize, T>;
Jakub Sujak8ae57142022-12-02 16:09:06 +0000478TEST_SUITE(Quantized)
479TEST_SUITE(QASYMM8)
Viet-Hoa Dofdf56fb2024-01-18 16:10:46 +0000480const auto qasymm8_shape = combine((SCALE_PRECOMMIT_SHAPE_DATASET(num_elements_per_vector<uint8_t>())),
481 framework::dataset::make("DataType", DataType::QASYMM8));
482FIXTURE_DATA_TEST_CASE(Run,
483 DynamicFusionResizeQuantizedFixture<uint8_t>,
484 framework::DatasetMode::ALL,
485 ASSEMBLE_QUANTIZED_DATASET_DYNAMIC_FUSION(qasymm8_shape,
486 ScaleSamplingPolicySet,
487 QuantizationInfoSet))
Jakub Sujak8ae57142022-12-02 16:09:06 +0000488{
489 //Create valid region
490 TensorInfo src_info(_shape, 1, _data_type);
Viet-Hoa Dofdf56fb2024-01-18 16:10:46 +0000491 const ValidRegion valid_region =
492 calculate_valid_region_scale(src_info, _reference.shape(), _interpolation_policy, _sampling_policy, false);
Jakub Sujak8ae57142022-12-02 16:09:06 +0000493
494 // Validate output
495 validate(CLAccessor(_target), _reference, valid_region, tolerance_q8);
496}
Viet-Hoa Dofdf56fb2024-01-18 16:10:46 +0000497FIXTURE_DATA_TEST_CASE(RunAlignCorners,
498 DynamicFusionResizeQuantizedFixture<uint8_t>,
499 framework::DatasetMode::ALL,
500 ASSEMBLE_QUANTIZED_DATASET_DYNAMIC_FUSION(qasymm8_shape,
501 ScaleAlignCornersSamplingPolicySet,
502 QuantizationInfoSet))
Jakub Sujak8ae57142022-12-02 16:09:06 +0000503{
504 //Create valid region
505 TensorInfo src_info(_shape, 1, _data_type);
Viet-Hoa Dofdf56fb2024-01-18 16:10:46 +0000506 const ValidRegion valid_region =
507 calculate_valid_region_scale(src_info, _reference.shape(), _interpolation_policy, _sampling_policy, false);
Jakub Sujak8ae57142022-12-02 16:09:06 +0000508
509 // Validate output
510 validate(CLAccessor(_target), _reference, valid_region, tolerance_q8);
511}
Viet-Hoa Dofdf56fb2024-01-18 16:10:46 +0000512const auto qasymm8_nightly_shape = combine((SCALE_NIGHTLY_SHAPE_DATASET(num_elements_per_vector<uint8_t>())),
513 framework::dataset::make("DataType", DataType::QASYMM8));
514FIXTURE_DATA_TEST_CASE(RunNightly,
515 DynamicFusionResizeQuantizedFixture<uint8_t>,
516 framework::DatasetMode::NIGHTLY,
517 ASSEMBLE_QUANTIZED_DATASET_DYNAMIC_FUSION(qasymm8_nightly_shape,
518 ScaleSamplingPolicySet,
519 QuantizationInfoSet))
Jakub Sujak8ae57142022-12-02 16:09:06 +0000520{
521 //Create valid region
522 TensorInfo src_info(_shape, 1, _data_type);
Viet-Hoa Dofdf56fb2024-01-18 16:10:46 +0000523 const ValidRegion valid_region =
524 calculate_valid_region_scale(src_info, _reference.shape(), _interpolation_policy, _sampling_policy, false);
Jakub Sujak8ae57142022-12-02 16:09:06 +0000525
526 // Validate output
527 validate(CLAccessor(_target), _reference, valid_region, tolerance_q8);
528}
Viet-Hoa Dofdf56fb2024-01-18 16:10:46 +0000529FIXTURE_DATA_TEST_CASE(RunNightlyAlignCorners,
530 DynamicFusionResizeQuantizedFixture<uint8_t>,
531 framework::DatasetMode::NIGHTLY,
532 ASSEMBLE_QUANTIZED_DATASET_DYNAMIC_FUSION(qasymm8_nightly_shape,
533 ScaleAlignCornersSamplingPolicySet,
534 QuantizationInfoSet))
Jakub Sujak8ae57142022-12-02 16:09:06 +0000535{
536 //Create valid region
537 TensorInfo src_info(_shape, 1, _data_type);
Viet-Hoa Dofdf56fb2024-01-18 16:10:46 +0000538 const ValidRegion valid_region =
539 calculate_valid_region_scale(src_info, _reference.shape(), _interpolation_policy, _sampling_policy, false);
Jakub Sujak8ae57142022-12-02 16:09:06 +0000540
541 // Validate output
542 validate(CLAccessor(_target), _reference, valid_region, tolerance_q8);
543}
544TEST_SUITE_END() // QASYMM8
545
546TEST_SUITE(QASYMM8_SIGNED)
Viet-Hoa Dofdf56fb2024-01-18 16:10:46 +0000547const auto qasymm8_signed_shape = combine((SCALE_PRECOMMIT_SHAPE_DATASET(num_elements_per_vector<int8_t>())),
548 framework::dataset::make("DataType", DataType::QASYMM8_SIGNED));
549FIXTURE_DATA_TEST_CASE(Run,
550 DynamicFusionResizeQuantizedFixture<int8_t>,
551 framework::DatasetMode::ALL,
552 ASSEMBLE_QUANTIZED_DATASET_DYNAMIC_FUSION(qasymm8_signed_shape,
553 ScaleSamplingPolicySet,
554 QuantizationInfoSet))
Jakub Sujak8ae57142022-12-02 16:09:06 +0000555{
556 //Create valid region
557 TensorInfo src_info(_shape, 1, _data_type);
Viet-Hoa Dofdf56fb2024-01-18 16:10:46 +0000558 const ValidRegion valid_region =
559 calculate_valid_region_scale(src_info, _reference.shape(), _interpolation_policy, _sampling_policy, false);
Jakub Sujak8ae57142022-12-02 16:09:06 +0000560
561 // Validate output
562 validate(CLAccessor(_target), _reference, valid_region, tolerance_qs8);
563}
Viet-Hoa Dofdf56fb2024-01-18 16:10:46 +0000564FIXTURE_DATA_TEST_CASE(RunAlignCorners,
565 DynamicFusionResizeQuantizedFixture<int8_t>,
566 framework::DatasetMode::ALL,
567 ASSEMBLE_QUANTIZED_DATASET_DYNAMIC_FUSION(qasymm8_signed_shape,
568 ScaleAlignCornersSamplingPolicySet,
569 QuantizationInfoSet))
Jakub Sujak8ae57142022-12-02 16:09:06 +0000570{
571 //Create valid region
572 TensorInfo src_info(_shape, 1, _data_type);
Viet-Hoa Dofdf56fb2024-01-18 16:10:46 +0000573 const ValidRegion valid_region =
574 calculate_valid_region_scale(src_info, _reference.shape(), _interpolation_policy, _sampling_policy, false);
Jakub Sujak8ae57142022-12-02 16:09:06 +0000575
576 // Validate output
577 validate(CLAccessor(_target), _reference, valid_region, tolerance_qs8);
578}
Viet-Hoa Dofdf56fb2024-01-18 16:10:46 +0000579const auto qasymm8_signed_nightly_shape = combine((SCALE_NIGHTLY_SHAPE_DATASET(num_elements_per_vector<int8_t>())),
580 framework::dataset::make("DataType", DataType::QASYMM8_SIGNED));
581FIXTURE_DATA_TEST_CASE(RunNightly,
582 DynamicFusionResizeQuantizedFixture<int8_t>,
583 framework::DatasetMode::NIGHTLY,
584 ASSEMBLE_QUANTIZED_DATASET_DYNAMIC_FUSION(qasymm8_signed_nightly_shape,
585 ScaleSamplingPolicySet,
586 QuantizationInfoSet))
Jakub Sujak8ae57142022-12-02 16:09:06 +0000587{
588 //Create valid region
589 TensorInfo src_info(_shape, 1, _data_type);
Viet-Hoa Dofdf56fb2024-01-18 16:10:46 +0000590 const ValidRegion valid_region =
591 calculate_valid_region_scale(src_info, _reference.shape(), _interpolation_policy, _sampling_policy, false);
Jakub Sujak8ae57142022-12-02 16:09:06 +0000592
593 // Validate output
594 validate(CLAccessor(_target), _reference, valid_region, tolerance_qs8);
595}
Viet-Hoa Dofdf56fb2024-01-18 16:10:46 +0000596FIXTURE_DATA_TEST_CASE(RunNightlyAlignCorners,
597 DynamicFusionResizeQuantizedFixture<int8_t>,
598 framework::DatasetMode::NIGHTLY,
599 ASSEMBLE_QUANTIZED_DATASET_DYNAMIC_FUSION(qasymm8_signed_nightly_shape,
600 ScaleAlignCornersSamplingPolicySet,
601 QuantizationInfoSet))
Jakub Sujak8ae57142022-12-02 16:09:06 +0000602{
603 //Create valid region
604 TensorInfo src_info(_shape, 1, _data_type);
Viet-Hoa Dofdf56fb2024-01-18 16:10:46 +0000605 const ValidRegion valid_region =
606 calculate_valid_region_scale(src_info, _reference.shape(), _interpolation_policy, _sampling_policy, false);
Jakub Sujak8ae57142022-12-02 16:09:06 +0000607
608 // Validate output
609 validate(CLAccessor(_target), _reference, valid_region, tolerance_qs8);
610}
611TEST_SUITE_END() // QASYMM8_SIGNED
612
613TEST_SUITE_END() // Quantized
614
615TEST_SUITE_END() // RESIZE
616TEST_SUITE_END() // DYNAMIC_FUSION
617TEST_SUITE_END() // CL
618
619} // namespace validation
620} // namespace test
621} // namespace arm_compute