1#ifndef HALCHECK_GTEST_PP_HPP
2#define HALCHECK_GTEST_PP_HPP
4#include <halcheck/lib/effect.hpp>
5#include <halcheck/lib/pp.hpp>
6#include <halcheck/test/strategy.hpp>
8#include "gtest/gtest.h"
10namespace halcheck {
namespace gtest {
12struct default_strategy_effect {
20#define HALCHECK_TEST_HELPER(anon, suite, test, strategy) \
22 TEST(suite, test) { ::halcheck::gtest::wrap(strategy)(anon); } \
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()))
32#define HALCHECK_TYPED_TEST_HELPER(anon, suite, test, strategy) \
35 TYPED_TEST(suite, test) { ::halcheck::gtest::wrap(strategy)(anon<TypeParam>); } \
36 template<typename TypeParam> \
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()))
46#define HALCHECK_TEST_F_HELPER(anon, fixture, test, strategy) \
48 TEST_F(fixture, test) { ::halcheck::gtest::wrap(strategy)(anon); } \
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()))
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