halcheck 1.0
Loading...
Searching...
No Matches
pp.hpp
1#ifndef HALCHECK_GTEST_PP_HPP
2#define HALCHECK_GTEST_PP_HPP
3
4#include <halcheck/lib/effect.hpp>
5#include <halcheck/lib/pp.hpp>
6#include <halcheck/test/strategy.hpp>
7
8#include "gtest/gtest.h"
9
10namespace halcheck { namespace gtest {
11
12struct default_strategy_effect {
13 HALCHECK_NODISCARD test::strategy fallback() const;
14};
15
16HALCHECK_NODISCARD inline test::strategy default_strategy() { return lib::effect::invoke<default_strategy_effect>(); }
17
18}} // namespace halcheck::gtest
19
20#define HALCHECK_TEST_HELPER(anon, suite, test, strategy) \
21 static void anon(); \
22 TEST(suite, test) { ::halcheck::gtest::wrap(strategy)(anon); } \
23 static void anon()
24
25#define HALCHECK_TEST(...) \
26 HALCHECK_TEST_HELPER( \
27 HALCHECK_CAT(HALCHECK_ANON_FUNC_, __LINE__), \
28 HALCHECK_1ST(__VA_ARGS__), \
29 HALCHECK_2ND(__VA_ARGS__), \
30 HALCHECK_3RD(__VA_ARGS__, ::halcheck::gtest::default_strategy()))
31
32#define HALCHECK_TYPED_TEST_HELPER(anon, suite, test, strategy) \
33 template<typename> \
34 static void anon(); \
35 TYPED_TEST(suite, test) { ::halcheck::gtest::wrap(strategy)(anon<TypeParam>); /* NOLINT */ } \
36 template<typename TypeParam> \
37 static void anon()
38
39#define HALCHECK_TYPED_TEST(...) \
40 HALCHECK_TYPED_TEST_HELPER( \
41 HALCHECK_CAT(HALCHECK_ANON_FUNC_, __LINE__), \
42 HALCHECK_1ST(__VA_ARGS__), \
43 HALCHECK_2ND(__VA_ARGS__), \
44 HALCHECK_3RD(__VA_ARGS__, ::halcheck::gtest::default_strategy()))
45
46#define HALCHECK_TEST_F_HELPER(anon, fixture, test, strategy) \
47 static void anon(); \
48 TEST_F(fixture, test) { ::halcheck::gtest::wrap(strategy)(anon); } \
49 static void anon()
50
51#define HALCHECK_TEST_F(...) \
52 HALCHECK_TEST_F_HELPER( \
53 HALCHECK_CAT(HALCHECK_ANON_FUNC_, __LINE__), \
54 HALCHECK_1ST(__VA_ARGS__), \
55 HALCHECK_2ND(__VA_ARGS__), \
56 HALCHECK_3RD(__VA_ARGS__, ::halcheck::gtest::default_strategy()))
57
58#endif
static lib::effect_result_t< T > invoke(T args)
Invokes an effect.
Definition effect.hpp:118
#define HALCHECK_NODISCARD
A backwards-compatible substitute for the [[nodiscard]] attribute.
Definition pp.hpp:60