Skip to content

Commit 8f1d34a

Browse files
committed
increase serialization coverage
1 parent afa8b16 commit 8f1d34a

File tree

1 file changed

+100
-25
lines changed

1 file changed

+100
-25
lines changed

test/serializer.cpp

Lines changed: 100 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,7 @@
1717
#include <iostream>
1818
#include <map>
1919
#include <vector>
20+
#include <limits.h>
2021

2122
#include "parse-vectors.hpp"
2223
#include "test.hpp"
@@ -90,20 +91,56 @@ class serializer_test
9091
}
9192
}
9293

94+
template<class T>
95+
void
96+
grind_one(string_view s, T const& t, string_view name = {})
97+
{
98+
{
99+
auto const s1 = serialize(t);
100+
if( !BOOST_TEST(s == s1) )
101+
{
102+
if(name.empty())
103+
log <<
104+
" " << s << "\n"
105+
" " << s1 <<
106+
std::endl;
107+
else
108+
log << name << ":\n"
109+
" " << s << "\n"
110+
" " << s1 <<
111+
std::endl;
112+
}
113+
}
114+
115+
// large buffer
116+
{
117+
serializer sr;
118+
sr.reset(&t);
119+
string js;
120+
js.reserve(4096);
121+
js.grow(sr.read(
122+
js.data(), js.capacity()).size());
123+
124+
auto const s1 = serialize(t);
125+
BOOST_TEST( s == s1 );
126+
}
127+
}
128+
129+
template<class T>
93130
void
94131
grind(
95132
string_view s0,
96-
value const& jv,
133+
T const& t,
97134
string_view name = {})
98135
{
99-
grind_one(s0, jv, name);
136+
grind_one(s0, t, name);
100137

101-
auto const s1 = serialize(jv);
138+
auto const s1 = serialize(t);
102139
for(std::size_t i = 1;
103140
i < s1.size(); ++i)
104141
{
105142
serializer sr;
106-
sr.reset(&jv);
143+
sr.reset(&t);
107144
string s2;
108145
s2.reserve(s1.size());
109146
s2.grow(sr.read(
@@ -143,6 +180,18 @@ class serializer_test
143180
break;
144181
}
145182
}
183+
{
184+
string s2;
185+
s2.reserve( s1.size() );
186+
serializer sr;
187+
sr.reset(&t);
188+
for(std::size_t i = 0; i < s1.size(); ++i)
189+
{
190+
BOOST_TEST( sr.read(s2.data() + i, 1).size() == 1 );
191+
s2.grow(1);
192+
}
193+
BOOST_TEST(s2 == s1);
194+
}
146195
}
147196

148197
//------------------------------------------------------
@@ -500,6 +549,23 @@ class serializer_test
500549
}
501550
}
502551

552+
template<class T>
553+
void
554+
check_udt(
555+
T const& t,
556+
string_view s,
557+
string_view name = {})
558+
{
559+
try
560+
{
561+
grind(s, t, name);
562+
}
563+
catch(std::exception const&)
564+
{
565+
BOOST_TEST_FAIL();
566+
}
567+
}
568+
503569
void
504570
testVectors()
505571
{
@@ -681,36 +747,45 @@ class serializer_test
681747
void
682748
testUDT()
683749
{
750+
{
751+
std::uint64_t u = 1;
752+
check_udt(u, "1");
753+
754+
u = (std::numeric_limits<std::int64_t>::max)();
755+
u += 1;
756+
check_udt(u, "9223372036854775808");
757+
758+
std::int64_t i = -1;
759+
check_udt(i, "-1");
760+
761+
double d = 3.12;
762+
check_udt(d, "3.12E0");
763+
764+
#if defined(BOOST_HAS_INT128) && defined(__GLIBCXX_TYPE_INT_N_0)
765+
boost::int128_type ii =
766+
(std::numeric_limits<std::uint64_t>::max)();
767+
ii += 1;
768+
d = ii;
769+
check_udt( ii, serialize(value(d)) );
770+
771+
ii = (std::numeric_limits<std::int64_t>::min)();
772+
ii -= 1;
773+
d = ii;
774+
check_udt( ii, serialize(value(d)) );
775+
#endif
776+
}
684777
{
685778
std::vector<int> v{1, 2, 3};
686-
687-
serializer sr;
688-
sr.reset(&v);
689-
690-
char buf[32];
691-
BOOST_TEST( sr.read(buf) == "[1,2,3]" );
779+
check_udt(v, "[1,2,3]");
692780
}
693781
{
694782
std::vector<double> v{3.5, -14, 7711.1};
695-
696-
serializer sr;
697-
sr.reset(&v);
698-
699-
char buf[32];
700-
BOOST_TEST( sr.read(buf) == "[3.5E0,-1.4E1,7.7111E3]" );
783+
check_udt(v, "[3.5E0,-1.4E1,7.7111E3]");
701784
}
702785
{
703786
std::map<std::string, int> m{
704787
{"one", 1}, {"two", 2}, {"three", 3} };
705-
706-
serializer sr;
707-
sr.reset(&m);
708-
709-
char buf[32];
710-
string_view output = sr.read(buf);
711-
BOOST_TEST((
712-
parse(output) ==
713-
value{ {"one", 1}, {"two", 2}, {"three", 3} } ));
788+
check_udt( m, R"({"one":1,"three":3,"two":2})" );
714789
}
715790
}
716791

0 commit comments

Comments
 (0)