/*
 * Copyright (c) 2017-2019 ARM Limited.
 *
 * SPDX-License-Identifier: MIT
 *
 * Permission is hereby granted, free of charge, to any person obtaining a copy
 * of this software and associated documentation files (the "Software"), to
 * deal in the Software without restriction, including without limitation the
 * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
 * sell copies of the Software, and to permit persons to whom the Software is
 * furnished to do so, subject to the following conditions:
 *
 * The above copyright notice and this permission notice shall be included in all
 * copies or substantial portions of the Software.
 *
 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
 * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
 * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
 * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
 * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
 * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
 * SOFTWARE.
 */
#ifndef ARM_COMPUTE_TEST_FRAMEWORK_MACROS
#define ARM_COMPUTE_TEST_FRAMEWORK_MACROS

#include "Framework.h"
#include "Registrars.h"
#include "TestCase.h"

//
// TEST SUITE MACROS
//
#define TEST_SUITE(SUITE_NAME)  \
    namespace SUITE_NAME##Suite \
    {                           \
    static arm_compute::test::framework::detail::TestSuiteRegistrar SUITE_NAME##Suite_reg{ #SUITE_NAME };

#define TEST_SUITE_END()                                                       \
    static arm_compute::test::framework::detail::TestSuiteRegistrar Suite_end; \
    }
//
// TEST SUITE MACROS END
//

//
// HELPER MACROS
//

#define CONCAT(ARG0, ARG1) ARG0##ARG1

#define VARIADIC_SIZE_IMPL(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, size, ...) size
#define VARIADIC_SIZE(...) VARIADIC_SIZE_IMPL(__VA_ARGS__, 14, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0)

#define JOIN_PARAM1(OP, param) OP(0, param)
#define JOIN_PARAM2(OP, param, ...) \
    OP(1, param)                    \
    , JOIN_PARAM1(OP, __VA_ARGS__)
#define JOIN_PARAM3(OP, param, ...) \
    OP(2, param)                    \
    , JOIN_PARAM2(OP, __VA_ARGS__)
#define JOIN_PARAM4(OP, param, ...) \
    OP(3, param)                    \
    , JOIN_PARAM3(OP, __VA_ARGS__)
#define JOIN_PARAM5(OP, param, ...) \
    OP(4, param)                    \
    , JOIN_PARAM4(OP, __VA_ARGS__)
#define JOIN_PARAM6(OP, param, ...) \
    OP(5, param)                    \
    , JOIN_PARAM5(OP, __VA_ARGS__)
#define JOIN_PARAM7(OP, param, ...) \
    OP(6, param)                    \
    , JOIN_PARAM6(OP, __VA_ARGS__)
#define JOIN_PARAM8(OP, param, ...) \
    OP(7, param)                    \
    , JOIN_PARAM7(OP, __VA_ARGS__)
#define JOIN_PARAM9(OP, param, ...) \
    OP(8, param)                    \
    , JOIN_PARAM8(OP, __VA_ARGS__)
#define JOIN_PARAM10(OP, param, ...) \
    OP(9, param)                     \
    , JOIN_PARAM9(OP, __VA_ARGS__)
#define JOIN_PARAM11(OP, param, ...) \
    OP(10, param)                    \
    , JOIN_PARAM10(OP, __VA_ARGS__)
#define JOIN_PARAM12(OP, param, ...) \
    OP(11, param)                    \
    , JOIN_PARAM11(OP, __VA_ARGS__)
#define JOIN_PARAM13(OP, param, ...) \
    OP(12, param)                    \
    , JOIN_PARAM12(OP, __VA_ARGS__)
#define JOIN_PARAM14(OP, param, ...) \
    OP(13, param)                    \
    , JOIN_PARAM13(OP, __VA_ARGS__)
#define JOIN_PARAM(OP, NUM, ...) \
    CONCAT(JOIN_PARAM, NUM)      \
    (OP, __VA_ARGS__)

#define MAKE_TYPE_PARAM(i, name) typename T##i
#define MAKE_ARG_PARAM(i, name) const T##i &name
#define MAKE_TYPE_PARAMS(...) JOIN_PARAM(MAKE_TYPE_PARAM, VARIADIC_SIZE(__VA_ARGS__), __VA_ARGS__)
#define MAKE_ARG_PARAMS(...) JOIN_PARAM(MAKE_ARG_PARAM, VARIADIC_SIZE(__VA_ARGS__), __VA_ARGS__)

