Skip to content

Commit 159fe09

Browse files
committed
Language/CSV/Mapping: Adding functor test
1 parent 020ce69 commit 159fe09

1 file changed

Lines changed: 50 additions & 13 deletions

File tree

tests/Language/CSV/Mapping.mpp

Lines changed: 50 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -49,18 +49,6 @@ namespace CppUtils::UnitTest::Language::CSV::Mapping
4949
CppUtils::Type::Pair<"Signed integer"_token, &FileObject::d>,
5050
CppUtils::Type::Pair<"Floating point"_token, &FileObject::e>>;
5151

52-
namespace Conversion
53-
{
54-
inline auto doubleValue(std::size_t& member, std::string_view value) -> void
55-
{
56-
std::from_chars(std::data(value), std::data(value) + std::size(value), member);
57-
member *= 2;
58-
}
59-
}
60-
61-
using FunctionMapping = CppUtils::Type::Mapping<
62-
CppUtils::Type::Pair<"Unsigned integer"_token, &Conversion::doubleValue>>;
63-
6452
struct ObjectMapping final
6553
{
6654
using CSVMapping = UnitTest::Language::CSV::Mapping::CSVMapping;
@@ -79,7 +67,40 @@ namespace CppUtils::UnitTest::Language::CSV::Mapping
7967
{
8068
using CSVMapping = UnitTest::Language::CSV::Mapping::CSVMapping;
8169
using StructMapping = UnitTest::Language::CSV::Mapping::StructMapping;
82-
using FunctionMapping = UnitTest::Language::CSV::Mapping::FunctionMapping;
70+
using FunctionMapping = CppUtils::Type::Mapping<
71+
CppUtils::Type::Pair<"Unsigned integer"_token, [](std::size_t& member, std::string_view value) {
72+
std::from_chars(std::data(value), std::data(value) + std::size(value), member);
73+
member *= 2;
74+
}>>;
75+
};
76+
77+
struct ObjectLambdaMapping final
78+
{
79+
using CSVMapping = UnitTest::Language::CSV::Mapping::CSVMapping;
80+
using StructMapping = UnitTest::Language::CSV::Mapping::StructMapping;
81+
using FunctionMapping = CppUtils::Type::Mapping<
82+
CppUtils::Type::Pair<"Unsigned integer"_token, [](std::size_t& member, std::string_view value) {
83+
std::from_chars(std::data(value), std::data(value) + std::size(value), member);
84+
member *= 2;
85+
}>>;
86+
};
87+
88+
struct ObjectFunctorMapping final
89+
{
90+
struct MultiplyBy final
91+
{
92+
std::size_t factor;
93+
void operator()(std::size_t& member, std::string_view value) const
94+
{
95+
std::from_chars(std::data(value), std::data(value) + std::size(value), member);
96+
member *= factor;
97+
}
98+
};
99+
100+
using CSVMapping = UnitTest::Language::CSV::Mapping::CSVMapping;
101+
using StructMapping = UnitTest::Language::CSV::Mapping::StructMapping;
102+
using FunctionMapping = CppUtils::Type::Mapping<
103+
CppUtils::Type::Pair<"Unsigned integer"_token, MultiplyBy{4uz}>>;
83104
};
84105

85106
auto _ = TestSuite{"Language/CSV/Mapping", {}, [](TestSuite& suite) {
@@ -183,5 +204,21 @@ namespace CppUtils::UnitTest::Language::CSV::Mapping
183204

184205
suite.expectEqual(object, Object{"foo", "bar", 42, -1, 3.14f});
185206
});
207+
208+
suite.addTest("LambdaMapping", [&] {
209+
constexpr auto csvLine = "foo;bar;21;-1;3.14"sv;
210+
211+
const auto object = CppUtils::Language::CSV::toStruct<Object, ObjectLambdaMapping>(csvLine);
212+
213+
suite.expectEqual(object, Object{"foo", "bar", 42, -1, 3.14f});
214+
});
215+
216+
suite.addTest("FunctorMapping (lambda with capture substitute)", [&] {
217+
constexpr auto csvLine = "foo;bar;10;-1;3.14"sv;
218+
219+
const auto object = CppUtils::Language::CSV::toStruct<Object, ObjectFunctorMapping>(csvLine);
220+
221+
suite.expectEqual(object, Object{"foo", "bar", 40, -1, 3.14f});
222+
});
186223
}};
187224
}

0 commit comments

Comments
 (0)