-
Notifications
You must be signed in to change notification settings - Fork 189
Expand file tree
/
Copy pathCaptureTests.cpp
More file actions
115 lines (84 loc) · 3.05 KB
/
Copy pathCaptureTests.cpp
File metadata and controls
115 lines (84 loc) · 3.05 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
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
#include <catch2/catch.hpp>
#include <rapidcheck/catch.h>
#include "rapidcheck/detail/Capture.h"
#include "util/Box.h"
using namespace rc;
using namespace rc::test;
namespace {
template <typename Expression, typename T>
void verifyExpression(const Expression &expression,
const T &expectedValue,
const std::string &expectedExpansion) {
SECTION(expectedExpansion) {
REQUIRE(expression.value() == expectedValue);
std::ostringstream ss;
expression.show(ss);
REQUIRE(ss.str() == expectedExpansion);
}
}
#define VERIFY_EXPRESSION(expression, expansion) \
verifyExpression(RC_INTERNAL_CAPTURE(expression), (expression), expansion)
} // namespace
namespace rc {
// We're intentionally leaving out parenthesis for testing capture of multiple
// operators here so suppress GCC warnings for that:
#ifdef __GNUC__
#pragma GCC diagnostic push
#pragma GCC diagnostic ignored "-Wparentheses"
#endif // __GNUC__
TEST_CASE("RC_INTERNAL_CAPTURE") {
SECTION("*") { VERIFY_EXPRESSION(2 * 3 * 4, "2 * 3 * 4"); }
SECTION("/") { VERIFY_EXPRESSION(2 / 3, "2 / 3"); }
SECTION("%") { VERIFY_EXPRESSION(2 % 3, "2 % 3"); }
SECTION("+") {
VERIFY_EXPRESSION(2 + 3 + 4, "2 + 3 + 4");
VERIFY_EXPRESSION(std::string("foo") + std::string("\n"),
"\"foo\" + \"\\n\"");
}
SECTION("-") { VERIFY_EXPRESSION(2 - 3 - 4, "2 - 3 - 4"); }
SECTION("<<") { VERIFY_EXPRESSION(1 << 4, "1 << 4"); }
SECTION("<<") { VERIFY_EXPRESSION(53 >> 4, "53 >> 4"); }
SECTION("<") {
VERIFY_EXPRESSION(1 < 2, "1 < 2");
VERIFY_EXPRESSION(std::string("foo") < std::string("\n"),
"\"foo\" < \"\\n\"");
}
SECTION(">") {
VERIFY_EXPRESSION(1 > 2, "1 > 2");
VERIFY_EXPRESSION(std::string("foo") > std::string("\n"),
"\"foo\" > \"\\n\"");
}
SECTION(">=") {
VERIFY_EXPRESSION(1 >= 2, "1 >= 2");
VERIFY_EXPRESSION(std::string("foo") >= std::string("\n"),
"\"foo\" >= \"\\n\"");
}
SECTION("<=") {
VERIFY_EXPRESSION(1 <= 2, "1 <= 2");
VERIFY_EXPRESSION(std::string("foo") <= std::string("\n"),
"\"foo\" <= \"\\n\"");
}
SECTION("==") {
VERIFY_EXPRESSION(1 == 2, "1 == 2");
VERIFY_EXPRESSION(std::string("foo") == std::string("\n"),
"\"foo\" == \"\\n\"");
}
SECTION("!=") {
VERIFY_EXPRESSION(1 != 2, "1 != 2");
VERIFY_EXPRESSION(std::string("foo") != std::string("\n"),
"\"foo\" != \"\\n\"");
}
SECTION("&") { VERIFY_EXPRESSION(3 & 1, "3 & 1"); }
SECTION("^") { VERIFY_EXPRESSION(1 ^ 2, "1 ^ 2"); }
SECTION("|") { VERIFY_EXPRESSION(1 | 2, "1 | 2"); }
SECTION("&&") { VERIFY_EXPRESSION(true && false, "true && false"); }
SECTION("||") { VERIFY_EXPRESSION(true || false, "true || false"); }
SECTION("mixed") {
VERIFY_EXPRESSION(2 + 3 == 5, "2 + 3 == 5");
VERIFY_EXPRESSION(2 % 3 == 5 == true, "2 % 3 == 5 == true");
}
}
#ifdef __GNUC__
#pragma GCC diagnostic pop
#endif // __GNUC__
} // namespace rc