Test more strides

This commit is contained in:
2025-05-21 16:19:58 -04:00
parent 611d1a07de
commit 0b68fd1d41
2 changed files with 14 additions and 6 deletions

View File

@@ -9,12 +9,19 @@ std::pair<std::string, parser3::Status> runStreaming(std::string copy,
SerializeState state;
auto c = serializeCallbacks();
parser3::Parser3 parser(&c, &state);
for (int i = 0; i < copy.size(); i += stride) {
auto s =
parser.parse(copy.data() + i, std::min<int>(stride, copy.size() - i));
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) {
auto s =
parser.parse(copy.data() + i, std::min<int>(stride, copy.size() - i));
if (s != parser3::S_AGAIN) {
return {state.result, s};
}
}
}
auto s = parser.parse(nullptr, 0);
if (s != parser3::S_OK) {
@@ -105,7 +112,7 @@ void testStringRoundTrip(std::string_view s) {
}
for (int stride = 0; stride < 16; ++stride) {
auto escaped = "\"" + escapeAsJsonString(s) + "\"";
auto parsed = toValue(std::move(escaped));
auto parsed = toValue(escaped, stride);
if (!parsed.has_value()) {
abort();
}

View File

@@ -192,7 +192,7 @@ inline std::string toString(JsonValue const &jsonValue) {
__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;
auto c = readValueCallbacks();
parser3::Parser3 parser(&c, &state);
@@ -202,7 +202,8 @@ inline std::optional<JsonValue> toValue(std::string copy, int stride = 0) {
}
} else {
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) {
return std::nullopt;
}