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 */