Skip to content

Commit 72c5e26

Browse files
committed
UnitTests for std::filesystem::path
1 parent 9089f76 commit 72c5e26

File tree

5 files changed

+138
-3
lines changed

5 files changed

+138
-3
lines changed

include/cereal/details/helpers.hpp

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -256,6 +256,8 @@ namespace cereal
256256
@internal */
257257
DeferredData( T && v ) : value(std::forward<T>(v)) {}
258258

259+
DeferredData(const DeferredData &) = default;
260+
259261
Type value;
260262
};
261263

include/cereal/types/filesystem.hpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -27,6 +27,7 @@
2727
(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
2828
SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
2929
*/
30+
3031
#ifndef CEREAL_TYPES_FILESYSTEM_HPP_
3132
#define CEREAL_TYPES_FILESYSTEM_HPP_
3233

@@ -56,7 +57,6 @@ namespace cereal
5657
ar(str);
5758
path = std::move(str);
5859
}
59-
6060
} // namespace cereal
6161

6262
#endif // CEREAL_TYPES_FILESYSTEM_HPP_

include/cereal/types/tuple.hpp

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -95,7 +95,7 @@ namespace cereal
9595
template <class Archive, class ... Types> inline
9696
static void apply( Archive & ar, std::tuple<Types...> & tuple )
9797
{
98-
serialize<Height - 1>::template apply( ar, tuple );
98+
serialize<Height - 1>::template apply<>( ar, tuple );
9999
ar( CEREAL_NVP_(tuple_element_name<Height - 1>::c_str(),
100100
std::get<Height - 1>( tuple )) );
101101
}
@@ -116,7 +116,7 @@ namespace cereal
116116
template <class Archive, class ... Types> inline
117117
void CEREAL_SERIALIZE_FUNCTION_NAME( Archive & ar, std::tuple<Types...> & tuple )
118118
{
119-
tuple_detail::serialize<std::tuple_size<std::tuple<Types...>>::value>::template apply( ar, tuple );
119+
tuple_detail::serialize<std::tuple_size<std::tuple<Types...>>::value>::template apply<>( ar, tuple );
120120
}
121121
} // namespace cereal
122122

unittests/cpp17/filesystem.cpp

Lines changed: 57 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,57 @@
1+
/*
2+
Copyright (c) 2025, Francois Michaut
3+
All rights reserved.
4+
5+
Redistribution and use in source and binary forms, with or without
6+
modification, are permitted provided that the following conditions are met:
7+
* Redistributions of source code must retain the above copyright
8+
notice, this list of conditions and the following disclaimer.
9+
* Redistributions in binary form must reproduce the above copyright
10+
notice, this list of conditions and the following disclaimer in the
11+
documentation and/or other materials provided with the distribution.
12+
* Neither the name of the copyright holder nor the
13+
names of its contributors may be used to endorse or promote products
14+
derived from this software without specific prior written permission.
15+
16+
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
17+
ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
18+
WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
19+
DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY
20+
DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
21+
(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
22+
LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
23+
ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
24+
(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
25+
SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
26+
*/
27+
28+
#define DOCTEST_CONFIG_IMPLEMENT_WITH_MAIN
29+
#include "filesystem.hpp"
30+
31+
#ifdef CEREAL_HAS_CPP17
32+
33+
TEST_SUITE_BEGIN("std_filesystem");
34+
35+
TEST_CASE("binary_std_filesystem")
36+
{
37+
test_std_filesystem_path<cereal::BinaryInputArchive, cereal::BinaryOutputArchive>();
38+
}
39+
40+
TEST_CASE("portable_binary_std_filesystem")
41+
{
42+
test_std_filesystem_path<cereal::PortableBinaryInputArchive, cereal::PortableBinaryOutputArchive>();
43+
}
44+
45+
TEST_CASE("xml_std_filesystem")
46+
{
47+
test_std_filesystem_path<cereal::XMLInputArchive, cereal::XMLOutputArchive>();
48+
}
49+
50+
TEST_CASE("json_std_filesystem")
51+
{
52+
test_std_filesystem_path<cereal::JSONInputArchive, cereal::JSONOutputArchive>();
53+
}
54+
55+
TEST_SUITE_END();
56+
57+
#endif // CEREAL_HAS_CPP17

unittests/cpp17/filesystem.hpp

Lines changed: 76 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,76 @@
1+
/*
2+
Copyright (c) 2025, Francois Michaut
3+
All rights reserved.
4+
5+
Redistribution and use in source and binary forms, with or without
6+
modification, are permitted provided that the following conditions are met:
7+
* Redistributions of source code must retain the above copyright
8+
notice, this list of conditions and the following disclaimer.
9+
* Redistributions in binary form must reproduce the above copyright
10+
notice, this list of conditions and the following disclaimer in the
11+
documentation and/or other materials provided with the distribution.
12+
* Neither the name of the copyright holder nor the
13+
names of its contributors may be used to endorse or promote products
14+
derived from this software without specific prior written permission.
15+
16+
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
17+
ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
18+
WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
19+
DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY
20+
DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
21+
(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
22+
LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
23+
ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
24+
(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
25+
SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
26+
*/
27+
28+
#ifndef CEREAL_TEST_CPP17_FILESYSTEM_H_
29+
#define CEREAL_TEST_CPP17_FILESYSTEM_H_
30+
#include "../common.hpp"
31+
32+
#ifdef CEREAL_HAS_CPP17
33+
34+
#include <cereal/types/filesystem.hpp>
35+
36+
template <class IArchive, class OArchive> inline
37+
void test_std_filesystem_path()
38+
{
39+
std::random_device rd;
40+
std::mt19937 gen(rd());
41+
42+
for(size_t i=0; i<100; ++i)
43+
{
44+
std::filesystem::path o_path1 = random_basic_string<char>(gen);
45+
std::filesystem::path o_path2 = "";
46+
std::filesystem::path o_path3;
47+
48+
std::ostringstream os;
49+
{
50+
OArchive oar(os);
51+
oar(o_path_1);
52+
oar(o_path_2);
53+
oar(o_path_3);
54+
}
55+
56+
std::filesystem::path i_path1;
57+
std::filesystem::path i_path2;
58+
std::filesystem::path i_path3;
59+
60+
std::istringstream is(os.str());
61+
{
62+
IArchive iar(is);
63+
64+
iar(i_path1);
65+
iar(i_path2);
66+
iar(i_path3);
67+
}
68+
69+
CHECK_EQ(i_path1, o_path1);
70+
CHECK_EQ(i_path2, o_path2);
71+
CHECK_EQ(i_path3, o_path3);
72+
}
73+
}
74+
75+
#endif // CEREAL_HAS_CPP17
76+
#endif // CEREAL_TEST_CPP17_VARIANT_H_

0 commit comments

Comments
 (0)