xref: /aosp_15_r20/external/ComputeLibrary/tests/framework/Macros.h (revision c217d954acce2dbc11938adb493fc0abd69584f3)
1*c217d954SCole Faust /*
2*c217d954SCole Faust  * Copyright (c) 2017-2021 Arm Limited.
3*c217d954SCole Faust  *
4*c217d954SCole Faust  * SPDX-License-Identifier: MIT
5*c217d954SCole Faust  *
6*c217d954SCole Faust  * Permission is hereby granted, free of charge, to any person obtaining a copy
7*c217d954SCole Faust  * of this software and associated documentation files (the "Software"), to
8*c217d954SCole Faust  * deal in the Software without restriction, including without limitation the
9*c217d954SCole Faust  * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
10*c217d954SCole Faust  * sell copies of the Software, and to permit persons to whom the Software is
11*c217d954SCole Faust  * furnished to do so, subject to the following conditions:
12*c217d954SCole Faust  *
13*c217d954SCole Faust  * The above copyright notice and this permission notice shall be included in all
14*c217d954SCole Faust  * copies or substantial portions of the Software.
15*c217d954SCole Faust  *
16*c217d954SCole Faust  * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
17*c217d954SCole Faust  * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
18*c217d954SCole Faust  * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
19*c217d954SCole Faust  * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
20*c217d954SCole Faust  * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
21*c217d954SCole Faust  * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
22*c217d954SCole Faust  * SOFTWARE.
23*c217d954SCole Faust  */
24*c217d954SCole Faust #ifndef ARM_COMPUTE_TEST_FRAMEWORK_MACROS
25*c217d954SCole Faust #define ARM_COMPUTE_TEST_FRAMEWORK_MACROS
26*c217d954SCole Faust 
27*c217d954SCole Faust #include "Framework.h"
28*c217d954SCole Faust #include "Registrars.h"
29*c217d954SCole Faust #include "TestCase.h"
30*c217d954SCole Faust 
31*c217d954SCole Faust //
32*c217d954SCole Faust // TEST SUITE MACROS
33*c217d954SCole Faust //
34*c217d954SCole Faust #define TEST_SUITE(SUITE_NAME)  \
35*c217d954SCole Faust     namespace SUITE_NAME##Suite \
36*c217d954SCole Faust     {                           \
37*c217d954SCole Faust     static arm_compute::test::framework::detail::TestSuiteRegistrar SUITE_NAME##Suite_reg{ #SUITE_NAME };
38*c217d954SCole Faust 
39*c217d954SCole Faust #define TEST_SUITE_END()                                                       \
40*c217d954SCole Faust     static arm_compute::test::framework::detail::TestSuiteRegistrar Suite_end; \
41*c217d954SCole Faust     }
42*c217d954SCole Faust //
43*c217d954SCole Faust // TEST SUITE MACROS END
44*c217d954SCole Faust //
45*c217d954SCole Faust 
46*c217d954SCole Faust //
47*c217d954SCole Faust // HELPER MACROS
48*c217d954SCole Faust //
49*c217d954SCole Faust 
50*c217d954SCole Faust #define CONCAT(ARG0, ARG1) ARG0##ARG1
51*c217d954SCole Faust 
52*c217d954SCole Faust #define VARIADIC_SIZE_IMPL(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, size, ...) size
53*c217d954SCole Faust #define VARIADIC_SIZE(...) VARIADIC_SIZE_IMPL(__VA_ARGS__, 16, 15, 14, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0)
54*c217d954SCole Faust 
55*c217d954SCole Faust #define JOIN_PARAM1(OP, param) OP(0, param)
56*c217d954SCole Faust #define JOIN_PARAM2(OP, param, ...) \
57*c217d954SCole Faust     OP(1, param)                    \
58*c217d954SCole Faust     , JOIN_PARAM1(OP, __VA_ARGS__)
59*c217d954SCole Faust #define JOIN_PARAM3(OP, param, ...) \
60*c217d954SCole Faust     OP(2, param)                    \
61*c217d954SCole Faust     , JOIN_PARAM2(OP, __VA_ARGS__)
62*c217d954SCole Faust #define JOIN_PARAM4(OP, param, ...) \
63*c217d954SCole Faust     OP(3, param)                    \
64*c217d954SCole Faust     , JOIN_PARAM3(OP, __VA_ARGS__)
65*c217d954SCole Faust #define JOIN_PARAM5(OP, param, ...) \
66*c217d954SCole Faust     OP(4, param)                    \
67*c217d954SCole Faust     , JOIN_PARAM4(OP, __VA_ARGS__)
68*c217d954SCole Faust #define JOIN_PARAM6(OP, param, ...) \
69*c217d954SCole Faust     OP(5, param)                    \
70*c217d954SCole Faust     , JOIN_PARAM5(OP, __VA_ARGS__)
71*c217d954SCole Faust #define JOIN_PARAM7(OP, param, ...) \
72*c217d954SCole Faust     OP(6, param)                    \
73*c217d954SCole Faust     , JOIN_PARAM6(OP, __VA_ARGS__)
74*c217d954SCole Faust #define JOIN_PARAM8(OP, param, ...) \
75*c217d954SCole Faust     OP(7, param)                    \
76*c217d954SCole Faust     , JOIN_PARAM7(OP, __VA_ARGS__)
77*c217d954SCole Faust #define JOIN_PARAM9(OP, param, ...) \
78*c217d954SCole Faust     OP(8, param)                    \
79*c217d954SCole Faust     , JOIN_PARAM8(OP, __VA_ARGS__)
80*c217d954SCole Faust #define JOIN_PARAM10(OP, param, ...) \
81*c217d954SCole Faust     OP(9, param)                     \
82*c217d954SCole Faust     , JOIN_PARAM9(OP, __VA_ARGS__)
83*c217d954SCole Faust #define JOIN_PARAM11(OP, param, ...) \
84*c217d954SCole Faust     OP(10, param)                    \
85*c217d954SCole Faust     , JOIN_PARAM10(OP, __VA_ARGS__)
86*c217d954SCole Faust #define JOIN_PARAM12(OP, param, ...) \
87*c217d954SCole Faust     OP(11, param)                    \
88*c217d954SCole Faust     , JOIN_PARAM11(OP, __VA_ARGS__)
89*c217d954SCole Faust #define JOIN_PARAM13(OP, param, ...) \
90*c217d954SCole Faust     OP(12, param)                    \
91*c217d954SCole Faust     , JOIN_PARAM12(OP, __VA_ARGS__)
92*c217d954SCole Faust #define JOIN_PARAM14(OP, param, ...) \
93*c217d954SCole Faust     OP(13, param)                    \
94*c217d954SCole Faust     , JOIN_PARAM13(OP, __VA_ARGS__)
95*c217d954SCole Faust #define JOIN_PARAM15(OP, param, ...) \
96*c217d954SCole Faust     OP(14, param)                    \
97*c217d954SCole Faust     , JOIN_PARAM14(OP, __VA_ARGS__)
98*c217d954SCole Faust #define JOIN_PARAM16(OP, param, ...) \
99*c217d954SCole Faust     OP(15, param)                    \
100*c217d954SCole Faust     , JOIN_PARAM15(OP, __VA_ARGS__)
101*c217d954SCole Faust #define JOIN_PARAM(OP, NUM, ...) \
102*c217d954SCole Faust     CONCAT(JOIN_PARAM, NUM)      \
103*c217d954SCole Faust     (OP, __VA_ARGS__)
104*c217d954SCole Faust 
105*c217d954SCole Faust #define MAKE_TYPE_PARAM(i, name) typename T##i
106*c217d954SCole Faust #define MAKE_ARG_PARAM(i, name) const T##i &name
107*c217d954SCole Faust #define MAKE_TYPE_PARAMS(...) JOIN_PARAM(MAKE_TYPE_PARAM, VARIADIC_SIZE(__VA_ARGS__), __VA_ARGS__)
108*c217d954SCole Faust #define MAKE_ARG_PARAMS(...) JOIN_PARAM(MAKE_ARG_PARAM, VARIADIC_SIZE(__VA_ARGS__), __VA_ARGS__)
109*c217d954SCole Faust 
110*c217d954SCole Faust //
111*c217d954SCole Faust // TEST CASE MACROS
112*c217d954SCole Faust //
113*c217d954SCole Faust #define TEST_CASE_CONSTRUCTOR(TEST_NAME) \
114*c217d954SCole Faust     TEST_NAME() = default;
115*c217d954SCole Faust #define DATA_TEST_CASE_CONSTRUCTOR(TEST_NAME, DATASET)                   \
116*c217d954SCole Faust     template <typename D>                                                \
117*c217d954SCole Faust     explicit TEST_NAME(D &&data) : DataTestCase{ std::forward<D>(data) } \
118*c217d954SCole Faust     {                                                                    \
119*c217d954SCole Faust     }
120*c217d954SCole Faust #define FIXTURE_SETUP(FIXTURE)                                   \
121*c217d954SCole Faust     void do_setup() override                                     \
122*c217d954SCole Faust     {                                                            \
123*c217d954SCole Faust         framework::Framework::get().set_new_fixture_call(false); \
124*c217d954SCole Faust         FIXTURE::setup();                                        \
125*c217d954SCole Faust     }
126*c217d954SCole Faust #define FIXTURE_DATA_SETUP(FIXTURE)                              \
127*c217d954SCole Faust     void do_setup() override                                     \
128*c217d954SCole Faust     {                                                            \
129*c217d954SCole Faust         framework::Framework::get().set_new_fixture_call(false); \
130*c217d954SCole Faust         apply(this, &FIXTURE::setup<As...>, _data);              \
131*c217d954SCole Faust     }
132*c217d954SCole Faust #define FIXTURE_DATA_SETUP_NEW(FIXTURE)                         \
133*c217d954SCole Faust     void do_setup() override                                    \
134*c217d954SCole Faust     {                                                           \
135*c217d954SCole Faust         framework::Framework::get().set_new_fixture_call(true); \
136*c217d954SCole Faust         apply(this, &FIXTURE::setup<As...>, _data);             \
137*c217d954SCole Faust         configure_target();                                     \
138*c217d954SCole Faust         if(!framework::Framework::get().configure_only())       \
139*c217d954SCole Faust         {                                                       \
140*c217d954SCole Faust             allocate_and_run_target();                          \
141*c217d954SCole Faust             compute_reference();                                \
142*c217d954SCole Faust         }                                                       \
143*c217d954SCole Faust     }
144*c217d954SCole Faust #define FIXTURE_RUN(FIXTURE) \
145*c217d954SCole Faust     void do_run() override   \
146*c217d954SCole Faust     {                        \
147*c217d954SCole Faust         FIXTURE::run();      \
148*c217d954SCole Faust     }
149*c217d954SCole Faust #define FIXTURE_SYNC(FIXTURE) \
150*c217d954SCole Faust     void do_sync() override   \
151*c217d954SCole Faust     {                         \
152*c217d954SCole Faust         FIXTURE::sync();      \
153*c217d954SCole Faust     }
154*c217d954SCole Faust #define FIXTURE_TEARDOWN(FIXTURE) \
155*c217d954SCole Faust     void do_teardown() override   \
156*c217d954SCole Faust     {                             \
157*c217d954SCole Faust         FIXTURE::teardown();      \
158*c217d954SCole Faust     }
159*c217d954SCole Faust #define TEST_REGISTRAR(TEST_NAME, MODE, STATUS)                                               \
160*c217d954SCole Faust     static arm_compute::test::framework::detail::TestCaseRegistrar<TEST_NAME> TEST_NAME##_reg \
161*c217d954SCole Faust     {                                                                                         \
162*c217d954SCole Faust         #TEST_NAME, MODE, STATUS                                                              \
163*c217d954SCole Faust     }
164*c217d954SCole Faust #define DATA_TEST_REGISTRAR(TEST_NAME, MODE, STATUS, DATASET)                                                          \
165*c217d954SCole Faust     static arm_compute::test::framework::detail::TestCaseRegistrar<TEST_NAME<decltype(DATASET)::type>> TEST_NAME##_reg \
166*c217d954SCole Faust     {                                                                                                                  \
167*c217d954SCole Faust         #TEST_NAME, MODE, STATUS, DATASET                                                                              \
168*c217d954SCole Faust     }
169*c217d954SCole Faust 
170*c217d954SCole Faust #define TEST_CASE_IMPL(TEST_NAME, MODE, STATUS)                     \
171*c217d954SCole Faust     class TEST_NAME : public arm_compute::test::framework::TestCase \
172*c217d954SCole Faust     {                                                               \
173*c217d954SCole Faust     public:                                                     \
174*c217d954SCole Faust         TEST_CASE_CONSTRUCTOR(TEST_NAME)                            \
175*c217d954SCole Faust         void do_run() override;                                     \
176*c217d954SCole Faust     };                                                              \
177*c217d954SCole Faust     TEST_REGISTRAR(TEST_NAME, MODE, STATUS);                        \
178*c217d954SCole Faust     void TEST_NAME::do_run()
179*c217d954SCole Faust 
180*c217d954SCole Faust #define TEST_CASE(TEST_NAME, MODE) \
181*c217d954SCole Faust     TEST_CASE_IMPL(TEST_NAME, MODE, arm_compute::test::framework::TestCaseFactory::Status::ACTIVE)
182*c217d954SCole Faust #define EXPECTED_FAILURE_TEST_CASE(TEST_NAME, MODE) \
183*c217d954SCole Faust     TEST_CASE_IMPL(TEST_NAME, MODE, arm_compute::test::framework::TestCaseFactory::Status::EXPECTED_FAILURE)
184*c217d954SCole Faust #define DISABLED_TEST_CASE(TEST_NAME, MODE) \
185*c217d954SCole Faust     TEST_CASE_IMPL(TEST_NAME, MODE, arm_compute::test::framework::TestCaseFactory::Status::DISABLED)
186*c217d954SCole Faust 
187*c217d954SCole Faust #define DATA_TEST_CASE_IMPL(TEST_NAME, MODE, STATUS, DATASET, ...)                                                  \
188*c217d954SCole Faust     template <typename T>                                                                                           \
189*c217d954SCole Faust     class TEST_NAME;                                                                                                \
190*c217d954SCole Faust     template <typename... As>                                                                                       \
191*c217d954SCole Faust     class TEST_NAME<std::tuple<As...>> : public arm_compute::test::framework::DataTestCase<decltype(DATASET)::type> \
192*c217d954SCole Faust     {                                                                                                               \
193*c217d954SCole Faust     public:                                                                                                     \
194*c217d954SCole Faust         DATA_TEST_CASE_CONSTRUCTOR(TEST_NAME, DATASET)                                                              \
195*c217d954SCole Faust         void do_run() override                                                                                      \
196*c217d954SCole Faust         {                                                                                                           \
197*c217d954SCole Faust             arm_compute::test::framework::apply(this, &TEST_NAME::run<As...>, _data);                               \
198*c217d954SCole Faust         }                                                                                                           \
199*c217d954SCole Faust         template <MAKE_TYPE_PARAMS(__VA_ARGS__)>                                                                    \
200*c217d954SCole Faust         void run(MAKE_ARG_PARAMS(__VA_ARGS__));                                                                     \
201*c217d954SCole Faust     };                                                                                                              \
202*c217d954SCole Faust     DATA_TEST_REGISTRAR(TEST_NAME, MODE, STATUS, DATASET);                                                          \
203*c217d954SCole Faust     template <typename... As>                                                                                       \
204*c217d954SCole Faust     template <MAKE_TYPE_PARAMS(__VA_ARGS__)>                                                                        \
205*c217d954SCole Faust     void TEST_NAME<std::tuple<As...>>::run(MAKE_ARG_PARAMS(__VA_ARGS__))
206*c217d954SCole Faust 
207*c217d954SCole Faust #define DATA_TEST_CASE(TEST_NAME, MODE, DATASET, ...) \
208*c217d954SCole Faust     DATA_TEST_CASE_IMPL(TEST_NAME, MODE, arm_compute::test::framework::TestCaseFactory::Status::ACTIVE, DATASET, __VA_ARGS__)
209*c217d954SCole Faust #define EXPECTED_FAILURE_DATA_TEST_CASE(TEST_NAME, MODE, DATASET, ...) \
210*c217d954SCole Faust     DATA_TEST_CASE_IMPL(TEST_NAME, MODE, arm_compute::test::framework::TestCaseFactory::Status::EXPECTED_FAILURE, DATASET, __VA_ARGS__)
211*c217d954SCole Faust #define DISABLED_DATA_TEST_CASE(TEST_NAME, MODE, DATASET, ...) \
212*c217d954SCole Faust     DATA_TEST_CASE_IMPL(TEST_NAME, MODE, arm_compute::test::framework::TestCaseFactory::Status::DISABLED, DATASET, __VA_ARGS__)
213*c217d954SCole Faust 
214*c217d954SCole Faust #define FIXTURE_TEST_CASE_IMPL(TEST_NAME, FIXTURE, MODE, STATUS)                    \
215*c217d954SCole Faust     class TEST_NAME : public arm_compute::test::framework::TestCase, public FIXTURE \
216*c217d954SCole Faust     {                                                                               \
217*c217d954SCole Faust     public:                                                                     \
218*c217d954SCole Faust         TEST_CASE_CONSTRUCTOR(TEST_NAME)                                            \
219*c217d954SCole Faust         FIXTURE_SETUP(FIXTURE)                                                      \
220*c217d954SCole Faust         void do_run() override;                                                     \
221*c217d954SCole Faust         FIXTURE_TEARDOWN(FIXTURE)                                                   \
222*c217d954SCole Faust     };                                                                              \
223*c217d954SCole Faust     TEST_REGISTRAR(TEST_NAME, MODE, STATUS);                                        \
224*c217d954SCole Faust     void TEST_NAME::do_run()
225*c217d954SCole Faust 
226*c217d954SCole Faust #define FIXTURE_TEST_CASE(TEST_NAME, FIXTURE, MODE) \
227*c217d954SCole Faust     FIXTURE_TEST_CASE_IMPL(TEST_NAME, FIXTURE, MODE, arm_compute::test::framework::TestCaseFactory::Status::ACTIVE)
228*c217d954SCole Faust #define EXPECTED_FAILURE_FIXTURE_TEST_CASE(TEST_NAME, FIXTURE, MODE) \
229*c217d954SCole Faust     FIXTURE_TEST_CASE_IMPL(TEST_NAME, FIXTURE, MODE, arm_compute::test::framework::TestCaseFactory::Status::EXPECTED_FAILURE)
230*c217d954SCole Faust #define DISABLED_FIXTURE_TEST_CASE(TEST_NAME, FIXTURE, MODE) \
231*c217d954SCole Faust     FIXTURE_TEST_CASE_IMPL(TEST_NAME, FIXTURE, MODE, arm_compute::test::framework::TestCaseFactory::Status::DISABLED)
232*c217d954SCole Faust 
233*c217d954SCole Faust #define EMPTY_BODY_FIXTURE_TEST_CASE(TEST_NAME, FIXTURE, MODE) \
234*c217d954SCole Faust     FIXTURE_TEST_CASE(TEST_NAME, FIXTURE, MODE)                \
235*c217d954SCole Faust     {                                                          \
236*c217d954SCole Faust     }
237*c217d954SCole Faust 
238*c217d954SCole Faust #define FIXTURE_DATA_TEST_CASE_IMPL(TEST_NAME, FIXTURE, MODE, STATUS, DATASET)                                                      \
239*c217d954SCole Faust     template <typename T>                                                                                                           \
240*c217d954SCole Faust     class TEST_NAME;                                                                                                                \
241*c217d954SCole Faust     template <typename... As>                                                                                                       \
242*c217d954SCole Faust     class TEST_NAME<std::tuple<As...>> : public arm_compute::test::framework::DataTestCase<decltype(DATASET)::type>, public FIXTURE \
243*c217d954SCole Faust     {                                                                                                                               \
244*c217d954SCole Faust     public:                                                                                                                     \
245*c217d954SCole Faust         DATA_TEST_CASE_CONSTRUCTOR(TEST_NAME, DATASET)                                                                              \
246*c217d954SCole Faust         FIXTURE_DATA_SETUP(FIXTURE)                                                                                                 \
247*c217d954SCole Faust         void do_run() override;                                                                                                     \
248*c217d954SCole Faust         FIXTURE_TEARDOWN(FIXTURE)                                                                                                   \
249*c217d954SCole Faust     };                                                                                                                              \
250*c217d954SCole Faust     DATA_TEST_REGISTRAR(TEST_NAME, MODE, STATUS, DATASET);                                                                          \
251*c217d954SCole Faust     template <typename... As>                                                                                                       \
252*c217d954SCole Faust     void TEST_NAME<std::tuple<As...>>::do_run()
253*c217d954SCole Faust 
254*c217d954SCole Faust #define FIXTURE_DATA_TEST_CASE(TEST_NAME, FIXTURE, MODE, DATASET) \
255*c217d954SCole Faust     FIXTURE_DATA_TEST_CASE_IMPL(TEST_NAME, FIXTURE, MODE, arm_compute::test::framework::TestCaseFactory::Status::ACTIVE, DATASET)
256*c217d954SCole Faust #define EXPECTED_FAILURE_FIXTURE_DATA_TEST_CASE(TEST_NAME, FIXTURE, MODE, DATASET) \
257*c217d954SCole Faust     FIXTURE_DATA_TEST_CASE_IMPL(TEST_NAME, FIXTURE, MODE, arm_compute::test::framework::TestCaseFactory::Status::EXPECTED_FAILURE, DATASET)
258*c217d954SCole Faust #define DISABLED_FIXTURE_DATA_TEST_CASE(TEST_NAME, FIXTURE, MODE, DATASET) \
259*c217d954SCole Faust     FIXTURE_DATA_TEST_CASE_IMPL(TEST_NAME, FIXTURE, MODE, arm_compute::test::framework::TestCaseFactory::Status::DISABLED, DATASET)
260*c217d954SCole Faust 
261*c217d954SCole Faust #define FIXTURE_DATA_TEST_CASE_NEW_IMPL(TEST_NAME, FIXTURE, MODE, STATUS, DATASET)                                                  \
262*c217d954SCole Faust     template <typename T>                                                                                                           \
263*c217d954SCole Faust     class TEST_NAME;                                                                                                                \
264*c217d954SCole Faust     template <typename... As>                                                                                                       \
265*c217d954SCole Faust     class TEST_NAME<std::tuple<As...>> : public arm_compute::test::framework::DataTestCase<decltype(DATASET)::type>, public FIXTURE \
266*c217d954SCole Faust     {                                                                                                                               \
267*c217d954SCole Faust     public:                                                                                                                     \
268*c217d954SCole Faust         DATA_TEST_CASE_CONSTRUCTOR(TEST_NAME, DATASET)                                                                              \
269*c217d954SCole Faust         FIXTURE_DATA_SETUP_NEW(FIXTURE)                                                                                             \
270*c217d954SCole Faust         void do_run() override;                                                                                                     \
271*c217d954SCole Faust         FIXTURE_TEARDOWN(FIXTURE)                                                                                                   \
272*c217d954SCole Faust     };                                                                                                                              \
273*c217d954SCole Faust     DATA_TEST_REGISTRAR(TEST_NAME, MODE, STATUS, DATASET);                                                                          \
274*c217d954SCole Faust     template <typename... As>                                                                                                       \
275*c217d954SCole Faust     void TEST_NAME<std::tuple<As...>>::do_run()
276*c217d954SCole Faust 
277*c217d954SCole Faust #define FIXTURE_DATA_TEST_CASE_NEW(TEST_NAME, FIXTURE, MODE, DATASET) \
278*c217d954SCole Faust     FIXTURE_DATA_TEST_CASE_NEW_IMPL(TEST_NAME, FIXTURE, MODE, arm_compute::test::framework::TestCaseFactory::Status::ACTIVE, DATASET)
279*c217d954SCole Faust #define EXPECTED_FAILURE_FIXTURE_DATA_TEST_CASE_NEW(TEST_NAME, FIXTURE, MODE, DATASET) \
280*c217d954SCole Faust     FIXTURE_DATA_TEST_CASE_NEW_IMPL(TEST_NAME, FIXTURE, MODE, arm_compute::test::framework::TestCaseFactory::Status::EXPECTED_FAILURE, DATASET)
281*c217d954SCole Faust #define DISABLED_FIXTURE_DATA_TEST_CASE_NEW(TEST_NAME, FIXTURE, MODE, DATASET) \
282*c217d954SCole Faust     FIXTURE_DATA_TEST_CASE_NEW_IMPL(TEST_NAME, FIXTURE, MODE, arm_compute::test::framework::TestCaseFactory::Status::DISABLED, DATASET)
283*c217d954SCole Faust 
284*c217d954SCole Faust #define REGISTER_FIXTURE_TEST_CASE_IMPL(TEST_NAME, FIXTURE, MODE, STATUS)           \
285*c217d954SCole Faust     class TEST_NAME : public arm_compute::test::framework::TestCase, public FIXTURE \
286*c217d954SCole Faust     {                                                                               \
287*c217d954SCole Faust     public:                                                                     \
288*c217d954SCole Faust         TEST_CASE_CONSTRUCTOR(TEST_NAME)                                            \
289*c217d954SCole Faust         FIXTURE_SETUP(FIXTURE)                                                      \
290*c217d954SCole Faust         FIXTURE_RUN(FIXTURE)                                                        \
291*c217d954SCole Faust         FIXTURE_SYNC(FIXTURE)                                                       \
292*c217d954SCole Faust         FIXTURE_TEARDOWN(FIXTURE)                                                   \
293*c217d954SCole Faust     };                                                                              \
294*c217d954SCole Faust     TEST_REGISTRAR(TEST_NAME, MODE, STATUS)
295*c217d954SCole Faust 
296*c217d954SCole Faust #define REGISTER_FIXTURE_TEST_CASE(TEST_NAME, FIXTURE, MODE) \
297*c217d954SCole Faust     REGISTER_FIXTURE_TEST_CASE_IMPL(TEST_NAME, FIXTURE, MODE, arm_compute::test::framework::TestCaseFactory::Status::ACTIVE)
298*c217d954SCole Faust #define EXPECTED_FAILURE_REGISTER_FIXTURE_TEST_CASE(TEST_NAME, FIXTURE, MODE) \
299*c217d954SCole Faust     REGISTER_FIXTURE_TEST_CASE_IMPL(TEST_NAME, FIXTURE, MODE, arm_compute::test::framework::TestCaseFactory::Status::EXPECTED_FAILURE)
300*c217d954SCole Faust #define DISABLED_REGISTER_FIXTURE_TEST_CASE(TEST_NAME, FIXTURE, MODE) \
301*c217d954SCole Faust     REGISTER_FIXTURE_TEST_CASE_IMPL(TEST_NAME, FIXTURE, MODE, arm_compute::test::framework::TestCaseFactory::Status::DISABLED)
302*c217d954SCole Faust 
303*c217d954SCole Faust #define REGISTER_FIXTURE_DATA_TEST_CASE_IMPL(TEST_NAME, FIXTURE, MODE, STATUS, DATASET)                                             \
304*c217d954SCole Faust     template <typename T>                                                                                                           \
305*c217d954SCole Faust     class TEST_NAME;                                                                                                                \
306*c217d954SCole Faust     template <typename... As>                                                                                                       \
307*c217d954SCole Faust     class TEST_NAME<std::tuple<As...>> : public arm_compute::test::framework::DataTestCase<decltype(DATASET)::type>, public FIXTURE \
308*c217d954SCole Faust     {                                                                                                                               \
309*c217d954SCole Faust     public:                                                                                                                     \
310*c217d954SCole Faust         DATA_TEST_CASE_CONSTRUCTOR(TEST_NAME, DATASET)                                                                              \
311*c217d954SCole Faust         FIXTURE_DATA_SETUP(FIXTURE)                                                                                                 \
312*c217d954SCole Faust         FIXTURE_RUN(FIXTURE)                                                                                                        \
313*c217d954SCole Faust         FIXTURE_SYNC(FIXTURE)                                                                                                       \
314*c217d954SCole Faust         FIXTURE_TEARDOWN(FIXTURE)                                                                                                   \
315*c217d954SCole Faust     };                                                                                                                              \
316*c217d954SCole Faust     DATA_TEST_REGISTRAR(TEST_NAME, MODE, STATUS, DATASET)
317*c217d954SCole Faust 
318*c217d954SCole Faust #define REGISTER_FIXTURE_DATA_TEST_CASE(TEST_NAME, FIXTURE, MODE, DATASET) \
319*c217d954SCole Faust     REGISTER_FIXTURE_DATA_TEST_CASE_IMPL(TEST_NAME, FIXTURE, MODE, arm_compute::test::framework::TestCaseFactory::Status::ACTIVE, DATASET)
320*c217d954SCole Faust #define EXPECTED_FAILURE_REGISTER_FIXTURE_DATA_TEST_CASE(TEST_NAME, FIXTURE, MODE, DATASET) \
321*c217d954SCole Faust     REGISTER_FIXTURE_DATA_TEST_CASE_IMPL(TEST_NAME, FIXTURE, MODE, arm_compute::test::framework::TestCaseFactory::Status::EXPECTED_FAILURE, DATASET)
322*c217d954SCole Faust #define DISABLED_REGISTER_FIXTURE_DATA_TEST_CASE(TEST_NAME, FIXTURE, MODE, DATASET) \
323*c217d954SCole Faust     REGISTER_FIXTURE_DATA_TEST_CASE_IMPL(TEST_NAME, FIXTURE, MODE, arm_compute::test::framework::TestCaseFactory::Status::DISABLED, DATASET)
324*c217d954SCole Faust //
325*c217d954SCole Faust // TEST CASE MACROS END
326*c217d954SCole Faust //
327*c217d954SCole Faust #endif /* ARM_COMPUTE_TEST_FRAMEWORK_MACROS */