//
// TEST CASE MACROS
//
#define TEST_CASE_CONSTRUCTOR(TEST_NAME) \
    TEST_NAME() = default;
#define DATA_TEST_CASE_CONSTRUCTOR(TEST_NAME, DATASET)                   \
    template <typename D>                                                \
    explicit TEST_NAME(D &&data) : DataTestCase{ std::forward<D>(data) } \
    {                                                                    \
    }
#define FIXTURE_SETUP(FIXTURE) \
    void do_setup() override   \
    {                          \
        FIXTURE::setup();      \
    }
#define FIXTURE_DATA_SETUP(FIXTURE)                 \
    void do_setup() override                        \
    {                                               \
        apply(this, &FIXTURE::setup<As...>, _data); \
    }
#define FIXTURE_RUN(FIXTURE) \
    void do_run() override   \
    {                        \
        FIXTURE::run();      \
    }
#define FIXTURE_SYNC(FIXTURE) \
    void do_sync() override   \
    {                         \
        FIXTURE::sync();      \
    }
#define FIXTURE_TEARDOWN(FIXTURE) \
    void do_teardown() override   \
    {                             \
        FIXTURE::teardown();      \
    }
#define TEST_REGISTRAR(TEST_NAME, MODE, STATUS)                                               \
    static arm_compute::test::framework::detail::TestCaseRegistrar<TEST_NAME> TEST_NAME##_reg \
    {                                                                                         \
        #TEST_NAME, MODE, STATUS                                                              \
    }
#define DATA_TEST_REGISTRAR(TEST_NAME, MODE, STATUS, DATASET)                                                          \
    static arm_compute::test::framework::detail::TestCaseRegistrar<TEST_NAME<decltype(DATASET)::type>> TEST_NAME##_reg \
    {                                                                                                                  \
        #TEST_NAME, MODE, STATUS, DATASET                                                                              \
    }

#define TEST_CASE_IMPL(TEST_NAME, MODE, STATUS)                     \
    class TEST_NAME : public arm_compute::test::framework::TestCase \
    {                                                               \
    public:                                                     \
        TEST_CASE_CONSTRUCTOR(TEST_NAME)                            \
        void do_run() override;                                     \
    };                                                              \
    TEST_REGISTRAR(TEST_NAME, MODE, STATUS);                        \
    void TEST_NAME::do_run()

#define TEST_CASE(TEST_NAME, MODE) \
    TEST_CASE_IMPL(TEST_NAME, MODE, arm_compute::test::framework::TestCaseFactory::Status::ACTIVE)
#define EXPECTED_FAILURE_TEST_CASE(TEST_NAME, MODE) \
    TEST_CASE_IMPL(TEST_NAME, MODE, arm_compute::test::framework::TestCaseFactory::Status::EXPECTED_FAILURE)
#define DISABLED_TEST_CASE(TEST_NAME, MODE) \
    TEST_CASE_IMPL(TEST_NAME, MODE, arm_compute::test::framework::TestCaseFactory::Status::DISABLED)

#define DATA_TEST_CASE_IMPL(TEST_NAME, MODE, STATUS, DATASET, ...)                                                  \
    template <typename T>                                                                                           \
    class TEST_NAME;                                                                                                \
    template <typename... As>                                                                                       \
    class TEST_NAME<std::tuple<As...>> : public arm_compute::test::framework::DataTestCase<decltype(DATASET)::type> \
    {                                                                                                               \
    public:                                                                                                     \
        DATA_TEST_CASE_CONSTRUCTOR(TEST_NAME, DATASET)                                                              \
        void do_run() override                                                                                      \
        {                                                                                                           \
            arm_compute::test::framework::apply(this, &TEST_NAME::run<As...>, _data);                               \
        }                                                                                                           \
        template <MAKE_TYPE_PARAMS(__VA_ARGS__)>                                                                    \
        void run(MAKE_ARG_PARAMS(__VA_ARGS__));                                                                     \
    };                                                                                                              \
    DATA_TEST_REGISTRAR(TEST_NAME, MODE, STATUS, DATASET);                                                          \
    template <typename... As>                                                                                       \
    template <MAKE_TYPE_PARAMS(__VA_ARGS__)>                                                                        \
    void TEST_NAME<std::tuple<As...>>::run(MAKE_ARG_PARAMS(__VA_ARGS__))

