Fix test_parser.cpp formating

This commit is contained in:
ado 2023-07-29 16:51:34 +02:00
parent 78c75abec7
commit f58091cf02

View File

@ -20,15 +20,18 @@ struct unique_file_name {
const std::string name; const std::string name;
unique_file_name() unique_file_name()
: name{"random_" + std::to_string(i++) + time_now_rand() + "_file.csv"} {} : name{"random_" + std::to_string(i++) + time_now_rand() +
"_file.csv"} {
}
~unique_file_name() { std::filesystem::remove(name); } ~unique_file_name() {
std::filesystem::remove(name);
}
}; };
void replace_all(std::string& s, const std::string& from, void replace_all(std::string& s, const std::string& from,
const std::string& to) { const std::string& to) {
if (from.empty()) if (from.empty()) return;
return;
size_t start_pos = 0; size_t start_pos = 0;
while ((start_pos = s.find(from, start_pos)) != std::string::npos) { while ((start_pos = s.find(from, start_pos)) != std::string::npos) {
s.replace(start_pos, from.length(), to); s.replace(start_pos, from.length(), to);
@ -62,7 +65,9 @@ struct X {
.append(delim) .append(delim)
.append(s); .append(s);
} }
auto tied() const { return std::tie(i, d, s); } auto tied() const {
return std::tie(i, d, s);
}
}; };
template <typename T> template <typename T>
@ -256,14 +261,15 @@ TEST_CASE("parser test various cases") {
std::vector<X> i2; std::vector<X> i2;
while (!p.eof()) { while (!p.eof()) {
auto a = p.get_object<X, ss::ax<int, excluded>, double, std::string>(); auto a =
p.get_object<X, ss::ax<int, excluded>, double, std::string>();
if (p.valid()) { if (p.valid()) {
i.push_back(a); i.push_back(a);
} }
} }
for (auto &&a : for (auto&& a : p2.iterate_object<X, ss::ax<int, excluded>, double,
p2.iterate_object<X, ss::ax<int, excluded>, double, std::string>()) { std::string>()) {
if (p2.valid()) { if (p2.valid()) {
i2.push_back(std::move(a)); i2.push_back(std::move(a));
} }
@ -338,10 +344,13 @@ struct test_struct {
int i; int i;
double d; double d;
char c; char c;
auto tied() { return std::tie(i, d, c); } auto tied() {
return std::tie(i, d, c);
}
}; };
void expect_test_struct(const test_struct &) {} void expect_test_struct(const test_struct&) {
}
// various scenarios // various scenarios
TEST_CASE("parser test composite conversion") { TEST_CASE("parser test composite conversion") {
@ -365,11 +374,11 @@ TEST_CASE("parser test composite conversion") {
{ {
constexpr static auto expectedData = std::tuple{10, 'a', 11.1}; constexpr static auto expectedData = std::tuple{10, 'a', 11.1};
auto [d1, d2, d3, d4] = p.try_next<int, int, double>(fail) auto [d1, d2, d3, d4] =
p.try_next<int, int, double>(fail)
.or_else<test_struct>(fail) .or_else<test_struct>(fail)
.or_else<int, char, double>([&](auto &&data) { .or_else<int, char, double>(
CHECK_EQ(data, expectedData); [&](auto&& data) { CHECK_EQ(data, expectedData); })
})
.on_error(fail) .on_error(fail)
.or_else<test_tuple>(fail) .or_else<test_tuple>(fail)
.values(); .values();
@ -429,7 +438,8 @@ TEST_CASE("parser test composite conversion") {
{ {
REQUIRE(!p.eof()); REQUIRE(!p.eof());
auto [d1, d2] = p.try_next<int, double>([](auto &i, auto &d) { auto [d1, d2] =
p.try_next<int, double>([](auto& i, auto& d) {
REQUIRE_EQ(std::tie(i, d), std::tuple{10, 11.1}); REQUIRE_EQ(std::tie(i, d), std::tuple{10, 11.1});
}) })
.or_else<int, double>([](auto&, auto&) { FAIL(""); }) .or_else<int, double>([](auto&, auto&) { FAIL(""); })
@ -456,7 +466,8 @@ TEST_CASE("parser test composite conversion") {
{ {
REQUIRE(!p.eof()); REQUIRE(!p.eof());
auto [d1, d2, d3, d4, d5] = p.try_next<int, int, double>(fail) auto [d1, d2, d3, d4, d5] =
p.try_next<int, int, double>(fail)
.or_object<test_struct, int, double, char>() .or_object<test_struct, int, double, char>()
.or_else<test_struct>(expect_test_struct) .or_else<test_struct>(expect_test_struct)
.or_else<test_tuple>(fail) .or_else<test_tuple>(fail)
@ -558,7 +569,9 @@ struct my_string {
my_string() = default; my_string() = default;
~my_string() { delete[] data; } ~my_string() {
delete[] data;
}
// make sure no object is copied // make sure no object is copied
my_string(const my_string&) = delete; my_string(const my_string&) = delete;
@ -587,7 +600,9 @@ struct xyz {
my_string x; my_string x;
my_string y; my_string y;
my_string z; my_string z;
auto tied() { return std::tie(x, y, z); } auto tied() {
return std::tie(x, y, z);
}
}; };
TEST_CASE("parser test the moving of parsed composite values") { TEST_CASE("parser test the moving of parsed composite values") {
@ -673,9 +688,12 @@ std::string no_escape(std::string &s) {
TEST_CASE("parser test csv on multiple lines with escapes") { TEST_CASE("parser test csv on multiple lines with escapes") {
unique_file_name f; unique_file_name f;
std::vector<X> data = { std::vector<X> data = {{1, 2, "x\\\nx\\\r\nx"},
{1, 2, "x\\\nx\\\r\nx"}, {5, 6, "z\\\nz\\\nz"}, {7, 8, "u"}, {5, 6, "z\\\nz\\\nz"},
{3, 4, "y\\\ny\\\ny"}, {9, 10, "v\\\\"}, {11, 12, "w\\\n"}}; {7, 8, "u"},
{3, 4, "y\\\ny\\\ny"},
{9, 10, "v\\\\"},
{11, 12, "w\\\n"}};
for (auto& [_, __, s] : data) { for (auto& [_, __, s] : data) {
update_if_crlf(s); update_if_crlf(s);
} }
@ -768,8 +786,8 @@ TEST_CASE("parser test multiline restricted") {
out << "19,20,just strings" << std::endl; out << "19,20,just strings" << std::endl;
} }
ss::parser<ss::multiline_restricted<2>, ss::quote<'"'>, ss::escape<'\\'>> p{ ss::parser<ss::multiline_restricted<2>, ss::quote<'"'>, ss::escape<'\\'>>
f.name, ","}; p{f.name, ","};
std::vector<X> i; std::vector<X> i;
while (!p.eof()) { while (!p.eof()) {
@ -794,13 +812,16 @@ TEST_CASE("parser test multiline restricted") {
CHECK_EQ(i, data); CHECK_EQ(i, data);
} }
template <typename T, typename Tuple> struct has_type; template <typename T, typename Tuple>
struct has_type;
template <typename T, typename... Us> template <typename T, typename... Us>
struct has_type<T, std::tuple<Us...>> struct has_type<T, std::tuple<Us...>>
: std::disjunction<std::is_same<T, Us>...> {}; : std::disjunction<std::is_same<T, Us>...> {};
void checkSize(size_t size1, size_t size2) { CHECK_EQ(size1, size2); } void checkSize(size_t size1, size_t size2) {
CHECK_EQ(size1, size2);
}
template <typename... Ts> template <typename... Ts>
void testFields(const std::string file_name, const std::vector<X>& data, void testFields(const std::string file_name, const std::vector<X>& data,
@ -928,7 +949,8 @@ TEST_CASE("parser test various cases with header") {
p.use_fields(Str, Int, Dbl); p.use_fields(Str, Int, Dbl);
{ {
auto [string_, int_, double_] = p.get_next<std::string, int, double>(); auto [string_, int_, double_] =
p.get_next<std::string, int, double>();
CHECK_EQ(double_, data[3].d); CHECK_EQ(double_, data[3].d);
CHECK_EQ(int_, data[3].i); CHECK_EQ(int_, data[3].i);
CHECK_EQ(string_, data[3].s); CHECK_EQ(string_, data[3].s);