Skip to content

Commit 6387c25

Browse files
committed
increase serialization coverage
1 parent afa8b16 commit 6387c25

File tree

1 file changed

+99
-24
lines changed

1 file changed

+99
-24
lines changed

test/serializer.cpp

Lines changed: 99 additions & 24 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,57 @@ 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+
error_code ec;
118+
serializer sr;
119+
sr.reset(&t);
120+
string js;
121+
js.reserve(4096);
122+
js.grow(sr.read(
123+
js.data(), js.capacity()).size());
124+
125+
auto const s1 = serialize(t);
126+
BOOST_TEST( s == s1 );
127+
}
128+
}
129+
130+
template<class T>
93131
void
94132
grind(
95133
string_view s0,
96-
value const& jv,
134+
T const& t,
97135
string_view name = {})
98136
{
99-
grind_one(s0, jv, name);
137+
grind_one(s0, t, name);
100138

101-
auto const s1 = serialize(jv);
139+
auto const s1 = serialize(t);
102140
for(std::size_t i = 1;
103141
i < s1.size(); ++i)
104142
{
105143
serializer sr;
106-
sr.reset(&jv);
144+
sr.reset(&t);
107145
string s2;
108146
s2.reserve(s1.size());
109147
s2.grow(sr.read(
@@ -143,6 +181,18 @@ class serializer_test
143181
break;
144182
}
145183
}
184+
{
185+
string s2;
186+
s2.reserve( s1.size() );
187+
serializer sr;
188+
sr.reset(&t);
189+
for(std::size_t i = 0; i < s1.size(); ++i)
190+
{
191+
BOOST_TEST( sr.read(s2.data() + i, 1).size() == 1 );
192+
s2.grow(1);
193+
}
194+
BOOST_TEST(s2 == s1);
195+
}
146196
}
147197

148198
//------------------------------------------------------
@@ -500,6 +550,23 @@ class serializer_test
500550
}
501551
}
502552

553+
template<class T>
554+
void
555+
check_udt(
556+
T const& t,
557+
string_view s,
558+
string_view name = {})
559+
{
560+
try
561+
{
562+
grind(s, t, name);
563+
}
564+
catch(std::exception const&)
565+
{
566+
BOOST_TEST_FAIL();
567+
}
568+
}
569+
503570
void
504571
testVectors()
505572
{
@@ -682,35 +749,43 @@ class serializer_test
682749
testUDT()
683750
{
684751
{
685-
std::vector<int> v{1, 2, 3};
752+
std::uint64_t u = 1;
753+
check_udt(u, "1");
686754

687-
serializer sr;
688-
sr.reset(&v);
755+
u = std::numeric_limits<std::int64_t>::max();
756+
u += 1;
757+
check_udt(u, "9223372036854775808");
689758

690-
char buf[32];
691-
BOOST_TEST( sr.read(buf) == "[1,2,3]" );
759+
std::int64_t i = -1;
760+
check_udt(i, "-1");
761+
762+
double d = 3.12;
763+
check_udt(d, "3.12E0");
764+
765+
#ifdef BOOST_HAS_INT128
766+
boost::int128_type ii = 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+
}
777+
{
778+
std::vector<int> v{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)