added assertion for contiguous memory
This commit is contained in:
parent
92ee1d56eb
commit
dfc2c1abe5
3 changed files with 21 additions and 9 deletions
|
@ -8902,7 +8902,13 @@ basic_json_parser_63:
|
||||||
: callback(cb),
|
: callback(cb),
|
||||||
m_lexer(reinterpret_cast<const typename lexer::lexer_char_t*>(&(*first)),
|
m_lexer(reinterpret_cast<const typename lexer::lexer_char_t*>(&(*first)),
|
||||||
static_cast<size_t>(std::distance(first, last)))
|
static_cast<size_t>(std::distance(first, last)))
|
||||||
{}
|
{
|
||||||
|
int i = 0;
|
||||||
|
assert(std::accumulate(first, last, true, [&i, &first](bool res, decltype(*first) val)
|
||||||
|
{
|
||||||
|
return res and (val == *(std::next(std::addressof(*first), i++)));
|
||||||
|
}));
|
||||||
|
}
|
||||||
|
|
||||||
/// public parser interface
|
/// public parser interface
|
||||||
basic_json parse()
|
basic_json parse()
|
||||||
|
|
|
@ -8199,7 +8199,13 @@ class basic_json
|
||||||
: callback(cb),
|
: callback(cb),
|
||||||
m_lexer(reinterpret_cast<const typename lexer::lexer_char_t*>(&(*first)),
|
m_lexer(reinterpret_cast<const typename lexer::lexer_char_t*>(&(*first)),
|
||||||
static_cast<size_t>(std::distance(first, last)))
|
static_cast<size_t>(std::distance(first, last)))
|
||||||
{}
|
{
|
||||||
|
int i = 0;
|
||||||
|
assert(std::accumulate(first, last, true, [&i, &first](bool res, decltype(*first) val)
|
||||||
|
{
|
||||||
|
return res and (val == *(std::next(std::addressof(*first), i++)));
|
||||||
|
}));
|
||||||
|
}
|
||||||
|
|
||||||
/// public parser interface
|
/// public parser interface
|
||||||
basic_json parse()
|
basic_json parse()
|
||||||
|
|
|
@ -750,42 +750,42 @@ TEST_CASE("parser class")
|
||||||
SECTION("from std::vector")
|
SECTION("from std::vector")
|
||||||
{
|
{
|
||||||
std::vector<uint8_t> v = {'t', 'r', 'u', 'e', '\0'};
|
std::vector<uint8_t> v = {'t', 'r', 'u', 'e', '\0'};
|
||||||
CHECK (json::parser(std::begin(v), std::end(v)).parse() == json(true));
|
CHECK(json::parser(std::begin(v), std::end(v)).parse() == json(true));
|
||||||
}
|
}
|
||||||
|
|
||||||
SECTION("from std::array")
|
SECTION("from std::array")
|
||||||
{
|
{
|
||||||
std::array<uint8_t, 5> v { {'t', 'r', 'u', 'e', '\0'} };
|
std::array<uint8_t, 5> v { {'t', 'r', 'u', 'e', '\0'} };
|
||||||
CHECK (json::parser(std::begin(v), std::end(v)).parse() == json(true));
|
CHECK(json::parser(std::begin(v), std::end(v)).parse() == json(true));
|
||||||
}
|
}
|
||||||
|
|
||||||
SECTION("from array")
|
SECTION("from array")
|
||||||
{
|
{
|
||||||
uint8_t v[] = {'t', 'r', 'u', 'e'};
|
uint8_t v[] = {'t', 'r', 'u', 'e'};
|
||||||
CHECK (json::parser(std::begin(v), std::end(v)).parse() == json(true));
|
CHECK(json::parser(std::begin(v), std::end(v)).parse() == json(true));
|
||||||
}
|
}
|
||||||
|
|
||||||
SECTION("from char literal")
|
SECTION("from char literal")
|
||||||
{
|
{
|
||||||
CHECK (json::parser("true").parse() == json(true));
|
CHECK(json::parser("true").parse() == json(true));
|
||||||
}
|
}
|
||||||
|
|
||||||
SECTION("from std::string")
|
SECTION("from std::string")
|
||||||
{
|
{
|
||||||
std::string v = {'t', 'r', 'u', 'e'};
|
std::string v = {'t', 'r', 'u', 'e'};
|
||||||
CHECK (json::parser(std::begin(v), std::end(v)).parse() == json(true));
|
CHECK(json::parser(std::begin(v), std::end(v)).parse() == json(true));
|
||||||
}
|
}
|
||||||
|
|
||||||
SECTION("from std::initializer_list")
|
SECTION("from std::initializer_list")
|
||||||
{
|
{
|
||||||
std::initializer_list<uint8_t> v = {'t', 'r', 'u', 'e', '\0'};
|
std::initializer_list<uint8_t> v = {'t', 'r', 'u', 'e', '\0'};
|
||||||
CHECK (json::parser(std::begin(v), std::end(v)).parse() == json(true));
|
CHECK(json::parser(std::begin(v), std::end(v)).parse() == json(true));
|
||||||
}
|
}
|
||||||
|
|
||||||
SECTION("from std::valarray")
|
SECTION("from std::valarray")
|
||||||
{
|
{
|
||||||
std::valarray<uint8_t> v = {'t', 'r', 'u', 'e', '\0'};
|
std::valarray<uint8_t> v = {'t', 'r', 'u', 'e', '\0'};
|
||||||
CHECK (json::parser(std::begin(v), std::end(v)).parse() == json(true));
|
CHECK(json::parser(std::begin(v), std::end(v)).parse() == json(true));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in a new issue