#define DATA_TEST_CASE(TEST_NAME, MODE, DATASET, ...) \
    DATA_TEST_CASE_IMPL(TEST_NAME, MODE, arm_compute::test::framework::TestCaseFactory::Status::ACTIVE, DATASET, __VA_ARGS__)
#define EXPECTED_FAILURE_DATA_TEST_CASE(TEST_NAME, MODE, DATASET, ...) \
    DATA_TEST_CASE_IMPL(TEST_NAME, MODE, arm_compute::test::framework::TestCaseFactory::Status::EXPECTED_FAILURE, DATASET, __VA_ARGS__)
#define DISABLED_DATA_TEST_CASE(TEST_NAME, MODE, DATASET, ...) \
    DATA_TEST_CASE_IMPL(TEST_NAME, MODE, arm_compute::test::framework::TestCaseFactory::Status::DISABLED, DATASET, __VA_ARGS__)

#define FIXTURE_TEST_CASE_IMPL(TEST_NAME, FIXTURE, MODE, STATUS)                    \
    class TEST_NAME : public arm_compute::test::framework::TestCase, public FIXTURE \
    {                                                                               \
    public:                                                                     \
        TEST_CASE_CONSTRUCTOR(TEST_NAME)                                            \
        FIXTURE_SETUP(FIXTURE)                                                      \
        void do_run() override;                                                     \
        FIXTURE_TEARDOWN(FIXTURE)                                                   \
    };                                                                              \
    TEST_REGISTRAR(TEST_NAME, MODE, STATUS);                                        \
    void TEST_NAME::do_run()

#define FIXTURE_TEST_CASE(TEST_NAME, FIXTURE, MODE) \
    FIXTURE_TEST_CASE_IMPL(TEST_NAME, FIXTURE, MODE, arm_compute::test::framework::TestCaseFactory::Status::ACTIVE)
#define EXPECTED_FAILURE_FIXTURE_TEST_CASE(TEST_NAME, FIXTURE, MODE) \
    FIXTURE_TEST_CASE_IMPL(TEST_NAME, FIXTURE, MODE, arm_compute::test::framework::TestCaseFactory::Status::EXPECTED_FAILURE)
#define DISABLED_FIXTURE_TEST_CASE(TEST_NAME, FIXTURE, MODE) \
    FIXTURE_TEST_CASE_IMPL(TEST_NAME, FIXTURE, MODE, arm_compute::test::framework::TestCaseFactory::Status::DISABLED)

#define FIXTURE_DATA_TEST_CASE_IMPL(TEST_NAME, FIXTURE, MODE, STATUS, DATASET)                                                      \
    template <typename T>                                                                                                           \
    class TEST_NAME;                                                                                                                \
    template <typename... As>                                                                                                       \
    class TEST_NAME<std::tuple<As...>> : public arm_compute::test::framework::DataTestCase<decltype(DATASET)::type>, public FIXTURE \
    {                                                                                                                               \
    public:                                                                                                                     \
        DATA_TEST_CASE_CONSTRUCTOR(TEST_NAME, DATASET)                                                                              \
        FIXTURE_DATA_SETUP(FIXTURE)                                                                                                 \
        void do_run() override;                                                                                                     \
        FIXTURE_TEARDOWN(FIXTURE)                                                                                                   \
    };                                                                                                                              \
    DATA_TEST_REGISTRAR(TEST_NAME, MODE, STATUS, DATASET);                                                                          \
    template <typename... As>                                                                                                       \
    void TEST_NAME<std::tuple<As...>>::do_run()

#define FIXTURE_DATA_TEST_CASE(TEST_NAME, FIXTURE, MODE, DATASET) \
    FIXTURE_DATA_TEST_CASE_IMPL(TEST_NAME, FIXTURE, MODE, arm_compute::test::framework::TestCaseFactory::Status::ACTIVE, DATASET)
#define EXPECTED_FAILURE_FIXTURE_DATA_TEST_CASE(TEST_NAME, FIXTURE, MODE, DATASET) \
    FIXTURE_DATA_TEST_CASE_IMPL(TEST_NAME, FIXTURE, MODE, arm_compute::test::framework::TestCaseFactory::Status::EXPECTED_FAILURE, DATASET)
