aboutsummaryrefslogtreecommitdiff
path: root/framework/Macros.h
diff options
context:
space:
mode:
Diffstat (limited to 'framework/Macros.h')
-rw-r--r--framework/Macros.h188
1 files changed, 188 insertions, 0 deletions
diff --git a/framework/Macros.h b/framework/Macros.h
new file mode 100644
index 0000000000..e3ef71ac56
--- /dev/null
+++ b/framework/Macros.h
@@ -0,0 +1,188 @@
+/*
+ * Copyright (c) 2017 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 "Exceptions.h"
+#include "Framework.h"
+#include "Registrars.h"
+#include "TestCase.h"
+
+#include <sstream>
+
+//
+// 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
+//
+
+//
+// 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, _data); \
+ }
+#define FIXTURE_RUN(FIXTURE) \
+ void do_run() override \
+ { \
+ FIXTURE::run(); \
+ }
+#define FIXTURE_TEARDOWN(FIXTURE) \
+ void do_teardown() override \
+ { \
+ FIXTURE::teardown(); \
+ }
+#define TEST_REGISTRAR(TEST_NAME) \
+ static arm_compute::test::framework::detail::TestCaseRegistrar<TEST_NAME> TEST_NAME##_reg \
+ { \
+ #TEST_NAME \
+ }
+#define DATA_TEST_REGISTRAR(TEST_NAME, DATASET) \
+ static arm_compute::test::framework::detail::TestCaseRegistrar<TEST_NAME> TEST_NAME##_reg \
+ { \
+ #TEST_NAME, DATASET \
+ }
+
+#define TEST_CASE(TEST_NAME) \
+ class TEST_NAME : public arm_compute::test::framework::TestCase \
+ { \
+ public: \
+ TEST_CASE_CONSTRUCTOR(TEST_NAME) \
+ void do_run() override; \
+ }; \
+ TEST_REGISTRAR(TEST_NAME); \
+ void TEST_NAME::do_run()
+
+#define DATA_TEST_CASE(TEST_NAME, DATASET, ...) \
+ class TEST_NAME : 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, _data); \
+ } \
+ void run(__VA_ARGS__); \
+ }; \
+ DATA_TEST_REGISTRAR(TEST_NAME, DATASET); \
+ void TEST_NAME::run(__VA_ARGS__)
+
+#define FIXTURE_TEST_CASE(TEST_NAME, FIXTURE) \
+ 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); \
+ void TEST_NAME::do_run()
+
+#define FIXTURE_DATA_TEST_CASE(TEST_NAME, FIXTURE, DATASET) \
+ class TEST_NAME : 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, DATASET); \
+ void TEST_NAME::do_run()
+
+#define REGISTER_FIXTURE_TEST_CASE(TEST_NAME, FIXTURE) \
+ class TEST_NAME : public arm_compute::test::framework::TestCase, public FIXTURE \
+ { \
+ public: \
+ TEST_CASE_CONSTRUCTOR(TEST_NAME) \
+ FIXTURE_SETUP(FIXTURE) \
+ FIXTURE_RUN(FIXTURE) \
+ FIXTURE_TEARDOWN(FIXTURE) \
+ }; \
+ TEST_REGISTRAR(TEST_NAME)
+
+#define REGISTER_FIXTURE_DATA_TEST_CASE(TEST_NAME, FIXTURE, DATASET) \
+ class TEST_NAME : 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_TEARDOWN(FIXTURE) \
+ }; \
+ DATA_TEST_REGISTRAR(TEST_NAME, DATASET)
+//
+// TEST CASE MACROS END
+//
+
+#define ARM_COMPUTE_ASSERT_EQUAL(x, y) \
+ do \
+ { \
+ const auto &_x = (x); \
+ const auto &_y = (y); \
+ if(_x != _y) \
+ { \
+ std::stringstream msg; \
+ msg << "Assertion " << _x << " != " << _y << " failed."; \
+ throw arm_compute::test::framework::TestError(msg.str()); \
+ } \
+ } while(false)
+
+#define ARM_COMPUTE_EXPECT_EQUAL(x, y) \
+ do \
+ { \
+ const auto &_x = (x); \
+ const auto &_y = (y); \
+ if(_x != _y) \
+ { \
+ std::stringstream msg; \
+ msg << "Expectation " << _x << " != " << _y << " failed."; \
+ arm_compute::test::framework::Framework::get().log_failed_expectation(msg.str()); \
+ } \
+ } while(false)
+#endif /* ARM_COMPUTE_TEST_FRAMEWORK_MACROS */