blob: 6a75b00b9b2e46baa2c4967e86d846855791f6a4 [file] [log] [blame]
John Richardsondd715f22017-09-18 16:10:48 +01001/*
Michele Di Giorgio9428a182020-03-30 14:10:20 +01002 * Copyright (c) 2017-2020 ARM Limited.
John Richardsondd715f22017-09-18 16:10:48 +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,
21 * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
22 * SOFTWARE.
23 */
Manuel Bottini7bb56c62019-06-26 15:17:09 +010024#include "arm_compute/core/Rounding.h"
John Richardsondd715f22017-09-18 16:10:48 +010025#include "arm_compute/runtime/NEON/functions/NEPixelWiseMultiplication.h"
26#include "tests/NEON/Accessor.h"
27#include "tests/PaddingCalculator.h"
28#include "tests/datasets/ConvertPolicyDataset.h"
29#include "tests/datasets/ShapeDatasets.h"
30#include "tests/framework/Macros.h"
31#include "tests/validation/Validation.h"
32#include "tests/validation/fixtures/PixelWiseMultiplicationFixture.h"
33
34namespace arm_compute
35{
36namespace test
37{
38namespace validation
39{
40namespace
41{
42const float scale_unity = 1.f;
43const float scale_255 = 1.f / 255.f;
44const float scale_other = 1.f / 32768.f;
45
Manuel Bottini7bb56c62019-06-26 15:17:09 +010046constexpr AbsoluteTolerance<float> tolerance_qasymm8(1); /**< Tolerance value for comparing reference's output against implementation's output for 8-bit quantized asymmetric data types */
47constexpr AbsoluteTolerance<float> tolerance_qsymm16(1); /**< Tolerance value for comparing reference's output against implementation's output for 16-bit quantized symmetric data types */
48
49const auto PixelWiseMultiplicationQSYMM16QuantDataset = combine(combine(
50 framework::dataset::make("Src0QInfo", { QuantizationInfo(1.f / 32768.f, 0) }),
51 framework::dataset::make("Src1QInfo", { QuantizationInfo(2.f / 32768.f, 0) })),
52 framework::dataset::make("OutQInfo", { QuantizationInfo(5.f / 32768.f, 0) }));
53
54const auto PixelWiseMultiplicationQASYMM8QuantDataset = combine(combine(
55 framework::dataset::make("Src0QInfo", { QuantizationInfo(5.f / 32768.f, 0) }),
56 framework::dataset::make("Src1QInfo", { QuantizationInfo(2.f / 32768.f, 0) })),
57 framework::dataset::make("OutQInfo", { QuantizationInfo(1.f / 32768.f, 0) }));
58
59const auto PixelWiseMultiplicationPolicySTNUDataset = combine(
60 framework::dataset::make("ConvertPolicy", { ConvertPolicy::SATURATE }),
61 framework::dataset::make("RoundingPolicy", { RoundingPolicy::TO_NEAREST_UP }));
62
63const auto PixelWiseMultiplicationPolicySTZDataset = combine(
64 framework::dataset::make("ConvertPolicy", { ConvertPolicy::SATURATE }),
65 framework::dataset::make("RoundingPolicy", { RoundingPolicy::TO_ZERO }));
66
John Richardsondd715f22017-09-18 16:10:48 +010067#define DEFAULT_VALIDATE validate(Accessor(_target), _reference);
John Richardson9c450cc2017-11-22 12:00:41 +000068#define VALIDATE(TYPE, TOLERANCE) validate(Accessor(_target), _reference, AbsoluteTolerance<TYPE>(TOLERANCE), 0.f);
John Richardsondd715f22017-09-18 16:10:48 +010069#define WRAP_VALIDATE(TYPE, TOLERANCE) validate_wrap(Accessor(_target), _reference, AbsoluteTolerance<TYPE>(TOLERANCE), 0.f);
70
71// *INDENT-OFF*
72// clang-format off
John Richardsondd715f22017-09-18 16:10:48 +010073#define PIXEL_WISE_MULTIPLICATION_FIXTURE_DATA_TEST_CASE(TEST_NAME, FIXTURE, MODE, SHAPES, DT1, DT2, SCALE, RP, VALIDATE) \
74 FIXTURE_DATA_TEST_CASE(TEST_NAME, NEPixelWiseMultiplication##FIXTURE, framework::DatasetMode::MODE, \
75 combine(combine(combine(combine(combine( \
76 datasets::SHAPES, \
77 framework::dataset::make("DataType1", DataType::DT1)), \
78 framework::dataset::make("DataType2", DataType::DT2)), \
79 framework::dataset::make("Scale", std::move(SCALE))), \
80 datasets::ConvertPolicies()), \
81 framework::dataset::make("RoundingPolicy", RoundingPolicy::RP))) \
82 { \
83 VALIDATE \
84 }
Manuel Bottini79fa9a22019-02-22 17:54:22 +000085
John Richardsondd715f22017-09-18 16:10:48 +010086// *INDENT-ON*
87// clang-format on
John Richardsondd715f22017-09-18 16:10:48 +010088} // namespace
89
Pablo Tello52ea9c22019-12-10 11:28:53 +000090using NEPixelWiseMultiplicationQASYMM8Fixture = PixelWiseMultiplicationValidationQuantizedFixture<Tensor, Accessor, NEPixelWiseMultiplication, uint8_t, uint8_t>;
91using NEPixelWiseMultiplicationQASYMM8SignedFixture = PixelWiseMultiplicationValidationQuantizedFixture<Tensor, Accessor, NEPixelWiseMultiplication, int8_t, int8_t>;
92using NEPixelWiseMultiplicationQSYMM16Fixture = PixelWiseMultiplicationValidationQuantizedFixture<Tensor, Accessor, NEPixelWiseMultiplication, int16_t, int16_t>;
Michele Di Giorgio9428a182020-03-30 14:10:20 +010093using NEPixelWiseMultiplicationQSYMM16ToS32Fixture = PixelWiseMultiplicationValidationQuantizedFixture<Tensor, Accessor, NEPixelWiseMultiplication, int16_t, int16_t, int32_t>;
John Richardsondd715f22017-09-18 16:10:48 +010094template <typename T>
95using NEPixelWiseMultiplicationToU8Fixture = PixelWiseMultiplicationValidationFixture<Tensor, Accessor, NEPixelWiseMultiplication, T, uint8_t>;
96template <typename T>
97using NEPixelWiseMultiplicationToS16Fixture = PixelWiseMultiplicationValidationFixture<Tensor, Accessor, NEPixelWiseMultiplication, T, int16_t>;
98template <typename T>
99using NEPixelWiseMultiplicationToF16Fixture = PixelWiseMultiplicationValidationFixture<Tensor, Accessor, NEPixelWiseMultiplication, T, half_float::half>;
100template <typename T>
101using NEPixelWiseMultiplicationToF32Fixture = PixelWiseMultiplicationValidationFixture<Tensor, Accessor, NEPixelWiseMultiplication, T, float>;
102template <typename T>
Michalis Spyrou861f0db2018-02-26 16:47:58 +0000103using NEPixelWiseMultiplicationBroadcastFixture = PixelWiseMultiplicationBroadcastValidationFixture<Tensor, Accessor, NEPixelWiseMultiplication, T, float>;
John Richardsondd715f22017-09-18 16:10:48 +0100104
105TEST_SUITE(NEON)
106TEST_SUITE(PixelWiseMultiplication)
107
Ioan-Cristian Szabo754e9522017-11-28 18:29:43 +0000108// *INDENT-OFF*
109// clang-format off
Pablo Tello52ea9c22019-12-10 11:28:53 +0000110DATA_TEST_CASE(Validate, framework::DatasetMode::ALL, zip(zip(zip(zip(zip(
111 framework::dataset::make("Input1Info", { TensorInfo(TensorShape(32U, 13U, 2U), 1, DataType::U8), //1 Ok
112 TensorInfo(TensorShape(32U, 13U, 2U), 1, DataType::U8), //2 Ok
113 TensorInfo(TensorShape(27U, 13U, 2U), 1, DataType::U8), //3 Window shrink
114 TensorInfo(TensorShape(32U, 13U, 2U), 1, DataType::U8), //4 Invalid scale
115 TensorInfo(TensorShape(32U, 13U, 2U), 1, DataType::U8), //5 Invalid data type combination
116 TensorInfo(TensorShape(32U, 13U, 2U), 1, DataType::F32), //6 Mismatching shapes
117 TensorInfo(TensorShape(32U, 13U, 2U), 1, DataType::F32), //7 Mismatching data type
118 TensorInfo(TensorShape(32U, 13U, 2U), 1, DataType::QASYMM8), //8 Mismatching data type
119 TensorInfo(TensorShape(32U, 13U, 2U), 1, DataType::QASYMM8_SIGNED), //9 Ok
120 TensorInfo(TensorShape(32U, 13U, 2U), 1, DataType::QASYMM8_SIGNED), //10 Mismatching data type
121 TensorInfo(TensorShape(32U, 13U, 2U), 1, DataType::QASYMM8), //11 Mismatching data type
122 TensorInfo(TensorShape(32U, 13U, 2U), 1, DataType::QASYMM8), //12 Ok
123 TensorInfo(TensorShape(32U, 13U, 2U), 1, DataType::QASYMM8_SIGNED), //13 Quantized cannot do WRAP
Ioan-Cristian Szabo754e9522017-11-28 18:29:43 +0000124 }),
125 framework::dataset::make("Input2Info",{ TensorInfo(TensorShape(32U, 13U, 2U), 1, DataType::U8),
126 TensorInfo(TensorShape(32U, 13U, 2U), 1, DataType::U8),
127 TensorInfo(TensorShape(27U, 13U, 2U), 1, DataType::U8),
128 TensorInfo(TensorShape(32U, 13U, 2U), 1, DataType::U8),
129 TensorInfo(TensorShape(32U, 13U, 2U), 1, DataType::S16),
130 TensorInfo(TensorShape(48U, 11U, 2U), 1, DataType::F32),
Vidhya Sudhan Loganathan0fc25452018-06-18 14:40:56 +0100131 TensorInfo(TensorShape(32U, 13U, 2U), 1, DataType::U8),
Manuel Bottini79fa9a22019-02-22 17:54:22 +0000132 TensorInfo(TensorShape(32U, 13U, 2U), 1, DataType::U8),
Pablo Tello52ea9c22019-12-10 11:28:53 +0000133 TensorInfo(TensorShape(32U, 13U, 2U), 1, DataType::QASYMM8_SIGNED),
134 TensorInfo(TensorShape(32U, 13U, 2U), 1, DataType::QASYMM8),
135 TensorInfo(TensorShape(32U, 13U, 2U), 1, DataType::QASYMM8_SIGNED),
136 TensorInfo(TensorShape(32U, 13U, 2U), 1, DataType::QASYMM8),
137 TensorInfo(TensorShape(32U, 13U, 2U), 1, DataType::QASYMM8_SIGNED),
Ioan-Cristian Szabo754e9522017-11-28 18:29:43 +0000138 })),
139 framework::dataset::make("OutputInfo",{ TensorInfo(TensorShape(32U, 13U, 2U), 1, DataType::S16),
140 TensorInfo(TensorShape(32U, 13U, 2U), 1, DataType::U8),
141 TensorInfo(TensorShape(27U, 13U, 2U), 1, DataType::U8),
142 TensorInfo(TensorShape(32U, 13U, 2U), 1, DataType::U8),
143 TensorInfo(TensorShape(32U, 13U, 2U), 1, DataType::U8),
144 TensorInfo(TensorShape(48U, 11U, 2U), 1, DataType::F32),
Vidhya Sudhan Loganathan0fc25452018-06-18 14:40:56 +0100145 TensorInfo(TensorShape(32U, 13U, 2U), 1, DataType::U8),
Manuel Bottini79fa9a22019-02-22 17:54:22 +0000146 TensorInfo(TensorShape(32U, 13U, 2U), 1, DataType::U8),
Pablo Tello52ea9c22019-12-10 11:28:53 +0000147 TensorInfo(TensorShape(32U, 13U, 2U), 1, DataType::QASYMM8_SIGNED),
148 TensorInfo(TensorShape(32U, 13U, 2U), 1, DataType::QASYMM8_SIGNED),
149 TensorInfo(TensorShape(32U, 13U, 2U), 1, DataType::QASYMM8_SIGNED),
150 TensorInfo(TensorShape(32U, 13U, 2U), 1, DataType::QASYMM8),
151 TensorInfo(TensorShape(32U, 13U, 2U), 1, DataType::QASYMM8_SIGNED),
Ioan-Cristian Szabo754e9522017-11-28 18:29:43 +0000152 })),
Pablo Tello52ea9c22019-12-10 11:28:53 +0000153 framework::dataset::make("Scale",{ scale_unity,
154 scale_unity,
155 scale_unity,
156 -1.f,
157 scale_unity,
158 scale_unity,
159 scale_unity,
160 scale_unity,
161 scale_unity,
162 scale_unity,
163 scale_unity,
164 scale_unity,
165 scale_unity})),
166 framework::dataset::make("OverflowPolicy",{
167 ConvertPolicy::WRAP,
168 ConvertPolicy::WRAP,
169 ConvertPolicy::WRAP,
170 ConvertPolicy::WRAP,
171 ConvertPolicy::WRAP,
172 ConvertPolicy::WRAP,
173 ConvertPolicy::WRAP,
174 ConvertPolicy::WRAP,
175 ConvertPolicy::SATURATE,
176 ConvertPolicy::WRAP,
177 ConvertPolicy::WRAP,
178 ConvertPolicy::SATURATE,
179 ConvertPolicy::WRAP,
180 })),
181
182 framework::dataset::make("Expected", { true, true, false, false, false, false, false, false, true , false, false, true, false })),
183 input1_info, input2_info, output_info, scale, policy, expected)
Ioan-Cristian Szabo754e9522017-11-28 18:29:43 +0000184{
Pablo Tello52ea9c22019-12-10 11:28:53 +0000185 bool has_error = bool(NEPixelWiseMultiplication::validate(&input1_info.clone()->set_is_resizable(false), &input2_info.clone()->set_is_resizable(false), &output_info.clone()->set_is_resizable(false), scale, policy, RoundingPolicy::TO_ZERO));
Ioan-Cristian Szabo754e9522017-11-28 18:29:43 +0000186 ARM_COMPUTE_EXPECT(has_error == expected, framework::LogLevel::ERRORS);
187}
188// clang-format on
189// *INDENT-ON*
190
Manuel Bottini7bb56c62019-06-26 15:17:09 +0100191TEST_SUITE(Quantized)
Pablo Tello52ea9c22019-12-10 11:28:53 +0000192TEST_SUITE(QASYMM8_SIGNED)
193TEST_SUITE(Scale255)
Michele Di Giorgio9428a182020-03-30 14:10:20 +0100194FIXTURE_DATA_TEST_CASE(RunSmall, NEPixelWiseMultiplicationQASYMM8SignedFixture, framework::DatasetMode::PRECOMMIT, combine(combine(combine(combine(combine(combine(datasets::SmallShapes(),
195 framework::dataset::make("DataTypeIn1", DataType::QASYMM8_SIGNED)),
196 framework::dataset::make("DataTypeIn2", DataType::QASYMM8_SIGNED)),
197 framework::dataset::make("DataTypeOut", DataType::QASYMM8_SIGNED)),
Pablo Tello52ea9c22019-12-10 11:28:53 +0000198 framework::dataset::make("Scale", { scale_unity })),
199 PixelWiseMultiplicationPolicySTZDataset),
200 PixelWiseMultiplicationQASYMM8QuantDataset))
201{
202 // Validate output
203 validate(Accessor(_target), _reference, tolerance_qasymm8);
204}
205TEST_SUITE_END() // Scale255
206TEST_SUITE_END() // QASYMM8
207
Manuel Bottini7bb56c62019-06-26 15:17:09 +0100208TEST_SUITE(QASYMM8)
Manuel Bottini79fa9a22019-02-22 17:54:22 +0000209TEST_SUITE(Scale255)
Michele Di Giorgio9428a182020-03-30 14:10:20 +0100210FIXTURE_DATA_TEST_CASE(RunSmall, NEPixelWiseMultiplicationQASYMM8Fixture, framework::DatasetMode::PRECOMMIT, combine(combine(combine(combine(combine(combine(datasets::SmallShapes(),
211 framework::dataset::make("DataTypeIn1", DataType::QASYMM8)),
212 framework::dataset::make("DataTypeIn2", DataType::QASYMM8)),
213 framework::dataset::make("DataTypeOut", DataType::QASYMM8)),
Manuel Bottini7bb56c62019-06-26 15:17:09 +0100214 framework::dataset::make("Scale", { scale_255 })),
215 PixelWiseMultiplicationPolicySTNUDataset),
216 PixelWiseMultiplicationQASYMM8QuantDataset))
217{
218 // Validate output
219 validate(Accessor(_target), _reference, tolerance_qasymm8);
220}
Michele Di Giorgio9428a182020-03-30 14:10:20 +0100221FIXTURE_DATA_TEST_CASE(RunLarge, NEPixelWiseMultiplicationQASYMM8Fixture, framework::DatasetMode::NIGHTLY, combine(combine(combine(combine(combine(combine(datasets::LargeShapes(),
222 framework::dataset::make("DataTypeIn1", DataType::QASYMM8)),
223 framework::dataset::make("DataTypeIn2", DataType::QASYMM8)),
224 framework::dataset::make("DataTypeOut", DataType::QASYMM8)),
Manuel Bottini7bb56c62019-06-26 15:17:09 +0100225 framework::dataset::make("Scale", { scale_255 })),
226 PixelWiseMultiplicationPolicySTNUDataset),
227 PixelWiseMultiplicationQASYMM8QuantDataset))
228{
229 // Validate output
230 validate(Accessor(_target), _reference, tolerance_qasymm8);
231}
Manuel Bottini79fa9a22019-02-22 17:54:22 +0000232TEST_SUITE_END() // Scale255
Manuel Bottini79fa9a22019-02-22 17:54:22 +0000233TEST_SUITE(ScaleUnity)
Michele Di Giorgio9428a182020-03-30 14:10:20 +0100234FIXTURE_DATA_TEST_CASE(RunSmall, NEPixelWiseMultiplicationQASYMM8Fixture, framework::DatasetMode::PRECOMMIT, combine(combine(combine(combine(combine(combine(datasets::SmallShapes(),
235 framework::dataset::make("DataTypeIn1", DataType::QASYMM8)),
236 framework::dataset::make("DataTypeIn2", DataType::QASYMM8)),
237 framework::dataset::make("DataTypeOut", DataType::QASYMM8)),
Manuel Bottini7bb56c62019-06-26 15:17:09 +0100238 framework::dataset::make("Scale", { scale_unity })),
239 PixelWiseMultiplicationPolicySTZDataset),
240 PixelWiseMultiplicationQASYMM8QuantDataset))
241{
242 // Validate output
243 validate(Accessor(_target), _reference, tolerance_qasymm8);
244}
Michele Di Giorgio9428a182020-03-30 14:10:20 +0100245FIXTURE_DATA_TEST_CASE(RunLarge, NEPixelWiseMultiplicationQASYMM8Fixture, framework::DatasetMode::NIGHTLY, combine(combine(combine(combine(combine(combine(datasets::LargeShapes(),
246 framework::dataset::make("DataTypeIn1", DataType::QASYMM8)),
247 framework::dataset::make("DataTypeIn2", DataType::QASYMM8)),
248 framework::dataset::make("DataTypeOut", DataType::QASYMM8)),
Manuel Bottini7bb56c62019-06-26 15:17:09 +0100249 framework::dataset::make("Scale", { scale_unity })),
250 PixelWiseMultiplicationPolicySTZDataset),
251 PixelWiseMultiplicationQASYMM8QuantDataset))
252{
253 // Validate output
254 validate(Accessor(_target), _reference, tolerance_qasymm8);
255}
Manuel Bottini79fa9a22019-02-22 17:54:22 +0000256TEST_SUITE_END() // ScaleUnity
Manuel Bottini79fa9a22019-02-22 17:54:22 +0000257TEST_SUITE(ScaleOther)
Michele Di Giorgio9428a182020-03-30 14:10:20 +0100258FIXTURE_DATA_TEST_CASE(RunSmall, NEPixelWiseMultiplicationQASYMM8Fixture, framework::DatasetMode::PRECOMMIT, combine(combine(combine(combine(combine(combine(datasets::SmallShapes(),
259 framework::dataset::make("DataTypeIn1", DataType::QASYMM8)),
260 framework::dataset::make("DataTypeIn2", DataType::QASYMM8)),
261 framework::dataset::make("DataTypeOut", DataType::QASYMM8)),
Manuel Bottini7bb56c62019-06-26 15:17:09 +0100262 framework::dataset::make("Scale", { scale_other })),
263 PixelWiseMultiplicationPolicySTZDataset),
264 PixelWiseMultiplicationQASYMM8QuantDataset))
265{
266 // Validate output
267 validate(Accessor(_target), _reference, tolerance_qasymm8);
268}
Michele Di Giorgio9428a182020-03-30 14:10:20 +0100269FIXTURE_DATA_TEST_CASE(RunLarge, NEPixelWiseMultiplicationQASYMM8Fixture, framework::DatasetMode::NIGHTLY, combine(combine(combine(combine(combine(combine(datasets::LargeShapes(),
270 framework::dataset::make("DataTypeIn1", DataType::QASYMM8)),
271 framework::dataset::make("DataTypeIn2", DataType::QASYMM8)),
272 framework::dataset::make("DataTypeOut", DataType::QASYMM8)),
Manuel Bottini7bb56c62019-06-26 15:17:09 +0100273 framework::dataset::make("Scale", { scale_other })),
274 PixelWiseMultiplicationPolicySTZDataset),
275 PixelWiseMultiplicationQASYMM8QuantDataset))
276{
277 // Validate output
278 validate(Accessor(_target), _reference, tolerance_qasymm8);
279}
Manuel Bottini79fa9a22019-02-22 17:54:22 +0000280TEST_SUITE_END() // ScaleOther
Manuel Bottini7bb56c62019-06-26 15:17:09 +0100281TEST_SUITE_END() // QASYMM8
282TEST_SUITE(QSYMM16)
283TEST_SUITE(Scale255)
Michele Di Giorgio9428a182020-03-30 14:10:20 +0100284FIXTURE_DATA_TEST_CASE(RunSmall, NEPixelWiseMultiplicationQSYMM16Fixture, framework::DatasetMode::PRECOMMIT, combine(combine(combine(combine(combine(combine(datasets::SmallShapes(),
285 framework::dataset::make("DataTypeIn1", DataType::QSYMM16)),
286 framework::dataset::make("DataTypeIn2", DataType::QSYMM16)),
287 framework::dataset::make("DataTypeOut", DataType::QSYMM16)),
Manuel Bottini7bb56c62019-06-26 15:17:09 +0100288 framework::dataset::make("Scale", { scale_255 })),
289 PixelWiseMultiplicationPolicySTNUDataset),
290 PixelWiseMultiplicationQSYMM16QuantDataset))
291{
292 // Validate output
Michalis Spyroued516502019-07-05 15:20:09 +0100293 validate(Accessor(_target), _reference, tolerance_qsymm16);
Manuel Bottini7bb56c62019-06-26 15:17:09 +0100294}
Michele Di Giorgio9428a182020-03-30 14:10:20 +0100295FIXTURE_DATA_TEST_CASE(RunLarge, NEPixelWiseMultiplicationQSYMM16Fixture, framework::DatasetMode::NIGHTLY, combine(combine(combine(combine(combine(combine(datasets::LargeShapes(),
296 framework::dataset::make("DataTypeIn1", DataType::QSYMM16)),
297 framework::dataset::make("DataTypeIn2", DataType::QSYMM16)),
298 framework::dataset::make("DataTypeOut", DataType::QSYMM16)),
Manuel Bottini7bb56c62019-06-26 15:17:09 +0100299 framework::dataset::make("Scale", { scale_255 })),
300 PixelWiseMultiplicationPolicySTNUDataset),
301 PixelWiseMultiplicationQSYMM16QuantDataset))
302{
303 // Validate output
Michalis Spyroued516502019-07-05 15:20:09 +0100304 validate(Accessor(_target), _reference, tolerance_qsymm16);
Manuel Bottini7bb56c62019-06-26 15:17:09 +0100305}
306TEST_SUITE_END() // Scale255
307TEST_SUITE(ScaleUnity)
Michele Di Giorgio9428a182020-03-30 14:10:20 +0100308FIXTURE_DATA_TEST_CASE(RunSmall, NEPixelWiseMultiplicationQSYMM16Fixture, framework::DatasetMode::PRECOMMIT, combine(combine(combine(combine(combine(combine(datasets::SmallShapes(),
309 framework::dataset::make("DataTypeIn1", DataType::QSYMM16)),
310 framework::dataset::make("DataTypeIn2", DataType::QSYMM16)),
311 framework::dataset::make("DataTypeOut", DataType::QSYMM16)),
Manuel Bottini7bb56c62019-06-26 15:17:09 +0100312 framework::dataset::make("Scale", { scale_unity })),
313 PixelWiseMultiplicationPolicySTZDataset),
314 PixelWiseMultiplicationQSYMM16QuantDataset))
315{
316 // Validate output
Michalis Spyroued516502019-07-05 15:20:09 +0100317 validate(Accessor(_target), _reference, tolerance_qsymm16);
Manuel Bottini7bb56c62019-06-26 15:17:09 +0100318}
Michele Di Giorgio9428a182020-03-30 14:10:20 +0100319FIXTURE_DATA_TEST_CASE(RunLarge, NEPixelWiseMultiplicationQSYMM16Fixture, framework::DatasetMode::NIGHTLY, combine(combine(combine(combine(combine(combine(datasets::LargeShapes(),
320 framework::dataset::make("DataTypeIn1", DataType::QSYMM16)),
321 framework::dataset::make("DataTypeIn2", DataType::QSYMM16)),
322 framework::dataset::make("DataTypeOut", DataType::QSYMM16)),
Manuel Bottini7bb56c62019-06-26 15:17:09 +0100323 framework::dataset::make("Scale", { scale_unity })),
324 PixelWiseMultiplicationPolicySTZDataset),
325 PixelWiseMultiplicationQSYMM16QuantDataset))
326{
327 // Validate output
Michalis Spyroued516502019-07-05 15:20:09 +0100328 validate(Accessor(_target), _reference, tolerance_qsymm16);
Manuel Bottini7bb56c62019-06-26 15:17:09 +0100329}
330TEST_SUITE_END() // ScaleUnity
331TEST_SUITE(ScaleOther)
Michele Di Giorgio9428a182020-03-30 14:10:20 +0100332FIXTURE_DATA_TEST_CASE(RunSmall, NEPixelWiseMultiplicationQSYMM16Fixture, framework::DatasetMode::PRECOMMIT, combine(combine(combine(combine(combine(combine(datasets::SmallShapes(),
333 framework::dataset::make("DataTypeIn1", DataType::QSYMM16)),
334 framework::dataset::make("DataTypeIn2", DataType::QSYMM16)),
335 framework::dataset::make("DataTypeOut", DataType::QSYMM16)),
Manuel Bottini7bb56c62019-06-26 15:17:09 +0100336 framework::dataset::make("Scale", { scale_other })),
337 PixelWiseMultiplicationPolicySTZDataset),
338 PixelWiseMultiplicationQSYMM16QuantDataset))
339{
340 // Validate output
Michalis Spyroued516502019-07-05 15:20:09 +0100341 validate(Accessor(_target), _reference, tolerance_qsymm16);
Manuel Bottini7bb56c62019-06-26 15:17:09 +0100342}
Michele Di Giorgio9428a182020-03-30 14:10:20 +0100343FIXTURE_DATA_TEST_CASE(RunLarge, NEPixelWiseMultiplicationQSYMM16Fixture, framework::DatasetMode::NIGHTLY, combine(combine(combine(combine(combine(combine(datasets::LargeShapes(),
344 framework::dataset::make("DataTypeIn1", DataType::QSYMM16)),
345 framework::dataset::make("DataTypeIn2", DataType::QSYMM16)),
346 framework::dataset::make("DataTypeOut", DataType::QSYMM16)),
Manuel Bottini7bb56c62019-06-26 15:17:09 +0100347 framework::dataset::make("Scale", { scale_other })),
348 PixelWiseMultiplicationPolicySTZDataset),
349 PixelWiseMultiplicationQSYMM16QuantDataset))
350{
351 // Validate output
Michalis Spyroued516502019-07-05 15:20:09 +0100352 validate(Accessor(_target), _reference, tolerance_qsymm16);
Manuel Bottini7bb56c62019-06-26 15:17:09 +0100353}
354TEST_SUITE_END() // ScaleOther
355TEST_SUITE_END() // QSYMM16
Michele Di Giorgio9428a182020-03-30 14:10:20 +0100356TEST_SUITE(QSYMM16toS32)
357FIXTURE_DATA_TEST_CASE(RunSmall, NEPixelWiseMultiplicationQSYMM16ToS32Fixture, framework::DatasetMode::PRECOMMIT, combine(combine(combine(combine(combine(combine(datasets::SmallShapes(),
358 framework::dataset::make("DataTypeIn1", DataType::QSYMM16)),
359 framework::dataset::make("DataTypeIn2", DataType::QSYMM16)),
360 framework::dataset::make("DataTypeOut", DataType::S32)),
361 framework::dataset::make("Scale", { scale_unity })),
362 PixelWiseMultiplicationPolicySTZDataset),
363 PixelWiseMultiplicationQSYMM16QuantDataset))
364{
365 // Validate output
366 validate(Accessor(_target), _reference);
367}
368TEST_SUITE_END() // QSYMM16toS32
Manuel Bottini7bb56c62019-06-26 15:17:09 +0100369TEST_SUITE_END() // Quantized
Manuel Bottini79fa9a22019-02-22 17:54:22 +0000370
John Richardsondd715f22017-09-18 16:10:48 +0100371TEST_SUITE(U8toU8)
372
373TEST_SUITE(Scale255)
John Richardsondd715f22017-09-18 16:10:48 +0100374PIXEL_WISE_MULTIPLICATION_FIXTURE_DATA_TEST_CASE(RunSmall, ToU8Fixture<uint8_t>, PRECOMMIT, SmallShapes(), U8, U8, scale_255, TO_NEAREST_UP, WRAP_VALIDATE(uint8_t, 1))
375PIXEL_WISE_MULTIPLICATION_FIXTURE_DATA_TEST_CASE(RunLarge, ToU8Fixture<uint8_t>, NIGHTLY, LargeShapes(), U8, U8, scale_255, TO_NEAREST_UP, WRAP_VALIDATE(uint8_t, 1))
376TEST_SUITE_END() // Scale255
377
378TEST_SUITE(ScaleUnity)
John Richardsondd715f22017-09-18 16:10:48 +0100379PIXEL_WISE_MULTIPLICATION_FIXTURE_DATA_TEST_CASE(RunSmall, ToU8Fixture<uint8_t>, PRECOMMIT, SmallShapes(), U8, U8, scale_unity, TO_ZERO, DEFAULT_VALIDATE)
380PIXEL_WISE_MULTIPLICATION_FIXTURE_DATA_TEST_CASE(RunLarge, ToU8Fixture<uint8_t>, NIGHTLY, LargeShapes(), U8, U8, scale_unity, TO_ZERO, DEFAULT_VALIDATE)
381TEST_SUITE_END() // ScaleUnity
382
383TEST_SUITE(ScaleOther)
John Richardsondd715f22017-09-18 16:10:48 +0100384PIXEL_WISE_MULTIPLICATION_FIXTURE_DATA_TEST_CASE(RunSmall, ToU8Fixture<uint8_t>, PRECOMMIT, SmallShapes(), U8, U8, scale_other, TO_ZERO, DEFAULT_VALIDATE)
385PIXEL_WISE_MULTIPLICATION_FIXTURE_DATA_TEST_CASE(RunLarge, ToU8Fixture<uint8_t>, NIGHTLY, LargeShapes(), U8, U8, scale_other, TO_ZERO, DEFAULT_VALIDATE)
386TEST_SUITE_END() // ScaleOther
387
388TEST_SUITE_END() // U8toU8
389
390TEST_SUITE(U8toS16)
391
392TEST_SUITE(Scale255)
John Richardsondd715f22017-09-18 16:10:48 +0100393PIXEL_WISE_MULTIPLICATION_FIXTURE_DATA_TEST_CASE(RunSmall, ToS16Fixture<uint8_t>, PRECOMMIT, SmallShapes(), U8, S16, scale_255, TO_NEAREST_UP, WRAP_VALIDATE(int16_t, 2))
394PIXEL_WISE_MULTIPLICATION_FIXTURE_DATA_TEST_CASE(RunLarge, ToS16Fixture<uint8_t>, NIGHTLY, LargeShapes(), U8, S16, scale_255, TO_NEAREST_UP, WRAP_VALIDATE(int16_t, 2))
395TEST_SUITE_END() // Scale255
396
397TEST_SUITE(ScaleUnity)
John Richardsondd715f22017-09-18 16:10:48 +0100398PIXEL_WISE_MULTIPLICATION_FIXTURE_DATA_TEST_CASE(RunSmall, ToS16Fixture<uint8_t>, PRECOMMIT, SmallShapes(), U8, S16, scale_unity, TO_ZERO, DEFAULT_VALIDATE)
399PIXEL_WISE_MULTIPLICATION_FIXTURE_DATA_TEST_CASE(RunLarge, ToS16Fixture<uint8_t>, NIGHTLY, LargeShapes(), U8, S16, scale_unity, TO_ZERO, DEFAULT_VALIDATE)
400TEST_SUITE_END() // ScaleUnity
401
402TEST_SUITE(ScaleOther)
John Richardsondd715f22017-09-18 16:10:48 +0100403PIXEL_WISE_MULTIPLICATION_FIXTURE_DATA_TEST_CASE(RunSmall, ToS16Fixture<uint8_t>, PRECOMMIT, SmallShapes(), U8, S16, scale_other, TO_ZERO, DEFAULT_VALIDATE)
404PIXEL_WISE_MULTIPLICATION_FIXTURE_DATA_TEST_CASE(RunLarge, ToS16Fixture<uint8_t>, NIGHTLY, LargeShapes(), U8, S16, scale_other, TO_ZERO, DEFAULT_VALIDATE)
405TEST_SUITE_END() // ScaleOther
406
407TEST_SUITE_END() // U8toS16
408
409TEST_SUITE(S16toS16)
410
411TEST_SUITE(Scale255)
John Richardsondd715f22017-09-18 16:10:48 +0100412PIXEL_WISE_MULTIPLICATION_FIXTURE_DATA_TEST_CASE(RunSmall, ToS16Fixture<int16_t>, PRECOMMIT, SmallShapes(), S16, S16, scale_255, TO_NEAREST_UP, WRAP_VALIDATE(int16_t, 2))
413PIXEL_WISE_MULTIPLICATION_FIXTURE_DATA_TEST_CASE(RunLarge, ToS16Fixture<int16_t>, NIGHTLY, LargeShapes(), S16, S16, scale_255, TO_NEAREST_UP, WRAP_VALIDATE(int16_t, 2))
414TEST_SUITE_END() // Scale255
415
416TEST_SUITE(ScaleUnity)
John Richardsondd715f22017-09-18 16:10:48 +0100417PIXEL_WISE_MULTIPLICATION_FIXTURE_DATA_TEST_CASE(RunSmall, ToS16Fixture<int16_t>, PRECOMMIT, SmallShapes(), S16, S16, scale_unity, TO_ZERO, DEFAULT_VALIDATE)
418PIXEL_WISE_MULTIPLICATION_FIXTURE_DATA_TEST_CASE(RunLarge, ToS16Fixture<int16_t>, NIGHTLY, LargeShapes(), S16, S16, scale_unity, TO_ZERO, DEFAULT_VALIDATE)
419TEST_SUITE_END() // ScaleUnity
420
421TEST_SUITE(ScaleOther)
John Richardsondd715f22017-09-18 16:10:48 +0100422PIXEL_WISE_MULTIPLICATION_FIXTURE_DATA_TEST_CASE(RunSmall, ToS16Fixture<int16_t>, PRECOMMIT, SmallShapes(), S16, S16, scale_other, TO_ZERO, DEFAULT_VALIDATE)
423PIXEL_WISE_MULTIPLICATION_FIXTURE_DATA_TEST_CASE(RunLarge, ToS16Fixture<int16_t>, NIGHTLY, LargeShapes(), S16, S16, scale_other, TO_ZERO, DEFAULT_VALIDATE)
424TEST_SUITE_END() // ScaleOther
425
426TEST_SUITE_END() // S16toS16
427
Ioan-Cristian Szabo5edbd1c2017-11-13 13:34:08 +0000428#ifdef __ARM_FEATURE_FP16_VECTOR_ARITHMETIC
John Richardsondd715f22017-09-18 16:10:48 +0100429TEST_SUITE(F16toF16)
430
431TEST_SUITE(Scale255)
John Richardson9c450cc2017-11-22 12:00:41 +0000432PIXEL_WISE_MULTIPLICATION_FIXTURE_DATA_TEST_CASE(RunSmall, ToF16Fixture<half_float::half>, PRECOMMIT, SmallShapes(), F16, F16, scale_255, TO_NEAREST_UP, VALIDATE(float, 1.f))
John Richardsondd715f22017-09-18 16:10:48 +0100433TEST_SUITE_END() // Scale255
434
435TEST_SUITE_END() // F16toF16
Ioan-Cristian Szabo5edbd1c2017-11-13 13:34:08 +0000436#endif /* __ARM_FEATURE_FP16_VECTOR_ARITHMETIC */
John Richardsondd715f22017-09-18 16:10:48 +0100437
438TEST_SUITE(F32toF32)
439
440TEST_SUITE(Scale255)
John Richardson9c450cc2017-11-22 12:00:41 +0000441PIXEL_WISE_MULTIPLICATION_FIXTURE_DATA_TEST_CASE(RunSmall, ToF32Fixture<float>, PRECOMMIT, SmallShapes(), F32, F32, scale_255, TO_NEAREST_UP, VALIDATE(float, 1.f))
442PIXEL_WISE_MULTIPLICATION_FIXTURE_DATA_TEST_CASE(RunLarge, ToF32Fixture<float>, NIGHTLY, LargeShapes(), F32, F32, scale_255, TO_NEAREST_UP, VALIDATE(float, 1.f))
John Richardsondd715f22017-09-18 16:10:48 +0100443TEST_SUITE_END() // Scale255
444
445TEST_SUITE(ScaleUnity)
John Richardsondd715f22017-09-18 16:10:48 +0100446PIXEL_WISE_MULTIPLICATION_FIXTURE_DATA_TEST_CASE(RunSmall, ToF32Fixture<float>, PRECOMMIT, SmallShapes(), F32, F32, scale_unity, TO_ZERO, DEFAULT_VALIDATE)
447PIXEL_WISE_MULTIPLICATION_FIXTURE_DATA_TEST_CASE(RunLarge, ToF32Fixture<float>, NIGHTLY, LargeShapes(), F32, F32, scale_unity, TO_ZERO, DEFAULT_VALIDATE)
448TEST_SUITE_END() // ScaleUnity
449
450TEST_SUITE(ScaleOther)
John Richardsondd715f22017-09-18 16:10:48 +0100451PIXEL_WISE_MULTIPLICATION_FIXTURE_DATA_TEST_CASE(RunSmall, ToF32Fixture<float>, PRECOMMIT, SmallShapes(), F32, F32, scale_other, TO_ZERO, DEFAULT_VALIDATE)
452PIXEL_WISE_MULTIPLICATION_FIXTURE_DATA_TEST_CASE(RunLarge, ToF32Fixture<float>, NIGHTLY, LargeShapes(), F32, F32, scale_other, TO_ZERO, DEFAULT_VALIDATE)
453TEST_SUITE_END() // ScaleOther
454
455TEST_SUITE_END() // F32toF32
456
Michalis Spyrou861f0db2018-02-26 16:47:58 +0000457TEST_SUITE(Broadcast)
458PIXEL_WISE_MULTIPLICATION_FIXTURE_DATA_TEST_CASE(RunSmall, BroadcastFixture<float>, PRECOMMIT, SmallShapesBroadcast(), F32, F32, scale_255, TO_NEAREST_UP, VALIDATE(float, 1.f))
459TEST_SUITE_END() // Broadcast
460
John Richardsondd715f22017-09-18 16:10:48 +0100461TEST_SUITE_END()
462TEST_SUITE_END()
463} // namespace validation
464} // namespace test
465} // namespace arm_compute