#define DISABLED_FIXTURE_DATA_TEST_CASE(TEST_NAME, FIXTURE, MODE, DATASET) \
    FIXTURE_DATA_TEST_CASE_IMPL(TEST_NAME, FIXTURE, MODE, arm_compute::test::framework::TestCaseFactory::Status::DISABLED, DATASET)

#define REGISTER_FIXTURE_TEST_CASE_IMPL(TEST_NAME, FIXTURE, MODE, STATUS)           \
    class TEST_NAME : public arm_compute::test::framework::TestCase, public FIXTURE \
    {                                                                               \
    public:                                                                     \
        TEST_CASE_CONSTRUCTOR(TEST_NAME)                                            \
        FIXTURE_SETUP(FIXTURE)                                                      \
        FIXTURE_RUN(FIXTURE)                                                        \
        FIXTURE_SYNC(FIXTURE)                                                       \
        FIXTURE_TEARDOWN(FIXTURE)                                                   \
    };                                                                              \
    TEST_REGISTRAR(TEST_NAME, MODE, STATUS)

#define REGISTER_FIXTURE_TEST_CASE(TEST_NAME, FIXTURE, MODE) \
    REGISTER_FIXTURE_TEST_CASE_IMPL(TEST_NAME, FIXTURE, MODE, arm_compute::test::framework::TestCaseFactory::Status::ACTIVE)
#define EXPECTED_FAILURE_REGISTER_FIXTURE_TEST_CASE(TEST_NAME, FIXTURE, MODE) \
    REGISTER_FIXTURE_TEST_CASE_IMPL(TEST_NAME, FIXTURE, MODE, arm_compute::test::framework::TestCaseFactory::Status::EXPECTED_FAILURE)
#define DISABLED_REGISTER_FIXTURE_TEST_CASE(TEST_NAME, FIXTURE, MODE) \
    REGISTER_FIXTURE_TEST_CASE_IMPL(TEST_NAME, FIXTURE, MODE, arm_compute::test::framework::TestCaseFactory::Status::DISABLED)

#define REGISTER_FIXTURE_DATA_TEST_CASE_IMPL(TEST_NAME, FIXTURE, MODE, STATUS, DATASET)                                             \
    template <typename T>                                                                                                           \
    class TEST_NAME;                                                                                                                \
    template <typename... As>                                                                                                       \
    class TEST_NAME<std::tuple<As...>> : public arm_compute::test::framework::DataTestCase<decltype(DATASET)::type>, public FIXTURE \
    {                                                                                                                               \
    public:                                                                                                                     \
        DATA_TEST_CASE_CONSTRUCTOR(TEST_NAME, DATASET)                                                                              \
        FIXTURE_DATA_SETUP(FIXTURE)                                                                                                 \
        FIXTURE_RUN(FIXTURE)                                                                                                        \
        FIXTURE_SYNC(FIXTURE)                                                                                                       \
        FIXTURE_TEARDOWN(FIXTURE)                                                                                                   \
    };                                                                                                                              \
    DATA_TEST_REGISTRAR(TEST_NAME, MODE, STATUS, DATASET)

#define REGISTER_FIXTURE_DATA_TEST_CASE(TEST_NAME, FIXTURE, MODE, DATASET) \
    REGISTER_FIXTURE_DATA_TEST_CASE_IMPL(TEST_NAME, FIXTURE, MODE, arm_compute::test::framework::TestCaseFactory::Status::ACTIVE, DATASET)
#define EXPECTED_FAILURE_REGISTER_FIXTURE_DATA_TEST_CASE(TEST_NAME, FIXTURE, MODE, DATASET) \
    REGISTER_FIXTURE_DATA_TEST_CASE_IMPL(TEST_NAME, FIXTURE, MODE, arm_compute::test::framework::TestCaseFactory::Status::EXPECTED_FAILURE, DATASET)
#define DISABLED_REGISTER_FIXTURE_DATA_TEST_CASE(TEST_NAME, FIXTURE, MODE, DATASET) \
    REGISTER_FIXTURE_DATA_TEST_CASE_IMPL(TEST_NAME, FIXTURE, MODE, arm_compute::test::framework::TestCaseFactory::Status::DISABLED, DATASET)
//
// TEST CASE MACROS END
//
#endif /* ARM_COMPUTE_TEST_FRAMEWORK_MACROS */