blob: 1608e7c66dd288799d9137a8e5b002237bbe462c [file] [log] [blame]
Sanghoon Leec8a85ba2017-11-29 11:23:14 +00001/*
Michalis Spyroud175ece2020-07-30 23:39:32 +01002 * Copyright (c) 2017-2020 Arm Limited.
Sanghoon Leec8a85ba2017-11-29 11:23:14 +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#include "arm_compute/core/Types.h"
25#include "arm_compute/runtime/CL/functions/CLConvolution.h"
26#include "arm_compute/runtime/Tensor.h"
27#include "arm_compute/runtime/TensorAllocator.h"
28#include "tests/CL/CLAccessor.h"
29#include "tests/PaddingCalculator.h"
30#include "tests/datasets/BorderModeDataset.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/ConvolutionFixture.h"
37
38namespace arm_compute
39{
40namespace test
41{
42namespace validation
43{
Sanghoon Leec8a85ba2017-11-29 11:23:14 +000044TEST_SUITE(CL)
45TEST_SUITE(CustomConvolution)
Sanghoon Leec0079e92018-01-29 17:28:49 +000046TEST_SUITE(Square3x3)
Sanghoon Leec8a85ba2017-11-29 11:23:14 +000047template <typename T>
Sanghoon Leed7ba5392017-12-13 11:28:50 +000048using CLConvolutionFixture = ConvolutionSquareValidationFixture<CLTensor, CLAccessor, CLConvolution3x3, T>;
Sanghoon Leec8a85ba2017-11-29 11:23:14 +000049
Sanghoon Leec0079e92018-01-29 17:28:49 +000050TEST_SUITE(U8)
Michalis Spyrou80943252019-01-10 17:19:50 +000051FIXTURE_DATA_TEST_CASE(RunLarge, CLConvolutionFixture<uint8_t>, framework::DatasetMode::NIGHTLY, combine(combine(combine(concat(datasets::SmallShapes(), datasets::LargeShapes()),
52 framework::dataset::make("DataType",
53 DataType::U8)),
Sanghoon Leed7ba5392017-12-13 11:28:50 +000054 datasets::BorderModes()),
55 framework::dataset::make("filter_size", { 3 })))
Sanghoon Leec8a85ba2017-11-29 11:23:14 +000056{
57 // Validate output
Sanghoon Leed7ba5392017-12-13 11:28:50 +000058 validate(CLAccessor(_target), _reference, shape_to_valid_region(_reference.shape(), (_border_mode == BorderMode::UNDEFINED), BorderSize(_height / 2, _width / 2)));
Sanghoon Leec8a85ba2017-11-29 11:23:14 +000059}
Michalis Spyrou80943252019-01-10 17:19:50 +000060TEST_SUITE_END() // U8
Sanghoon Leec8d23162018-01-12 16:19:10 +000061
Sanghoon Leec0079e92018-01-29 17:28:49 +000062TEST_SUITE(S16)
Michalis Spyrou80943252019-01-10 17:19:50 +000063FIXTURE_DATA_TEST_CASE(RunLarge, CLConvolutionFixture<int16_t>, framework::DatasetMode::NIGHTLY, combine(combine(combine(concat(datasets::SmallShapes(), datasets::LargeShapes()),
64 framework::dataset::make("DataType",
65 DataType::S16)),
Sanghoon Leec8d23162018-01-12 16:19:10 +000066 datasets::BorderModes()),
67 framework::dataset::make("filter_size", { 3 })))
68{
69 // Validate output
Georgios Pinitase9146ed2018-02-07 16:05:47 +000070 validate(CLAccessor(_target), _reference, shape_to_valid_region(_reference.shape(), (_border_mode == BorderMode::UNDEFINED), BorderSize(_height / 2, _width / 2)));
Sanghoon Leec8d23162018-01-12 16:19:10 +000071}
Michalis Spyrou80943252019-01-10 17:19:50 +000072TEST_SUITE_END() // S16
73TEST_SUITE_END() // Square 3x3
Sanghoon Leec8a85ba2017-11-29 11:23:14 +000074
Sanghoon Leec0079e92018-01-29 17:28:49 +000075TEST_SUITE(Square5x5)
Sanghoon Leec8a85ba2017-11-29 11:23:14 +000076template <typename T>
Sanghoon Leed7ba5392017-12-13 11:28:50 +000077using CLConvolutionFixture = ConvolutionSquareValidationFixture<CLTensor, CLAccessor, CLConvolution5x5, T>;
Sanghoon Leec8d23162018-01-12 16:19:10 +000078
Sanghoon Leec0079e92018-01-29 17:28:49 +000079TEST_SUITE(U8)
Michalis Spyrou80943252019-01-10 17:19:50 +000080FIXTURE_DATA_TEST_CASE(RunLarge, CLConvolutionFixture<uint8_t>, framework::DatasetMode::NIGHTLY, combine(combine(combine(concat(datasets::SmallShapes(), datasets::LargeShapes()),
81 framework::dataset::make("DataType",
82 DataType::U8)),
Sanghoon Leed7ba5392017-12-13 11:28:50 +000083 datasets::BorderModes()),
84 framework::dataset::make("filter_size", { 5 })))
Sanghoon Leec8a85ba2017-11-29 11:23:14 +000085{
86 // Validate output
Sanghoon Leed7ba5392017-12-13 11:28:50 +000087 validate(CLAccessor(_target), _reference, shape_to_valid_region(_reference.shape(), (_border_mode == BorderMode::UNDEFINED), BorderSize(_height / 2, _width / 2)));
Sanghoon Leec8a85ba2017-11-29 11:23:14 +000088}
Michalis Spyrou80943252019-01-10 17:19:50 +000089TEST_SUITE_END() // U8
Sanghoon Leec8d23162018-01-12 16:19:10 +000090
Sanghoon Leec0079e92018-01-29 17:28:49 +000091TEST_SUITE(S16)
Michalis Spyrou80943252019-01-10 17:19:50 +000092FIXTURE_DATA_TEST_CASE(RunLarge, CLConvolutionFixture<int16_t>, framework::DatasetMode::NIGHTLY, combine(combine(combine(concat(datasets::SmallShapes(), datasets::LargeShapes()),
93 framework::dataset::make("DataType",
94 DataType::S16)),
Sanghoon Leec8d23162018-01-12 16:19:10 +000095 datasets::BorderModes()),
96 framework::dataset::make("filter_size", { 5 })))
97{
98 // Validate output
Georgios Pinitase9146ed2018-02-07 16:05:47 +000099 validate(CLAccessor(_target), _reference, shape_to_valid_region(_reference.shape(), (_border_mode == BorderMode::UNDEFINED), BorderSize(_height / 2, _width / 2)));
Sanghoon Leec8d23162018-01-12 16:19:10 +0000100}
Michalis Spyrou80943252019-01-10 17:19:50 +0000101TEST_SUITE_END() // S16
102TEST_SUITE_END() // Square5x5
Sanghoon Leec8a85ba2017-11-29 11:23:14 +0000103
Sanghoon Leec0079e92018-01-29 17:28:49 +0000104TEST_SUITE(Square7x7)
Sanghoon Leec8a85ba2017-11-29 11:23:14 +0000105template <typename T>
Sanghoon Leed7ba5392017-12-13 11:28:50 +0000106using CLConvolutionFixture = ConvolutionSquareValidationFixture<CLTensor, CLAccessor, CLConvolution7x7, T>;
Sanghoon Leec8a85ba2017-11-29 11:23:14 +0000107
Sanghoon Leec0079e92018-01-29 17:28:49 +0000108TEST_SUITE(U8)
Michalis Spyrou80943252019-01-10 17:19:50 +0000109FIXTURE_DATA_TEST_CASE(RunLarge, CLConvolutionFixture<uint8_t>, framework::DatasetMode::NIGHTLY, combine(combine(combine(concat(datasets::SmallShapes(), datasets::LargeShapes()),
110 framework::dataset::make("DataType",
111 DataType::U8)),
Sanghoon Leed7ba5392017-12-13 11:28:50 +0000112 datasets::BorderModes()),
113 framework::dataset::make("filter_size", { 7 })))
Sanghoon Leec8a85ba2017-11-29 11:23:14 +0000114{
115 // Validate output
Sanghoon Leed7ba5392017-12-13 11:28:50 +0000116 validate(CLAccessor(_target), _reference, shape_to_valid_region(_reference.shape(), (_border_mode == BorderMode::UNDEFINED), BorderSize(_height / 2, _width / 2)));
Sanghoon Leec8a85ba2017-11-29 11:23:14 +0000117}
Michalis Spyrou80943252019-01-10 17:19:50 +0000118TEST_SUITE_END() // U8
Sanghoon Leec8d23162018-01-12 16:19:10 +0000119
Sanghoon Leec0079e92018-01-29 17:28:49 +0000120TEST_SUITE(S16)
Michalis Spyrou80943252019-01-10 17:19:50 +0000121FIXTURE_DATA_TEST_CASE(RunLarge, CLConvolutionFixture<int16_t>, framework::DatasetMode::NIGHTLY, combine(combine(combine(concat(datasets::SmallShapes(), datasets::LargeShapes()),
122 framework::dataset::make("DataType",
123 DataType::S16)),
Sanghoon Leec8d23162018-01-12 16:19:10 +0000124 datasets::BorderModes()),
125 framework::dataset::make("filter_size", { 7 })))
126{
127 // Validate output
Georgios Pinitase9146ed2018-02-07 16:05:47 +0000128 validate(CLAccessor(_target), _reference, shape_to_valid_region(_reference.shape(), (_border_mode == BorderMode::UNDEFINED), BorderSize(_height / 2, _width / 2)));
Sanghoon Leec8d23162018-01-12 16:19:10 +0000129}
Michalis Spyrou80943252019-01-10 17:19:50 +0000130TEST_SUITE_END() // S16
131TEST_SUITE_END() // Square7x7
Sanghoon Leec8a85ba2017-11-29 11:23:14 +0000132
Sanghoon Leec0079e92018-01-29 17:28:49 +0000133TEST_SUITE(Square9x9)
Sanghoon Leec8a85ba2017-11-29 11:23:14 +0000134
135template <typename T>
Sanghoon Leed7ba5392017-12-13 11:28:50 +0000136using CLConvolutionFixture = ConvolutionSquareValidationFixture<CLTensor, CLAccessor, CLConvolution9x9, T>;
Sanghoon Leec8a85ba2017-11-29 11:23:14 +0000137
Sanghoon Leec0079e92018-01-29 17:28:49 +0000138TEST_SUITE(U8)
Michalis Spyrou80943252019-01-10 17:19:50 +0000139FIXTURE_DATA_TEST_CASE(RunLarge, CLConvolutionFixture<uint8_t>, framework::DatasetMode::NIGHTLY, combine(combine(combine(concat(datasets::SmallShapes(), datasets::LargeShapes()),
140 framework::dataset::make("DataType",
141 DataType::U8)),
Sanghoon Leed7ba5392017-12-13 11:28:50 +0000142 datasets::BorderModes()),
143 framework::dataset::make("filter_size", { 9 })))
Sanghoon Leec8a85ba2017-11-29 11:23:14 +0000144{
145 // Validate output
Sanghoon Leed7ba5392017-12-13 11:28:50 +0000146 validate(CLAccessor(_target), _reference, shape_to_valid_region(_reference.shape(), (_border_mode == BorderMode::UNDEFINED), BorderSize(_height / 2, _width / 2)));
Sanghoon Leec8a85ba2017-11-29 11:23:14 +0000147}
Michalis Spyrou80943252019-01-10 17:19:50 +0000148TEST_SUITE_END() // U8
Sanghoon Leec8d23162018-01-12 16:19:10 +0000149
Sanghoon Leec0079e92018-01-29 17:28:49 +0000150TEST_SUITE(S16)
Michalis Spyrou80943252019-01-10 17:19:50 +0000151FIXTURE_DATA_TEST_CASE(RunLarge, CLConvolutionFixture<int16_t>, framework::DatasetMode::NIGHTLY, combine(combine(combine(concat(datasets::SmallShapes(), datasets::LargeShapes()),
152 framework::dataset::make("DataType",
153 DataType::S16)),
Sanghoon Leec8d23162018-01-12 16:19:10 +0000154 datasets::BorderModes()),
155 framework::dataset::make("filter_size", { 9 })))
156{
157 // Validate output
Georgios Pinitase9146ed2018-02-07 16:05:47 +0000158 validate(CLAccessor(_target), _reference, shape_to_valid_region(_reference.shape(), (_border_mode == BorderMode::UNDEFINED), BorderSize(_height / 2, _width / 2)));
Sanghoon Leec8d23162018-01-12 16:19:10 +0000159}
Michalis Spyrou80943252019-01-10 17:19:50 +0000160TEST_SUITE_END() // S16
161TEST_SUITE_END() // Square9x9
Sanghoon Leed7ba5392017-12-13 11:28:50 +0000162
Sanghoon Leec0079e92018-01-29 17:28:49 +0000163TEST_SUITE(Rectangle)
Sanghoon Leed7ba5392017-12-13 11:28:50 +0000164template <typename T>
165using CLConvolutionFixture = ConvolutionRectangleValidationFixture<CLTensor, CLAccessor, CLConvolutionRectangle, T>;
166
Sanghoon Leec0079e92018-01-29 17:28:49 +0000167TEST_SUITE(U8)
Michalis Spyrou80943252019-01-10 17:19:50 +0000168FIXTURE_DATA_TEST_CASE(RunLarge, CLConvolutionFixture<uint8_t>, framework::DatasetMode::NIGHTLY, combine(combine(combine(combine(concat(datasets::SmallShapes(), datasets::LargeShapes()),
169 framework::dataset::make("DataType",
170 DataType::U8)),
Sanghoon Leed7ba5392017-12-13 11:28:50 +0000171 datasets::BorderModes()),
172 framework::dataset::make("filter_width", { 3, 5, 7, 9 })),
173 framework::dataset::make("filter_height", { 3, 5, 7, 9 })))
174{
175 // Validate output
176 validate(CLAccessor(_target), _reference, shape_to_valid_region(_reference.shape(), (_border_mode == BorderMode::UNDEFINED), BorderSize(_height / 2, _width / 2)));
177}
Michalis Spyrou80943252019-01-10 17:19:50 +0000178TEST_SUITE_END() // U8
Sanghoon Leec8d23162018-01-12 16:19:10 +0000179
Sanghoon Leec0079e92018-01-29 17:28:49 +0000180TEST_SUITE(S16)
Michalis Spyrou80943252019-01-10 17:19:50 +0000181FIXTURE_DATA_TEST_CASE(RunLarge, CLConvolutionFixture<int16_t>, framework::DatasetMode::NIGHTLY, combine(combine(combine(combine(concat(datasets::SmallShapes(), datasets::LargeShapes()),
182 framework::dataset::make("DataType",
183 DataType::S16)),
Sanghoon Leec8d23162018-01-12 16:19:10 +0000184 datasets::BorderModes()),
185 framework::dataset::make("filter_width", { 3, 5, 7, 9 })),
186 framework::dataset::make("filter_height", { 3, 5, 7, 9 })))
187{
188 // Validate output
Georgios Pinitase9146ed2018-02-07 16:05:47 +0000189 validate(CLAccessor(_target), _reference, shape_to_valid_region(_reference.shape(), (_border_mode == BorderMode::UNDEFINED), BorderSize(_height / 2, _width / 2)));
Sanghoon Leec8d23162018-01-12 16:19:10 +0000190}
Michalis Spyrou80943252019-01-10 17:19:50 +0000191TEST_SUITE_END() // S16
192TEST_SUITE_END() // Rectangle
Sanghoon Lee571b18a2017-12-22 16:20:11 +0000193
Sanghoon Leec0079e92018-01-29 17:28:49 +0000194TEST_SUITE(Separable5x5)
Sanghoon Lee571b18a2017-12-22 16:20:11 +0000195template <typename T>
196using CLConvolutionFixture = ConvolutionSeparableValidationFixture<CLTensor, CLAccessor, CLConvolution5x5, T>;
197
Sanghoon Leec0079e92018-01-29 17:28:49 +0000198TEST_SUITE(U8)
Michalis Spyrou80943252019-01-10 17:19:50 +0000199FIXTURE_DATA_TEST_CASE(RunLarge, CLConvolutionFixture<uint8_t>, framework::DatasetMode::NIGHTLY, combine(combine(combine(concat(datasets::SmallShapes(), datasets::LargeShapes()),
200 framework::dataset::make("DataType",
201 DataType::U8)),
Sanghoon Lee571b18a2017-12-22 16:20:11 +0000202 datasets::BorderModes()),
203 framework::dataset::make("filter_size", { 5 })))
204{
205 // Validate output
206 validate(CLAccessor(_target), _reference, shape_to_valid_region(_reference.shape(), (_border_mode == BorderMode::UNDEFINED), BorderSize(_height / 2, _width / 2)));
207}
Michalis Spyrou80943252019-01-10 17:19:50 +0000208TEST_SUITE_END() // U8
Sanghoon Leec8d23162018-01-12 16:19:10 +0000209
Sanghoon Leec0079e92018-01-29 17:28:49 +0000210TEST_SUITE(S16)
Michalis Spyrou80943252019-01-10 17:19:50 +0000211FIXTURE_DATA_TEST_CASE(RunLarge, CLConvolutionFixture<int16_t>, framework::DatasetMode::NIGHTLY, combine(combine(combine(concat(datasets::SmallShapes(), datasets::LargeShapes()),
212 framework::dataset::make("DataType",
213 DataType::S16)),
Sanghoon Leec8d23162018-01-12 16:19:10 +0000214 datasets::BorderModes()),
215 framework::dataset::make("filter_size", { 5 })))
216{
217 // Validate output
Georgios Pinitase9146ed2018-02-07 16:05:47 +0000218 validate(CLAccessor(_target), _reference, shape_to_valid_region(_reference.shape(), (_border_mode == BorderMode::UNDEFINED), BorderSize(_height / 2, _width / 2)));
Sanghoon Leec8d23162018-01-12 16:19:10 +0000219}
Michalis Spyrou80943252019-01-10 17:19:50 +0000220TEST_SUITE_END() // S16
221TEST_SUITE_END() // Separable5x5
Sanghoon Lee571b18a2017-12-22 16:20:11 +0000222
Sanghoon Leec0079e92018-01-29 17:28:49 +0000223TEST_SUITE(Separable7x7)
Sanghoon Lee571b18a2017-12-22 16:20:11 +0000224template <typename T>
225using CLConvolutionFixture = ConvolutionSeparableValidationFixture<CLTensor, CLAccessor, CLConvolution7x7, T>;
226
Sanghoon Leec0079e92018-01-29 17:28:49 +0000227TEST_SUITE(U8)
Michalis Spyrou80943252019-01-10 17:19:50 +0000228FIXTURE_DATA_TEST_CASE(RunLarge, CLConvolutionFixture<uint8_t>, framework::DatasetMode::NIGHTLY, combine(combine(combine(concat(datasets::SmallShapes(), datasets::LargeShapes()),
229 framework::dataset::make("DataType",
230 DataType::U8)),
Sanghoon Lee571b18a2017-12-22 16:20:11 +0000231 datasets::BorderModes()),
232 framework::dataset::make("filter_size", { 7 })))
233{
234 // Validate output
235 validate(CLAccessor(_target), _reference, shape_to_valid_region(_reference.shape(), (_border_mode == BorderMode::UNDEFINED), BorderSize(_height / 2, _width / 2)));
236}
Michalis Spyrou80943252019-01-10 17:19:50 +0000237TEST_SUITE_END() // U8
Sanghoon Leec8d23162018-01-12 16:19:10 +0000238
Sanghoon Leec0079e92018-01-29 17:28:49 +0000239TEST_SUITE(S16)
Michalis Spyrou80943252019-01-10 17:19:50 +0000240FIXTURE_DATA_TEST_CASE(RunLarge, CLConvolutionFixture<int16_t>, framework::DatasetMode::NIGHTLY, combine(combine(combine(concat(datasets::SmallShapes(), datasets::LargeShapes()),
241 framework::dataset::make("DataType",
242 DataType::S16)),
Sanghoon Leec8d23162018-01-12 16:19:10 +0000243 datasets::BorderModes()),
244 framework::dataset::make("filter_size", { 7 })))
245{
246 // Validate output
Georgios Pinitase9146ed2018-02-07 16:05:47 +0000247 validate(CLAccessor(_target), _reference, shape_to_valid_region(_reference.shape(), (_border_mode == BorderMode::UNDEFINED), BorderSize(_height / 2, _width / 2)));
Sanghoon Leec8d23162018-01-12 16:19:10 +0000248}
Michalis Spyrou80943252019-01-10 17:19:50 +0000249TEST_SUITE_END() // S16
250TEST_SUITE_END() // Separable7x7
Sanghoon Lee571b18a2017-12-22 16:20:11 +0000251
Sanghoon Leec0079e92018-01-29 17:28:49 +0000252TEST_SUITE(Separable9x9)
Sanghoon Lee571b18a2017-12-22 16:20:11 +0000253template <typename T>
254using CLConvolutionFixture = ConvolutionSeparableValidationFixture<CLTensor, CLAccessor, CLConvolution9x9, T>;
255
Sanghoon Leec0079e92018-01-29 17:28:49 +0000256TEST_SUITE(U8)
Michalis Spyrou80943252019-01-10 17:19:50 +0000257FIXTURE_DATA_TEST_CASE(RunLarge, CLConvolutionFixture<uint8_t>, framework::DatasetMode::NIGHTLY, combine(combine(combine(concat(datasets::SmallShapes(), datasets::LargeShapes()),
258 framework::dataset::make("DataType",
259 DataType::U8)),
Sanghoon Lee571b18a2017-12-22 16:20:11 +0000260 datasets::BorderModes()),
261 framework::dataset::make("filter_size", { 9 })))
262{
263 // Validate output
264 validate(CLAccessor(_target), _reference, shape_to_valid_region(_reference.shape(), (_border_mode == BorderMode::UNDEFINED), BorderSize(_height / 2, _width / 2)));
265}
Michalis Spyrou80943252019-01-10 17:19:50 +0000266TEST_SUITE_END() // U8
Sanghoon Leec8d23162018-01-12 16:19:10 +0000267
Sanghoon Leec0079e92018-01-29 17:28:49 +0000268TEST_SUITE(S16)
Michalis Spyrou80943252019-01-10 17:19:50 +0000269FIXTURE_DATA_TEST_CASE(RunLarge, CLConvolutionFixture<int16_t>, framework::DatasetMode::NIGHTLY, combine(combine(combine(concat(datasets::SmallShapes(), datasets::LargeShapes()),
270 framework::dataset::make("DataType",
271 DataType::S16)),
Sanghoon Leec8d23162018-01-12 16:19:10 +0000272 datasets::BorderModes()),
273 framework::dataset::make("filter_size", { 9 })))
274{
275 // Validate output
Georgios Pinitase9146ed2018-02-07 16:05:47 +0000276 validate(CLAccessor(_target), _reference, shape_to_valid_region(_reference.shape(), (_border_mode == BorderMode::UNDEFINED), BorderSize(_height / 2, _width / 2)));
Sanghoon Leec8d23162018-01-12 16:19:10 +0000277}
278TEST_SUITE_END()
Michalis Spyrou80943252019-01-10 17:19:50 +0000279TEST_SUITE_END() // Separable9x9
Sanghoon Lee571b18a2017-12-22 16:20:11 +0000280
Michalis Spyrou80943252019-01-10 17:19:50 +0000281TEST_SUITE_END() // Custom Convolution
282TEST_SUITE_END() // CL
Sanghoon Leec8a85ba2017-11-29 11:23:14 +0000283} // namespace validation
284} // namespace test
285} // namespace arm_compute