blob: 19ebfedcb543acbfec4f2bacb29e7567de164a32 [file] [log] [blame]
Sanghoon Lee70f82912017-08-24 14:21:24 +01001/*
Michele Di Giorgio11c562c2020-06-10 16:34:50 +01002 * Copyright (c) 2017-2020 ARM Limited.
Sanghoon Lee70f82912017-08-24 14:21:24 +01003 *
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 Pinitas5a594532018-12-03 14:30:05 +000021 * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
Sanghoon Lee70f82912017-08-24 14:21:24 +010022 * SOFTWARE.
23 */
24#include "arm_compute/core/Types.h"
25#include "arm_compute/runtime/NEON/functions/NEArithmeticAddition.h"
26#include "arm_compute/runtime/Tensor.h"
27#include "arm_compute/runtime/TensorAllocator.h"
28#include "tests/NEON/Accessor.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"
Georgios Pinitascbf39c62018-09-10 15:07:45 +010036#include "tests/validation/fixtures/ArithmeticOperationsFixture.h"
Sanghoon Lee70f82912017-08-24 14:21:24 +010037
38namespace arm_compute
39{
40namespace test
41{
42namespace validation
43{
44namespace
45{
Vidhya Sudhan Loganathanf8b65202019-02-01 09:49:50 +000046#ifndef __aarch64__
Manuel Bottini65383e22019-06-24 14:25:32 +010047constexpr AbsoluteTolerance<float> tolerance_quant(1); /**< Tolerance value for comparing reference's output against implementation's output for quantized data types */
48#endif //__aarch64__
Georgios Pinitasa84faff2018-12-05 18:17:24 +000049
Sanghoon Lee70f82912017-08-24 14:21:24 +010050/** Input data sets **/
51const auto ArithmeticAdditionU8Dataset = combine(combine(framework::dataset::make("DataType", DataType::U8), framework::dataset::make("DataType", DataType::U8)), framework::dataset::make("DataType",
52 DataType::U8));
53const auto ArithmeticAdditionS16Dataset = combine(combine(framework::dataset::make("DataType", { DataType::U8, DataType::S16 }), framework::dataset::make("DataType", DataType::S16)),
54 framework::dataset::make("DataType", DataType::S16));
Michele Di Giorgio11c562c2020-06-10 16:34:50 +010055const auto ArithmeticAdditionS32Dataset = combine(combine(framework::dataset::make("DataType", { DataType::S32 }), framework::dataset::make("DataType", DataType::S32)),
56 framework::dataset::make("DataType", DataType::S32));
Ioan-Cristian Szabo5edbd1c2017-11-13 13:34:08 +000057#ifdef __ARM_FEATURE_FP16_VECTOR_ARITHMETIC
Sanghoon Lee70f82912017-08-24 14:21:24 +010058const auto ArithmeticAdditionFP16Dataset = combine(combine(framework::dataset::make("DataType", DataType::F16), framework::dataset::make("DataType", DataType::F16)),
59 framework::dataset::make("DataType", DataType::F16));
Ioan-Cristian Szabo5edbd1c2017-11-13 13:34:08 +000060#endif /* __ARM_FEATURE_FP16_VECTOR_ARITHMETIC */
Sanghoon Lee70f82912017-08-24 14:21:24 +010061const auto ArithmeticAdditionFP32Dataset = combine(combine(framework::dataset::make("DataType", DataType::F32), framework::dataset::make("DataType", DataType::F32)),
62 framework::dataset::make("DataType", DataType::F32));
Georgios Pinitasa84faff2018-12-05 18:17:24 +000063const auto ArithmeticAdditionQASYMM8Dataset = combine(combine(framework::dataset::make("DataType", DataType::QASYMM8), framework::dataset::make("DataType", DataType::QASYMM8)),
64 framework::dataset::make("DataType", DataType::QASYMM8));
Michalis Spyroubc4d7c22019-12-03 15:11:09 +000065const auto ArithmeticAdditionQASYMM8SIGNEDDataset = combine(combine(framework::dataset::make("DataType", DataType::QASYMM8_SIGNED), framework::dataset::make("DataType", DataType::QASYMM8_SIGNED)),
Michele Di Giorgio11c562c2020-06-10 16:34:50 +010066 framework::dataset::make("DataType", DataType::QASYMM8_SIGNED));
Manuel Bottini3689fcd2019-06-14 17:18:12 +010067const auto ArithmeticAdditionQSYMM16Dataset = combine(combine(framework::dataset::make("DataType", DataType::QSYMM16), framework::dataset::make("DataType", DataType::QSYMM16)),
68 framework::dataset::make("DataType", DataType::QSYMM16));
Sanghoon Lee70f82912017-08-24 14:21:24 +010069} // namespace
70
71TEST_SUITE(NEON)
72TEST_SUITE(ArithmeticAddition)
73
74template <typename T>
75using NEArithmeticAdditionFixture = ArithmeticAdditionValidationFixture<Tensor, Accessor, NEArithmeticAddition, T>;
76
Ioan-Cristian Szabo397d58a2017-11-30 15:19:11 +000077// *INDENT-OFF*
78// clang-format off
79DATA_TEST_CASE(Validate, framework::DatasetMode::ALL, zip(zip(zip(
80 framework::dataset::make("Input1Info", { TensorInfo(TensorShape(32U, 13U, 2U), 1, DataType::U8),
81 TensorInfo(TensorShape(32U, 13U, 2U), 1, DataType::U8),
Georgios Pinitas5a594532018-12-03 14:30:05 +000082 TensorInfo(TensorShape(27U, 13U, 2U), 1, DataType::U8), // Unsupported broadcast
83 TensorInfo(TensorShape(32U, 13U, 2U), 1, DataType::U8), // Invalid data type combination
84 TensorInfo(TensorShape(32U, 13U, 2U), 1, DataType::F32),// Mismatching shapes
Ioan-Cristian Szabo397d58a2017-11-30 15:19:11 +000085 }),
86 framework::dataset::make("Input2Info",{ TensorInfo(TensorShape(32U, 13U, 2U), 1, DataType::U8),
87 TensorInfo(TensorShape(32U, 13U, 2U), 1, DataType::U8),
Georgios Pinitas5a594532018-12-03 14:30:05 +000088 TensorInfo(TensorShape(1U, 13U, 2U), 1, DataType::S16),
Ioan-Cristian Szabo397d58a2017-11-30 15:19:11 +000089 TensorInfo(TensorShape(32U, 13U, 2U), 1, DataType::S16),
90 TensorInfo(TensorShape(48U, 11U, 2U), 1, DataType::F32),
Ioan-Cristian Szabo397d58a2017-11-30 15:19:11 +000091 })),
92 framework::dataset::make("OutputInfo",{ TensorInfo(TensorShape(32U, 13U, 2U), 1, DataType::S16),
93 TensorInfo(TensorShape(32U, 13U, 2U), 1, DataType::U8),
Georgios Pinitas5a594532018-12-03 14:30:05 +000094 TensorInfo(TensorShape(27U, 13U, 2U), 1, DataType::S16),
Ioan-Cristian Szabo397d58a2017-11-30 15:19:11 +000095 TensorInfo(TensorShape(32U, 13U, 2U), 1, DataType::U8),
96 TensorInfo(TensorShape(48U, 11U, 2U), 1, DataType::F32),
Ioan-Cristian Szabo397d58a2017-11-30 15:19:11 +000097 })),
Vidhya Sudhan Loganathan0fc25452018-06-18 14:40:56 +010098 framework::dataset::make("Expected", { true, true, false, false, false})),
Ioan-Cristian Szabo397d58a2017-11-30 15:19:11 +000099 input1_info, input2_info, output_info, expected)
100{
Georgios Pinitas5a594532018-12-03 14:30:05 +0000101 Status s = NEArithmeticAddition::validate(&input1_info.clone()->set_is_resizable(false),
102 &input2_info.clone()->set_is_resizable(false),
103 &output_info.clone()->set_is_resizable(false),
104 ConvertPolicy::WRAP);
105 ARM_COMPUTE_EXPECT(bool(s) == expected, framework::LogLevel::ERRORS);
Ioan-Cristian Szabo397d58a2017-11-30 15:19:11 +0000106}
Michele Di Giorgio4a616532020-06-04 15:05:38 +0100107
108DATA_TEST_CASE(ValidateInPlace, framework::DatasetMode::ALL, zip(zip(
109 framework::dataset::make("Input1Info", { TensorInfo(TensorShape(32U, 13U, 2U), 1, DataType::U8),
110 TensorInfo(TensorShape(27U, 13U, 2U), 1, DataType::U8),
111 TensorInfo(TensorShape(1U, 13U, 2U), 1, DataType::U8), // Unsupported broadcast on input1 with in-place computation
112 }),
113 framework::dataset::make("Input2Info",{ TensorInfo(TensorShape(32U, 13U, 2U), 1, DataType::U8),
114 TensorInfo(TensorShape(1U, 13U, 2U), 1, DataType::U8),
115 TensorInfo(TensorShape(32U, 13U, 2U), 1, DataType::U8),
116 })),
117 framework::dataset::make("Expected", { true, true, false })),
118 input1_info, input2_info, expected)
119{
120 Status s = NEArithmeticAddition::validate(&input1_info.clone()->set_is_resizable(false),
121 &input2_info.clone()->set_is_resizable(false),
122 nullptr,
123 ConvertPolicy::WRAP);
124 ARM_COMPUTE_EXPECT(bool(s) == expected, framework::LogLevel::ERRORS);
125}
Ioan-Cristian Szabo397d58a2017-11-30 15:19:11 +0000126// clang-format on
127// *INDENT-ON*
128
Georgios Pinitasa84faff2018-12-05 18:17:24 +0000129TEST_SUITE(Integer)
Sanghoon Lee70f82912017-08-24 14:21:24 +0100130TEST_SUITE(U8)
Michele Di Giorgio4a616532020-06-04 15:05:38 +0100131FIXTURE_DATA_TEST_CASE(RunSmall, NEArithmeticAdditionFixture<uint8_t>, framework::DatasetMode::PRECOMMIT, combine(combine(combine(datasets::SmallShapes(), ArithmeticAdditionU8Dataset),
132 framework::dataset::make("ConvertPolicy", { ConvertPolicy::SATURATE, ConvertPolicy::WRAP })),
133 framework::dataset::make("InPlace", { false, true })))
Sanghoon Lee70f82912017-08-24 14:21:24 +0100134{
135 // Validate output
136 validate(Accessor(_target), _reference);
137}
Georgios Pinitasa84faff2018-12-05 18:17:24 +0000138TEST_SUITE_END() // U8
Sanghoon Lee70f82912017-08-24 14:21:24 +0100139
140TEST_SUITE(S16)
Michele Di Giorgio4a616532020-06-04 15:05:38 +0100141FIXTURE_DATA_TEST_CASE(RunSmall, NEArithmeticAdditionFixture<int16_t>, framework::DatasetMode::PRECOMMIT, combine(combine(combine(datasets::SmallShapes(), ArithmeticAdditionS16Dataset),
142 framework::dataset::make("ConvertPolicy", { ConvertPolicy::SATURATE, ConvertPolicy::WRAP })),
143 framework::dataset::make("InPlace", { false })))
Sanghoon Lee70f82912017-08-24 14:21:24 +0100144{
145 // Validate output
146 validate(Accessor(_target), _reference);
147}
148
Michele Di Giorgio4a616532020-06-04 15:05:38 +0100149FIXTURE_DATA_TEST_CASE(RunLarge, NEArithmeticAdditionFixture<int16_t>, framework::DatasetMode::NIGHTLY, combine(combine(combine(datasets::LargeShapes(), ArithmeticAdditionS16Dataset),
150 framework::dataset::make("ConvertPolicy", { ConvertPolicy::SATURATE, ConvertPolicy::WRAP })),
151 framework::dataset::make("InPlace", { false })))
Sanghoon Lee70f82912017-08-24 14:21:24 +0100152{
153 // Validate output
154 validate(Accessor(_target), _reference);
155}
Georgios Pinitasa84faff2018-12-05 18:17:24 +0000156TEST_SUITE_END() // S16
Michele Di Giorgio11c562c2020-06-10 16:34:50 +0100157
158TEST_SUITE(S32)
Michele Di Giorgio4a616532020-06-04 15:05:38 +0100159FIXTURE_DATA_TEST_CASE(RunSmall, NEArithmeticAdditionFixture<int32_t>, framework::DatasetMode::ALL, combine(combine(combine(datasets::SmallShapes(), ArithmeticAdditionS32Dataset),
160 framework::dataset::make("ConvertPolicy", { ConvertPolicy::SATURATE, ConvertPolicy::WRAP })),
161 framework::dataset::make("InPlace", { false })))
Michele Di Giorgio11c562c2020-06-10 16:34:50 +0100162{
163 // Validate output
164 validate(Accessor(_target), _reference);
165}
166TEST_SUITE_END() // S32
Georgios Pinitasa84faff2018-12-05 18:17:24 +0000167TEST_SUITE_END() // Integer
Sanghoon Lee70f82912017-08-24 14:21:24 +0100168
Sanghoon Lee70f82912017-08-24 14:21:24 +0100169TEST_SUITE(Float)
Ioan-Cristian Szabo5edbd1c2017-11-13 13:34:08 +0000170#ifdef __ARM_FEATURE_FP16_VECTOR_ARITHMETIC
Sanghoon Lee70f82912017-08-24 14:21:24 +0100171TEST_SUITE(F16)
Michele Di Giorgio4a616532020-06-04 15:05:38 +0100172FIXTURE_DATA_TEST_CASE(RunSmall, NEArithmeticAdditionFixture<half>, framework::DatasetMode::ALL, combine(combine(combine(datasets::SmallShapes(), ArithmeticAdditionFP16Dataset),
173 framework::dataset::make("ConvertPolicy", { ConvertPolicy::SATURATE, ConvertPolicy::WRAP })),
174 framework::dataset::make("InPlace", { false })))
Sanghoon Lee70f82912017-08-24 14:21:24 +0100175{
176 // Validate output
177 validate(Accessor(_target), _reference);
178}
Georgios Pinitasa84faff2018-12-05 18:17:24 +0000179TEST_SUITE_END() // F16
180#endif /* __ARM_FEATURE_FP16_VECTOR_ARITHMETIC */
Sanghoon Lee70f82912017-08-24 14:21:24 +0100181
182TEST_SUITE(F32)
Michele Di Giorgio4a616532020-06-04 15:05:38 +0100183FIXTURE_DATA_TEST_CASE(RunSmall, NEArithmeticAdditionFixture<float>, framework::DatasetMode::PRECOMMIT, combine(combine(combine(datasets::SmallShapes(), ArithmeticAdditionFP32Dataset),
184 framework::dataset::make("ConvertPolicy", { ConvertPolicy::SATURATE, ConvertPolicy::WRAP })),
185 framework::dataset::make("InPlace", { false })))
Sanghoon Lee70f82912017-08-24 14:21:24 +0100186{
187 // Validate output
188 validate(Accessor(_target), _reference);
189}
190
Michele Di Giorgio4a616532020-06-04 15:05:38 +0100191FIXTURE_DATA_TEST_CASE(RunLarge, NEArithmeticAdditionFixture<float>, framework::DatasetMode::NIGHTLY, combine(combine(combine(datasets::LargeShapes(), ArithmeticAdditionFP32Dataset),
192 framework::dataset::make("ConvertPolicy", { ConvertPolicy::SATURATE, ConvertPolicy::WRAP })),
193 framework::dataset::make("InPlace", { false })))
Sanghoon Lee70f82912017-08-24 14:21:24 +0100194{
195 // Validate output
196 validate(Accessor(_target), _reference);
197}
Diego Lopez Recas0021d752017-12-18 14:42:56 +0000198
199template <typename T>
200using NEArithmeticAdditionBroadcastFixture = ArithmeticAdditionBroadcastValidationFixture<Tensor, Accessor, NEArithmeticAddition, T>;
201
Michele Di Giorgio4a616532020-06-04 15:05:38 +0100202FIXTURE_DATA_TEST_CASE(RunSmallBroadcast, NEArithmeticAdditionBroadcastFixture<float>, framework::DatasetMode::PRECOMMIT, combine(combine(combine(datasets::SmallShapesBroadcast(),
Diego Lopez Recas0021d752017-12-18 14:42:56 +0000203 ArithmeticAdditionFP32Dataset),
Michele Di Giorgio4a616532020-06-04 15:05:38 +0100204 framework::dataset::make("ConvertPolicy", { ConvertPolicy::SATURATE, ConvertPolicy::WRAP })),
205 framework::dataset::make("InPlace", { false })))
Diego Lopez Recas0021d752017-12-18 14:42:56 +0000206{
207 // Validate output
208 validate(Accessor(_target), _reference);
209}
210
Michele Di Giorgio4a616532020-06-04 15:05:38 +0100211FIXTURE_DATA_TEST_CASE(RunSmallBroadcastInPlace, NEArithmeticAdditionBroadcastFixture<float>, framework::DatasetMode::ALL, combine(combine(combine(datasets::SmallShapesBroadcastInPlace(),
Diego Lopez Recas0021d752017-12-18 14:42:56 +0000212 ArithmeticAdditionFP32Dataset),
Michele Di Giorgio4a616532020-06-04 15:05:38 +0100213 framework::dataset::make("ConvertPolicy", { ConvertPolicy::SATURATE, ConvertPolicy::WRAP })),
214 framework::dataset::make("InPlace", { true })))
215{
216 // Validate output
217 validate(Accessor(_target), _reference);
218}
219
220FIXTURE_DATA_TEST_CASE(RunLargeBroadcast, NEArithmeticAdditionBroadcastFixture<float>, framework::DatasetMode::NIGHTLY, combine(combine(combine(datasets::LargeShapesBroadcast(),
221 ArithmeticAdditionFP32Dataset),
222 framework::dataset::make("ConvertPolicy", { ConvertPolicy::SATURATE, ConvertPolicy::WRAP })),
223 framework::dataset::make("InPlace", { false })))
Diego Lopez Recas0021d752017-12-18 14:42:56 +0000224{
225 // Validate output
226 validate(Accessor(_target), _reference);
227}
Georgios Pinitasa84faff2018-12-05 18:17:24 +0000228TEST_SUITE_END() // F32
229TEST_SUITE_END() // Float
Sanghoon Lee70f82912017-08-24 14:21:24 +0100230
Georgios Pinitasa84faff2018-12-05 18:17:24 +0000231template <typename T>
232using NEArithmeticAdditionQuantizedFixture = ArithmeticAdditionValidationQuantizedFixture<Tensor, Accessor, NEArithmeticAddition, T>;
233
234TEST_SUITE(Quantized)
235TEST_SUITE(QASYMM8)
Georgios Pinitasa84faff2018-12-05 18:17:24 +0000236FIXTURE_DATA_TEST_CASE(RunSmall,
237 NEArithmeticAdditionQuantizedFixture<uint8_t>,
238 framework::DatasetMode::PRECOMMIT,
239 combine(combine(combine(combine(combine(datasets::SmallShapes(), ArithmeticAdditionQASYMM8Dataset),
Manuel Bottini6a2b6e82019-02-25 13:50:11 +0000240 framework::dataset::make("ConvertPolicy", { ConvertPolicy::SATURATE })),
Manuel Bottini3689fcd2019-06-14 17:18:12 +0100241 framework::dataset::make("Src0QInfo", { QuantizationInfo(5.f / 255.f, 20) })),
242 framework::dataset::make("Src1QInfo", { QuantizationInfo(2.f / 255.f, 10) })),
243 framework::dataset::make("OutQInfo", { QuantizationInfo(1.f / 255.f, 5) })))
Georgios Pinitasa84faff2018-12-05 18:17:24 +0000244{
245 // Validate output
Vidhya Sudhan Loganathanf8b65202019-02-01 09:49:50 +0000246#ifdef __aarch64__
247 validate(Accessor(_target), _reference);
Manuel Bottini6a2b6e82019-02-25 13:50:11 +0000248#else //__aarch64__
Manuel Bottini65383e22019-06-24 14:25:32 +0100249 validate(Accessor(_target), _reference, tolerance_quant);
Vidhya Sudhan Loganathanf8b65202019-02-01 09:49:50 +0000250#endif //__aarch64__
Georgios Pinitasa84faff2018-12-05 18:17:24 +0000251}
252TEST_SUITE_END() // QASYMM8
Michalis Spyroubc4d7c22019-12-03 15:11:09 +0000253
254TEST_SUITE(QASYMM8_SIGNED)
255FIXTURE_DATA_TEST_CASE(RunSmall,
256 NEArithmeticAdditionQuantizedFixture<int8_t>,
257 framework::DatasetMode::ALL,
258 combine(combine(combine(combine(combine(datasets::SmallShapes(), ArithmeticAdditionQASYMM8SIGNEDDataset),
259 framework::dataset::make("ConvertPolicy", { ConvertPolicy::SATURATE })),
260 framework::dataset::make("Src0QInfo", { QuantizationInfo(0.5f, 20) })),
261 framework::dataset::make("Src1QInfo", { QuantizationInfo(0.5f, 10) })),
262 framework::dataset::make("OutQInfo", { QuantizationInfo(0.5f, 5) })))
Manuel Bottini3689fcd2019-06-14 17:18:12 +0100263{
Michalis Spyroubc4d7c22019-12-03 15:11:09 +0000264 // Validate output
265#ifdef __aarch64__
266 validate(Accessor(_target), _reference);
267#else //__aarch64__
268 validate(Accessor(_target), _reference, tolerance_quant);
269#endif //__aarch64__
Manuel Bottini3689fcd2019-06-14 17:18:12 +0100270}
Michalis Spyroubc4d7c22019-12-03 15:11:09 +0000271TEST_SUITE_END() // QASYMM8_SIGNED
Manuel Bottini3689fcd2019-06-14 17:18:12 +0100272
Michalis Spyroubc4d7c22019-12-03 15:11:09 +0000273TEST_SUITE(QSYMM16)
Manuel Bottini3689fcd2019-06-14 17:18:12 +0100274FIXTURE_DATA_TEST_CASE(RunSmall,
275 NEArithmeticAdditionQuantizedFixture<int16_t>,
276 framework::DatasetMode::PRECOMMIT,
277 combine(combine(combine(combine(combine(datasets::SmallShapes(), ArithmeticAdditionQSYMM16Dataset),
278 framework::dataset::make("ConvertPolicy", { ConvertPolicy::SATURATE })),
279 framework::dataset::make("Src0QInfo", { QuantizationInfo(1.f / 32768.f, 0), QuantizationInfo(5.f / 32768.f, 0) })),
280 framework::dataset::make("Src1QInfo", { QuantizationInfo(2.f / 32768.f, 0), QuantizationInfo(5.f / 32768.f, 0) })),
281 framework::dataset::make("OutQInfo", { QuantizationInfo(5.f / 32768.f, 0) })))
282{
283 // Validate output
Manuel Bottini65383e22019-06-24 14:25:32 +0100284#ifdef __aarch64__
Manuel Bottini3689fcd2019-06-14 17:18:12 +0100285 validate(Accessor(_target), _reference);
Manuel Bottini65383e22019-06-24 14:25:32 +0100286#else //__aarch64__
287 validate(Accessor(_target), _reference, tolerance_quant);
288#endif //__aarch64__
Manuel Bottini3689fcd2019-06-14 17:18:12 +0100289}
290TEST_SUITE_END() // QSYMM16
Georgios Pinitasa84faff2018-12-05 18:17:24 +0000291TEST_SUITE_END() // Quantized
292
293TEST_SUITE_END() // ArithmeticAddition
294TEST_SUITE_END() // NEON
Sanghoon Lee70f82912017-08-24 14:21:24 +0100295} // namespace validation
296} // namespace test
297} // namespace arm_compute