22 #include "gtest/gtest.h"
24 #if !defined(__APPLE__)
30 ::std::ostringstream oss;
35 TEST(DumpVars, Empty) {
40 TEST(DumpVars, Lvalue) {
43 ::std::string foo = "hello";
45 EXPECT_EQ(R"(foo = hello)", DUMP_VARS(foo).str());
49 TEST(DumpVars, Rvalue) {
51 EXPECT_EQ(
"2 + 2 = 4",
DUMP_VARS(2 + 2).str());
56 #define ONE_AND_TWO 1, 2
58 TEST(DumpVars, Macro) {
66 EXPECT_EQ(
"one = 1, two = 2",
70 template <
int A,
int B>
75 TEST(DumpVars, Parens) {
78 EXPECT_EQ(
"(Plus<2, 3>()) = 5",
DUMP_VARS((Plus<2, 3>())).str());
80 EXPECT_EQ(
"((Plus<2, 3>())) = 5",
DUMP_VARS(((Plus<2, 3>()))).str());
81 EXPECT_EQ(
"Parens = 5",
DUMP_VARS(((Plus<2, 3>()))).as(
"Parens").str());
84 TEST(DumpVars, Bindings) {
86 std::vector<std::pair<int, std::unique_ptr<std::string>>> v;
87 v.push_back({3, std::make_unique<std::string>(
"hello")});
88 const std::string foo =
"bar";
89 for (
const auto& [i, s] : v) {
90 EXPECT_EQ(
"i = 3, *s = hello, foo = bar",
95 TEST(DumpVars, NamesOverride) {
99 TEST(DumpVars, TwoValues) {
103 EXPECT_EQ(
"foo = 42, bar = 24",
DUMP_VARS(foo, bar).str());
104 EXPECT_EQ(
"bar = 42, foo = 24",
DUMP_VARS(foo, bar).as(
"bar",
"foo").str());
107 TEST(DumpVars, ManyArgs) {
114 EXPECT_EQ(
"a = 1, b = 2, c = 3, d = 5, e = 7, f = 11",
116 EXPECT_EQ(
"a = 1, b = 2, c = 3, d = 5, e = 7, f = 11",
120 TEST(DumpVars, LazyEvaluation) {
123 auto F = [&]() {
return ++n; };
126 EXPECT_EQ(
"F() = 1",
ToString(vars));
128 EXPECT_EQ(
"F() = 2",
ToString(vars));
130 EXPECT_EQ(
"F() = 3", vars.str());
132 EXPECT_EQ(
"F() = 4", vars.str());
134 EXPECT_EQ(
"5 = 5", vars.as(
"5").str());
139 auto F = [&]() {
return ++n; };
146 EXPECT_EQ(
"x = 3", vars.str());
148 EXPECT_EQ(
"x = 4", vars.str());
150 EXPECT_EQ(
"y = 5", vars.as(
"y").str());
155 TEST(DumpVars, TemporaryLifetime) {
156 EXPECT_EQ(R
"(std::string_view(std::string("hello")) = hello)",
158 auto v =
DUMP_VARS(std::string_view(std::string(
"hello")));
159 EXPECT_EQ(R
"(std::string_view(std::string("hello")) = hello)", ToString(v));
160 EXPECT_EQ(R"(temp = hello)", ToString(v.as("temp")));
#define DUMP_VARS_WITH_BINDINGS(binding,...)
const absl::string_view ToString(MPSolver::OptimizationProblemType optimization_problem_type)
TEST(LinearAssignmentTest, NullMatrix)