Test more strides
This commit is contained in:
@@ -9,6 +9,12 @@ std::pair<std::string, parser3::Status> runStreaming(std::string copy,
|
|||||||
SerializeState state;
|
SerializeState state;
|
||||||
auto c = serializeCallbacks();
|
auto c = serializeCallbacks();
|
||||||
parser3::Parser3 parser(&c, &state);
|
parser3::Parser3 parser(&c, &state);
|
||||||
|
if (stride == 0) {
|
||||||
|
auto s = parser.parse(copy.data(), copy.size());
|
||||||
|
if (s != parser3::S_AGAIN) {
|
||||||
|
return {state.result, s};
|
||||||
|
}
|
||||||
|
} else {
|
||||||
for (int i = 0; i < copy.size(); i += stride) {
|
for (int i = 0; i < copy.size(); i += stride) {
|
||||||
auto s =
|
auto s =
|
||||||
parser.parse(copy.data() + i, std::min<int>(stride, copy.size() - i));
|
parser.parse(copy.data() + i, std::min<int>(stride, copy.size() - i));
|
||||||
@@ -16,6 +22,7 @@ std::pair<std::string, parser3::Status> runStreaming(std::string copy,
|
|||||||
return {state.result, s};
|
return {state.result, s};
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
}
|
||||||
auto s = parser.parse(nullptr, 0);
|
auto s = parser.parse(nullptr, 0);
|
||||||
if (s != parser3::S_OK) {
|
if (s != parser3::S_OK) {
|
||||||
return {state.result, s};
|
return {state.result, s};
|
||||||
@@ -105,7 +112,7 @@ void testStringRoundTrip(std::string_view s) {
|
|||||||
}
|
}
|
||||||
for (int stride = 0; stride < 16; ++stride) {
|
for (int stride = 0; stride < 16; ++stride) {
|
||||||
auto escaped = "\"" + escapeAsJsonString(s) + "\"";
|
auto escaped = "\"" + escapeAsJsonString(s) + "\"";
|
||||||
auto parsed = toValue(std::move(escaped));
|
auto parsed = toValue(escaped, stride);
|
||||||
if (!parsed.has_value()) {
|
if (!parsed.has_value()) {
|
||||||
abort();
|
abort();
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -192,7 +192,7 @@ inline std::string toString(JsonValue const &jsonValue) {
|
|||||||
__builtin_unreachable();
|
__builtin_unreachable();
|
||||||
}
|
}
|
||||||
|
|
||||||
inline std::optional<JsonValue> toValue(std::string copy, int stride = 0) {
|
inline std::optional<JsonValue> toValue(std::string copy, int stride) {
|
||||||
ReadValueState state;
|
ReadValueState state;
|
||||||
auto c = readValueCallbacks();
|
auto c = readValueCallbacks();
|
||||||
parser3::Parser3 parser(&c, &state);
|
parser3::Parser3 parser(&c, &state);
|
||||||
@@ -202,7 +202,8 @@ inline std::optional<JsonValue> toValue(std::string copy, int stride = 0) {
|
|||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
for (int i = 0; i < copy.size(); i += stride) {
|
for (int i = 0; i < copy.size(); i += stride) {
|
||||||
if (parser.parse(copy.data(), std::min<int>(stride, copy.size() - i)) !=
|
if (parser.parse(copy.data() + i,
|
||||||
|
std::min<int>(stride, copy.size() - i)) !=
|
||||||
parser3::S_AGAIN) {
|
parser3::S_AGAIN) {
|
||||||
return std::nullopt;
|
return std::nullopt;
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user