Repository navigation
Expand file tree
/
Copy pathexpect.hpp
More file actions
54 lines (44 loc) · 1.5 KB
/
Copy pathexpect.hpp
File metadata and controls
54 lines (44 loc) · 1.5 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
/**
* @file
* @copyright defined in eos/LICENSE.txt
*/
#pragma once
namespace eosio { namespace test {
template<typename Pred, typename Eval, typename T>
struct expector {
expector(Eval _eval, const T& _expected, const char* const _msg)
: expected(_expected)
, eval(_eval)
, msg(_msg)
{}
template<typename Input>
void operator() (const Input& input) {
BOOST_TEST_INFO(msg);
auto actual = eval(input);
BOOST_CHECK_EQUAL(Pred()(actual, expected), true);
}
T expected;
Eval eval;
char const * const msg;
};
template<typename Pred, typename Eval, typename T>
auto expect(Eval&& eval, T expected, char const * const msg) {
return expector<Pred, Eval, T>(eval, expected, msg);
}
template<typename Eval, typename T>
auto expect(Eval&& eval, T expected, char const * const msg) {
return expector<std::equal_to<T>, Eval, T>(eval, expected, msg);
}
template<typename Eval>
auto expect(Eval&& eval, char const * const msg) {
return expector<std::equal_to<bool>, Eval, bool>(eval, true, msg);
}
#define _NUM_ARGS(A,B,C,N, ...) N
#define NUM_ARGS(...) _NUM_ARGS(__VA_ARGS__, 3, 2, 1)
#define EXPECT(...) EXPECT_(NUM_ARGS(__VA_ARGS__),__VA_ARGS__)
#define EXPECT_(N, ...) EXPECT__(N, __VA_ARGS__)
#define EXPECT__(N, ...) EXPECT_##N(__VA_ARGS__)
#define EXPECT_3(P, E, T) eosio::test::expect<P>(E,T,"EXPECT<" #P ">(" #E "," #T ")")
#define EXPECT_2(E, T) eosio::test::expect(E,T,"EXPECT(" #E "," #T ")")
#define EXPECT_1(E) eosio::test::expect(E,"EXPECT(" #E ")")
}}