Add comma separated value parsing as an option in iterate_many
`iterate_many` can now parse comma separated documents.

However, this mode will not support batched processing in chunks. This is because it is difficult to find the border between 2 documents efficiently when comma is used as the delimiter. Hence, the batch size is increased to be as large as the json passed in.

It is the user's responsibility to create a parser that has capacity large enough to handle the minimum batch size, failing which will return a capacity error. Because `allow_comma_separated` is a parameter after `batch_size` and defaulted to false, users enabling comma separated parsing will have to explicitly set the batch size and thus would be conscious to check that their parser's capacity is large enough to handle the batch size.

This closes #1999 
{"label": "simdjson:master", "ref": "master", "sha": "74bb7b2533af3f063d0794fe3962fb5226c27751"}
### Feature request

Currently, `iterate_many` is able to parse a json like `auto json = R"([1,2,3]  {"1":1,"2":3,"4":4} [1,2,3]  )"_padded;`

However, it would be nice to be able to parse a json with documents separated by commas `auto json = R"([1,2,3]  , {"1":1,"2":3,"4":4}  ,  [1,2,3]  )"_padded;`

### Possible implementation (only a small part)

I have looked into the code base a little, and I think we are able to perform the logic in the function `document_stream::next_document()` and consume any trailing commas after processing a particular document.

### Challenges

However, running `stage1` poses a problem. We are no longer able to quickly identify the position of the last JSON document in a given batch. This is because `find_next_document_index` identifies the boundary between 2 documents by searching for `][` `]{` `}[` `}{` patterns starting from the back of the batch. If we put a comma between these patterns, we can't distinguish whether they are comma separated documents or elements in an array.

Hence, I'm not sure if such a feature is possible to implement. I am willing to write the implementations if we agreeable with this feature and we have a solution to the `stage1` problem
Enhance iterate_many to enable parsing of comma separated documents
diff --git a/doc/iterate_many.md b/doc/iterate_many.md
index 60fb6e40e4..5830e9b24b 100644
--- a/doc/iterate_many.md
+++ b/doc/iterate_many.md
@@ -237,3 +237,8 @@ This will print:
 ```
 
 Importantly, you should only call `truncated_bytes()` after iterating through all of the documents since the stream cannot tell whether there are truncated documents at the very end when it may not have accessed that part of the data yet.
+
+Comma separated documents
+-----------
+
+`iterate_many` also takes in an option to allow parsing of comma separated documents. In this mode, the entire buffer is processed in 1 batch and batch size will be increased to be as large as the JSON passed. Therefore, the capacity of the parser has to be sufficient to support the batch size set.
diff --git a/include/simdjson/generic/ondemand/document_stream-inl.h b/include/simdjson/generic/ondemand/document_stream-inl.h
index 17f805c46a..7d55df64eb 100644
--- a/include/simdjson/generic/ondemand/document_stream-inl.h
+++ b/include/simdjson/generic/ondemand/document_stream-inl.h
@@ -84,12 +84,14 @@ simdjson_inline document_stream::document_stream(
   ondemand::parser &_parser,
   const uint8_t *_buf,
   size_t _len,
-  size_t _batch_size
+  size_t _batch_size,
+  bool _allow_comma_separated
 ) noexcept
   : parser{&_parser},
     buf{_buf},
     len{_len},
     batch_size{_batch_size <= MINIMAL_BATCH_SIZE ? MINIMAL_BATCH_SIZE : _batch_size},
+    allow_comma_separated{_allow_comma_separated},
     error{SUCCESS}
     #ifdef SIMDJSON_THREADS_ENABLED
     , use_thread(_parser.threaded) // we need to make a copy because _parser.threaded can change
@@ -107,6 +109,7 @@ simdjson_inline document_stream::document_stream() noexcept
     buf{nullptr},
     len{0},
     batch_size{0},
+    allow_comma_separated{false},
     error{UNINITIALIZED}
     #ifdef SIMDJSON_THREADS_ENABLED
     , use_thread(false)
@@ -290,6 +293,8 @@ inline void document_stream::next_document() noexcept {
   if (error) { return; }
   // Always set depth=1 at the start of document
   doc.iter._depth = 1;
+  // consume comma if comma separated is allowed
+  if (allow_comma_separated) { doc.iter.consume_character(','); }
   // Resets the string buffer at the beginning, thus invalidating the strings.
   doc.iter._string_buf_loc = parser->string_buf.get();
   doc.iter._root = doc.iter.position();
diff --git a/include/simdjson/generic/ondemand/document_stream.h b/include/simdjson/generic/ondemand/document_stream.h
index beb0644864..4a9136a1ed 100644
--- a/include/simdjson/generic/ondemand/document_stream.h
+++ b/include/simdjson/generic/ondemand/document_stream.h
@@ -222,7 +222,8 @@ class document_stream {
     ondemand::parser &parser,
     const uint8_t *buf,
     size_t len,
-    size_t batch_size
+    size_t batch_size,
+    bool allow_comma_separated
   ) noexcept;
 
   /**
@@ -271,6 +272,7 @@ class document_stream {
   const uint8_t *buf;
   size_t len;
   size_t batch_size;
+  bool allow_comma_separated;
   /**
    * We are going to use just one document instance. The document owns
    * the json_iterator. It implies that we only ever pass a reference
diff --git a/include/simdjson/generic/ondemand/json_iterator-inl.h b/include/simdjson/generic/ondemand/json_iterator-inl.h
index 5111ffffa4..b701f6fc1f 100644
--- a/include/simdjson/generic/ondemand/json_iterator-inl.h
+++ b/include/simdjson/generic/ondemand/json_iterator-inl.h
@@ -337,6 +337,14 @@ simdjson_inline void json_iterator::reenter_child(token_position position, depth
   _depth = child_depth;
 }
 
+simdjson_inline error_code json_iterator::consume_character(char c) noexcept {
+  if (*peek() == c) {
+    return_current_and_advance();
+    return SUCCESS;
+  }
+  return TAPE_ERROR;
+}
+
 #if SIMDJSON_DEVELOPMENT_CHECKS
 
 simdjson_inline token_position json_iterator::start_position(depth_t depth) const noexcept {
diff --git a/include/simdjson/generic/ondemand/json_iterator.h b/include/simdjson/generic/ondemand/json_iterator.h
index e5bfc80528..acd1a9d2ee 100644
--- a/include/simdjson/generic/ondemand/json_iterator.h
+++ b/include/simdjson/generic/ondemand/json_iterator.h
@@ -255,6 +255,7 @@ class json_iterator {
   simdjson_inline simdjson_result<std::string_view> unescape_wobbly(raw_json_string in) noexcept;
   simdjson_inline void reenter_child(token_position position, depth_t child_depth) noexcept;
 
+  simdjson_inline error_code consume_character(char c) noexcept;
 #if SIMDJSON_DEVELOPMENT_CHECKS
   simdjson_inline token_position start_position(depth_t depth) const noexcept;
   simdjson_inline void set_start_position(depth_t depth, token_position position) noexcept;
diff --git a/include/simdjson/generic/ondemand/parser-inl.h b/include/simdjson/generic/ondemand/parser-inl.h
index 9ed4540370..4148a202dc 100644
--- a/include/simdjson/generic/ondemand/parser-inl.h
+++ b/include/simdjson/generic/ondemand/parser-inl.h
@@ -84,18 +84,19 @@ simdjson_warn_unused simdjson_inline simdjson_result<json_iterator> parser::iter
   return json_iterator(reinterpret_cast<const uint8_t *>(json.data()), this);
 }
 
-inline simdjson_result<document_stream> parser::iterate_many(const uint8_t *buf, size_t len, size_t batch_size) noexcept {
+inline simdjson_result<document_stream> parser::iterate_many(const uint8_t *buf, size_t len, size_t batch_size, bool allow_comma_separated) noexcept {
   if(batch_size < MINIMAL_BATCH_SIZE) { batch_size = MINIMAL_BATCH_SIZE; }
-  return document_stream(*this, buf, len, batch_size);
+  if(allow_comma_separated && batch_size < len) { batch_size = len; }
+  return document_stream(*this, buf, len, batch_size, allow_comma_separated);
 }
-inline simdjson_result<document_stream> parser::iterate_many(const char *buf, size_t len, size_t batch_size) noexcept {
-  return iterate_many(reinterpret_cast<const uint8_t *>(buf), len, batch_size);
+inline simdjson_result<document_stream> parser::iterate_many(const char *buf, size_t len, size_t batch_size, bool allow_comma_separated) noexcept {
+  return iterate_many(reinterpret_cast<const uint8_t *>(buf), len, batch_size, allow_comma_separated);
 }
-inline simdjson_result<document_stream> parser::iterate_many(const std::string &s, size_t batch_size) noexcept {
-  return iterate_many(s.data(), s.length(), batch_size);
+inline simdjson_result<document_stream> parser::iterate_many(const std::string &s, size_t batch_size, bool allow_comma_separated) noexcept {
+  return iterate_many(s.data(), s.length(), batch_size, allow_comma_separated);
 }
-inline simdjson_result<document_stream> parser::iterate_many(const padded_string &s, size_t batch_size) noexcept {
-  return iterate_many(s.data(), s.length(), batch_size);
+inline simdjson_result<document_stream> parser::iterate_many(const padded_string &s, size_t batch_size, bool allow_comma_separated) noexcept {
+  return iterate_many(s.data(), s.length(), batch_size, allow_comma_separated);
 }
 
 simdjson_inline size_t parser::capacity() const noexcept {
diff --git a/include/simdjson/generic/ondemand/parser.h b/include/simdjson/generic/ondemand/parser.h
index a60080cc14..cf65246c8e 100644
--- a/include/simdjson/generic/ondemand/parser.h
+++ b/include/simdjson/generic/ondemand/parser.h
@@ -218,15 +218,15 @@ class parser {
    *         - other json errors if parsing fails. You should not rely on these errors to always the same for the
    *           same document: they may vary under runtime dispatch (so they may vary depending on your system and hardware).
    */
-  inline simdjson_result<document_stream> iterate_many(const uint8_t *buf, size_t len, size_t batch_size = DEFAULT_BATCH_SIZE) noexcept;
+  inline simdjson_result<document_stream> iterate_many(const uint8_t *buf, size_t len, size_t batch_size = DEFAULT_BATCH_SIZE, bool allow_comma_separated = false) noexcept;
   /** @overload parse_many(const uint8_t *buf, size_t len, size_t batch_size) */
-  inline simdjson_result<document_stream> iterate_many(const char *buf, size_t len, size_t batch_size = DEFAULT_BATCH_SIZE) noexcept;
+  inline simdjson_result<document_stream> iterate_many(const char *buf, size_t len, size_t batch_size = DEFAULT_BATCH_SIZE, bool allow_comma_separated = false) noexcept;
   /** @overload parse_many(const uint8_t *buf, size_t len, size_t batch_size) */
-  inline simdjson_result<document_stream> iterate_many(const std::string &s, size_t batch_size = DEFAULT_BATCH_SIZE) noexcept;
-  inline simdjson_result<document_stream> iterate_many(const std::string &&s, size_t batch_size) = delete;// unsafe
+  inline simdjson_result<document_stream> iterate_many(const std::string &s, size_t batch_size = DEFAULT_BATCH_SIZE, bool allow_comma_separated = false) noexcept;
+  inline simdjson_result<document_stream> iterate_many(const std::string &&s, size_t batch_size, bool allow_comma_separated = false) = delete;// unsafe
   /** @overload parse_many(const uint8_t *buf, size_t len, size_t batch_size) */
-  inline simdjson_result<document_stream> iterate_many(const padded_string &s, size_t batch_size = DEFAULT_BATCH_SIZE) noexcept;
-  inline simdjson_result<document_stream> iterate_many(const padded_string &&s, size_t batch_size) = delete;// unsafe
+  inline simdjson_result<document_stream> iterate_many(const padded_string &s, size_t batch_size = DEFAULT_BATCH_SIZE, bool allow_comma_separated = false) noexcept;
+  inline simdjson_result<document_stream> iterate_many(const padded_string &&s, size_t batch_size, bool allow_comma_separated = false) = delete;// unsafe
 
   /** @private We do not want to allow implicit conversion from C string to std::string. */
   simdjson_result<document_stream> iterate_many(const char *buf, size_t batch_size = DEFAULT_BATCH_SIZE) noexcept = delete;

diff --git a/tests/ondemand/CMakeLists.txt b/tests/ondemand/CMakeLists.txt
index 251c7977e1..4db6051e38 100644
--- a/tests/ondemand/CMakeLists.txt
+++ b/tests/ondemand/CMakeLists.txt
@@ -25,6 +25,7 @@ add_cpp_test(ondemand_readme_examples        LABELS ondemand acceptance per_impl
 add_cpp_test(ondemand_scalar_tests           LABELS ondemand acceptance per_implementation)
 add_cpp_test(ondemand_twitter_tests          LABELS ondemand acceptance per_implementation)
 add_cpp_test(ondemand_wrong_type_error_tests LABELS ondemand acceptance per_implementation)
+add_cpp_test(ondemand_iterate_many_csv       LABELS ondemand acceptance per_implementation)
 
 if(HAVE_POSIX_FORK AND HAVE_POSIX_WAIT) # assert tests use fork and wait, which aren't on MSVC
   add_cpp_test(ondemand_assert_out_of_order_values LABELS assert per_implementation explicitonly ondemand)
diff --git a/tests/ondemand/ondemand_iterate_many_csv.cpp b/tests/ondemand/ondemand_iterate_many_csv.cpp
new file mode 100644
index 0000000000..7a25594a83
--- /dev/null
+++ b/tests/ondemand/ondemand_iterate_many_csv.cpp
@@ -0,0 +1,160 @@
+#include "simdjson.h"
+#include "test_ondemand.h"
+
+#include <cstdint>
+
+using namespace simdjson;
+
+namespace iterate_many_csv_tests {
+using namespace std;
+
+bool normal() {
+  TEST_START();
+  auto json = R"( 1, 2, 3, 4, "a", "b", "c", {"hello": "world"} , [1, 2, 3])"_padded;
+  ondemand::parser parser;
+  ondemand::document_stream doc_stream;
+  ASSERT_SUCCESS(parser.iterate_many(json, json.size(), true).get(doc_stream));
+
+  for (auto doc : doc_stream)
+  {
+    ASSERT_SUCCESS(doc);
+  }
+
+  TEST_SUCCEED();
+}
+
+bool small_batch_size() {
+  TEST_START();
+  auto json = R"( 1, 2, 3, 4, "a", "b", "c", {"hello": "world"} , [1, 2, 3])"_padded;
+  ondemand::parser parser;
+  ondemand::document_stream doc_stream;
+  ASSERT_SUCCESS(parser.iterate_many(json, 32, true).get(doc_stream));
+
+  for (auto doc : doc_stream)
+  {
+    ASSERT_SUCCESS(doc);
+  }
+
+  TEST_SUCCEED();
+}
+
+bool trailing_comma() {
+  TEST_START();
+  auto json = R"(1,)"_padded;
+  ondemand::parser parser;
+  ondemand::document_stream doc_stream;
+  ASSERT_SUCCESS(parser.iterate_many(json, json.size(), true).get(doc_stream));
+
+  for (auto doc : doc_stream)
+  {
+    ASSERT_SUCCESS(doc);
+  }
+
+  TEST_SUCCEED();
+}
+
+bool check_parsed_values() {
+  TEST_START();
+
+  auto json = R"(  1  , "a" , [100, 1]  , {"hello"  :    "world"}  , )"_padded;
+  ondemand::parser parser;
+  ondemand::document_stream doc_stream;
+  ASSERT_SUCCESS(parser.iterate_many(json, json.size(), true).get(doc_stream));
+
+  auto begin = doc_stream.begin();
+  auto end = doc_stream.end();
+  int cnt = 0;
+  auto it = begin;
+  for (; it != end && cnt < 4; ++it, ++cnt) {
+    auto doc = *it;
+    switch (cnt)
+    {
+    case 0:
+    {
+      int64_t actual;
+      ASSERT_SUCCESS(doc.get_int64().get(actual));
+      ASSERT_EQUAL(actual, 1);
+      break;
+    }
+    case 1:
+    {
+      std::string_view sv;
+      ASSERT_SUCCESS(doc.get_string().get(sv));
+      ASSERT_EQUAL(sv, "a");
+      break;
+    }
+    case 2:
+    {
+      std::vector<int64_t> expected{100, 1};
+      ondemand::array arr;
+      ASSERT_SUCCESS(doc.get_array().get(arr));
+      size_t element_count;
+      ASSERT_SUCCESS(arr.count_elements().get(element_count));
+      ASSERT_EQUAL(element_count, 2);
+      int i = 0;
+      for (auto a : arr)
+      {
+        int64_t actual;
+        ASSERT_SUCCESS(a.get(actual));
+        ASSERT_EQUAL(actual, expected[i++]);
+      }
+      break;
+    }
+    case 3:
+    {
+      ondemand::object obj;
+      ASSERT_SUCCESS(doc.get_object().get(obj));
+      std::string_view sv;
+      obj.find_field("hello").get(sv);
+      ASSERT_EQUAL(sv, "world");
+      break;
+    }
+    default:
+      TEST_FAIL("Too many cases")
+    }
+  }
+
+  ASSERT_EQUAL(cnt, 4);
+  ASSERT_TRUE(!(it != end));
+
+  TEST_SUCCEED();
+}
+
+#if SIMDJSON_EXCEPTIONS
+
+bool leading_comma() {
+  TEST_START();
+  auto json = R"(,1)"_padded;
+  ondemand::parser parser;
+  ondemand::document_stream doc_stream;
+  ASSERT_SUCCESS(parser.iterate_many(json, json.size(), true).get(doc_stream));
+
+  try {
+    auto begin = doc_stream.begin();
+    auto end = doc_stream.end();
+    for (auto it = begin; it != end; ++it) {}
+  } catch (simdjson_error& e) {
+    ASSERT_ERROR(e.error(), TAPE_ERROR);
+  }
+
+  TEST_SUCCEED();
+}
+
+#endif
+
+bool run() {
+  return normal() &&
+         small_batch_size() &&
+         trailing_comma() &&
+         check_parsed_values() &&
+#if SIMDJSON_EXCEPTIONS
+         leading_comma() &&
+#endif
+         true;
+}
+
+}
+
+int main(int argc, char *argv[]) {
+  return test_main(argc, argv, iterate_many_csv_tests::run);
+}

{"readme_examples11": {"run": "PASS", "test": "NONE", "fix": "PASS"}, "iterate_temporary_buffer_should_not_compile": {"run": "PASS", "test": "NONE", "fix": "PASS"}, "ondemand_array_tests": {"run": "PASS", "test": "NONE", "fix": "PASS"}, "quickstart_ondemand": {"run": "PASS", "test": "NONE", "fix": "PASS"}, "ondemand_scalar_tests": {"run": "PASS", "test": "NONE", "fix": "PASS"}, "unicode_tests": {"run": "PASS", "test": "NONE", "fix": "PASS"}, "readme_examples_will_fail_with_exceptions_off": {"run": "PASS", "test": "NONE", "fix": "PASS"}, "ondemand_twitter_tests": {"run": "PASS", "test": "NONE", "fix": "PASS"}, "document_stream_tests": {"run": "PASS", "test": "NONE", "fix": "PASS"}, "ondemand_error_location_tests": {"run": "PASS", "test": "NONE", "fix": "PASS"}, "random_string_number_tests": {"run": "PASS", "test": "NONE", "fix": "PASS"}, "dangling_parser_parse_uint8_should_not_compile": {"run": "PASS", "test": "NONE", "fix": "PASS"}, "readme_examples": {"run": "PASS", "test": "NONE", "fix": "PASS"}, "dangling_parser_load_should_not_compile": {"run": "PASS", "test": "NONE", "fix": "PASS"}, "quickstart_ondemand11": {"run": "PASS", "test": "NONE", "fix": "PASS"}, "iterate_string_view_should_not_compile": {"run": "PASS", "test": "NONE", "fix": "PASS"}, "ondemand_wrong_type_error_tests": {"run": "PASS", "test": "NONE", "fix": "PASS"}, "ondemand_misc_tests": {"run": "PASS", "test": "NONE", "fix": "PASS"}, "ondemand_ordering_tests": {"run": "PASS", "test": "NONE", "fix": "PASS"}, "iterate_char_star_should_not_compile": {"run": "PASS", "test": "NONE", "fix": "PASS"}, "minefieldcheck": {"run": "PASS", "test": "NONE", "fix": "PASS"}, "stringparsingcheck": {"run": "PASS", "test": "NONE", "fix": "PASS"}, "basictests": {"run": "PASS", "test": "NONE", "fix": "PASS"}, "first_second_access_should_not_compile": {"run": "PASS", "test": "NONE", "fix": "PASS"}, "ondemand_number_tests": {"run": "PASS", "test": "NONE", "fix": "PASS"}, "dangling_parser_parse_padstring_should_compile": {"run": "PASS", "test": "NONE", "fix": "PASS"}, "ondemand_array_error_tests": {"run": "PASS", "test": "NONE", "fix": "PASS"}, "quickstart2_noexceptions": {"run": "PASS", "test": "NONE", "fix": "PASS"}, "ondemand_document_stream_tests": {"run": "PASS", "test": "NONE", "fix": "PASS"}, "quickstart_ondemand14": {"run": "PASS", "test": "NONE", "fix": "PASS"}, "ondemand_readme_examples": {"run": "PASS", "test": "NONE", "fix": "PASS"}, "quickstart2_noexceptions11": {"run": "PASS", "test": "NONE", "fix": "PASS"}, "errortests": {"run": "PASS", "test": "NONE", "fix": "PASS"}, "quickstart14": {"run": "PASS", "test": "NONE", "fix": "PASS"}, "avoid_cerr": {"run": "PASS", "test": "NONE", "fix": "PASS"}, "ondemand_log_tests": {"run": "PASS", "test": "NONE", "fix": "PASS"}, "dangling_parser_parse_uchar_should_compile": {"run": "PASS", "test": "NONE", "fix": "PASS"}, "trivially_copyable_test": {"run": "PASS", "test": "NONE", "fix": "PASS"}, "avoid_printf": {"run": "PASS", "test": "NONE", "fix": "PASS"}, "ondemand_parse_api_tests": {"run": "PASS", "test": "NONE", "fix": "PASS"}, "iterate_char_star_should_compile": {"run": "PASS", "test": "NONE", "fix": "PASS"}, "readme_examples_noexceptions": {"run": "PASS", "test": "NONE", "fix": "PASS"}, "ondemand_json_pointer_tests": {"run": "PASS", "test": "NONE", "fix": "PASS"}, "simdjson_force_implementation_error": {"run": "PASS", "test": "NONE", "fix": "PASS"}, "parse_many_test": {"run": "PASS", "test": "NONE", "fix": "PASS"}, "dangling_parser_parse_uint8_should_compile": {"run": "PASS", "test": "NONE", "fix": "PASS"}, "checkimplementation": {"run": "PASS", "test": "NONE", "fix": "PASS"}, "quickstart_noexceptions11": {"run": "PASS", "test": "NONE", "fix": "PASS"}, "ondemand_compilation_tests": {"run": "PASS", "test": "NONE", "fix": "PASS"}, "avoid_stdout": {"run": "PASS", "test": "NONE", "fix": "PASS"}, "first_second_access_should_compile": {"run": "PASS", "test": "NONE", "fix": "PASS"}, "unsafe_parse_many_should_compile": {"run": "PASS", "test": "NONE", "fix": "PASS"}, "avoid_cout": {"run": "PASS", "test": "NONE", "fix": "PASS"}, "ondemand_active_tests": {"run": "PASS", "test": "NONE", "fix": "PASS"}, "example_compiletest_should_compile": {"run": "PASS", "test": "NONE", "fix": "PASS"}, "dangling_parser_parse_uchar_should_not_compile": {"run": "PASS", "test": "NONE", "fix": "PASS"}, "ondemand_log_error_tests": {"run": "PASS", "test": "NONE", "fix": "PASS"}, "jsoncheck": {"run": "PASS", "test": "NONE", "fix": "PASS"}, "avoid_stderr": {"run": "PASS", "test": "NONE", "fix": "PASS"}, "extracting_values_example": {"run": "PASS", "test": "NONE", "fix": "PASS"}, "simdjson-singleheader": {"run": "PASS", "test": "NONE", "fix": "PASS"}, "ondemand_error_tests": {"run": "PASS", "test": "NONE", "fix": "PASS"}, "dangling_parser_parse_stdstring_should_not_compile": {"run": "PASS", "test": "NONE", "fix": "PASS"}, "pointercheck": {"run": "PASS", "test": "NONE", "fix": "PASS"}, "ondemand_object_tests": {"run": "PASS", "test": "NONE", "fix": "PASS"}, "integer_tests": {"run": "PASS", "test": "NONE", "fix": "PASS"}, "minify_tests": {"run": "PASS", "test": "NONE", "fix": "PASS"}, "quickstart_ondemand_noexceptions": {"run": "PASS", "test": "NONE", "fix": "PASS"}, "ondemand_iterate_many_csv": {"run": "NONE", "test": "NONE", "fix": "PASS"}, "quickstart11": {"run": "PASS", "test": "NONE", "fix": "PASS"}, "quickstart": {"run": "PASS", "test": "NONE", "fix": "PASS"}, "testjson2json": {"run": "PASS", "test": "NONE", "fix": "PASS"}, "document_tests": {"run": "PASS", "test": "NONE", "fix": "PASS"}, "example_compiletest_should_not_compile": {"run": "PASS", "test": "NONE", "fix": "PASS"}, "padded_string_tests": {"run": "PASS", "test": "NONE", "fix": "PASS"}, "json2json": {"run": "PASS", "test": "NONE", "fix": "PASS"}, "ondemand_assert_out_of_order_values": {"run": "PASS", "test": "NONE", "fix": "PASS"}, "ondemand_key_string_tests": {"run": "PASS", "test": "NONE", "fix": "PASS"}, "bad_array_count_should_compile": {"run": "PASS", "test": "NONE", "fix": "PASS"}, "avoid_abort": {"run": "PASS", "test": "NONE", "fix": "PASS"}, "ondemand_number_in_string_tests": {"run": "PASS", "test": "NONE", "fix": "PASS"}, "quickstart_ondemand_noexceptions11": {"run": "PASS", "test": "NONE", "fix": "PASS"}, "dangling_parser_load_should_compile": {"run": "PASS", "test": "NONE", "fix": "PASS"}, "numberparsingcheck": {"run": "PASS", "test": "NONE", "fix": "PASS"}, "readme_examples_noexceptions11": {"run": "PASS", "test": "NONE", "fix": "PASS"}, "quickstart_noexceptions": {"run": "PASS", "test": "NONE", "fix": "PASS"}, "amalgamate_demo_direct_from_repository": {"run": "PASS", "test": "NONE", "fix": "PASS"}, "ondemand_tostring_tests": {"run": "PASS", "test": "NONE", "fix": "PASS"}, "unsafe_parse_many_should_not_compile": {"run": "PASS", "test": "NONE", "fix": "PASS"}, "dangling_parser_parse_stdstring_should_compile": {"run": "PASS", "test": "NONE", "fix": "PASS"}, "iterate_string_view_should_compile": {"run": "PASS", "test": "NONE", "fix": "PASS"}, "iterate_temporary_buffer_should_compile": {"run": "PASS", "test": "NONE", "fix": "PASS"}, "amalgamate_demo": {"run": "PASS", "test": "NONE", "fix": "PASS"}, "dangling_parser_parse_padstring_should_not_compile": {"run": "PASS", "test": "NONE", "fix": "PASS"}, "bad_array_count_should_not_compile": {"run": "PASS", "test": "NONE", "fix": "PASS"}, "ondemand_object_error_tests": {"run": "PASS", "test": "NONE", "fix": "PASS"}}
{"readme_examples11": {"run": "PASS", "test": "NONE", "fix": "PASS"}, "iterate_temporary_buffer_should_not_compile": {"run": "PASS", "test": "NONE", "fix": "PASS"}, "ondemand_array_tests": {"run": "PASS", "test": "NONE", "fix": "PASS"}, "quickstart_ondemand": {"run": "PASS", "test": "NONE", "fix": "PASS"}, "ondemand_scalar_tests": {"run": "PASS", "test": "NONE", "fix": "PASS"}, "unicode_tests": {"run": "PASS", "test": "NONE", "fix": "PASS"}, "readme_examples_will_fail_with_exceptions_off": {"run": "PASS", "test": "NONE", "fix": "PASS"}, "ondemand_twitter_tests": {"run": "PASS", "test": "NONE", "fix": "PASS"}, "document_stream_tests": {"run": "PASS", "test": "NONE", "fix": "PASS"}, "ondemand_error_location_tests": {"run": "PASS", "test": "NONE", "fix": "PASS"}, "random_string_number_tests": {"run": "PASS", "test": "NONE", "fix": "PASS"}, "dangling_parser_parse_uint8_should_not_compile": {"run": "PASS", "test": "NONE", "fix": "PASS"}, "readme_examples": {"run": "PASS", "test": "NONE", "fix": "PASS"}, "dangling_parser_load_should_not_compile": {"run": "PASS", "test": "NONE", "fix": "PASS"}, "quickstart_ondemand11": {"run": "PASS", "test": "NONE", "fix": "PASS"}, "iterate_string_view_should_not_compile": {"run": "PASS", "test": "NONE", "fix": "PASS"}, "ondemand_wrong_type_error_tests": {"run": "PASS", "test": "NONE", "fix": "PASS"}, "ondemand_misc_tests": {"run": "PASS", "test": "NONE", "fix": "PASS"}, "ondemand_ordering_tests": {"run": "PASS", "test": "NONE", "fix": "PASS"}, "iterate_char_star_should_not_compile": {"run": "PASS", "test": "NONE", "fix": "PASS"}, "minefieldcheck": {"run": "PASS", "test": "NONE", "fix": "PASS"}, "stringparsingcheck": {"run": "PASS", "test": "NONE", "fix": "PASS"}, "basictests": {"run": "PASS", "test": "NONE", "fix": "PASS"}, "first_second_access_should_not_compile": {"run": "PASS", "test": "NONE", "fix": "PASS"}, "ondemand_number_tests": {"run": "PASS", "test": "NONE", "fix": "PASS"}, "dangling_parser_parse_padstring_should_compile": {"run": "PASS", "test": "NONE", "fix": "PASS"}, "ondemand_array_error_tests": {"run": "PASS", "test": "NONE", "fix": "PASS"}, "quickstart2_noexceptions": {"run": "PASS", "test": "NONE", "fix": "PASS"}, "ondemand_document_stream_tests": {"run": "PASS", "test": "NONE", "fix": "PASS"}, "quickstart_ondemand14": {"run": "PASS", "test": "NONE", "fix": "PASS"}, "ondemand_readme_examples": {"run": "PASS", "test": "NONE", "fix": "PASS"}, "quickstart2_noexceptions11": {"run": "PASS", "test": "NONE", "fix": "PASS"}, "errortests": {"run": "PASS", "test": "NONE", "fix": "PASS"}, "quickstart14": {"run": "PASS", "test": "NONE", "fix": "PASS"}, "avoid_cerr": {"run": "PASS", "test": "NONE", "fix": "PASS"}, "ondemand_log_tests": {"run": "PASS", "test": "NONE", "fix": "PASS"}, "dangling_parser_parse_uchar_should_compile": {"run": "PASS", "test": "NONE", "fix": "PASS"}, "trivially_copyable_test": {"run": "PASS", "test": "NONE", "fix": "PASS"}, "avoid_printf": {"run": "PASS", "test": "NONE", "fix": "PASS"}, "ondemand_parse_api_tests": {"run": "PASS", "test": "NONE", "fix": "PASS"}, "iterate_char_star_should_compile": {"run": "PASS", "test": "NONE", "fix": "PASS"}, "readme_examples_noexceptions": {"run": "PASS", "test": "NONE", "fix": "PASS"}, "ondemand_json_pointer_tests": {"run": "PASS", "test": "NONE", "fix": "PASS"}, "simdjson_force_implementation_error": {"run": "PASS", "test": "NONE", "fix": "PASS"}, "parse_many_test": {"run": "PASS", "test": "NONE", "fix": "PASS"}, "dangling_parser_parse_uint8_should_compile": {"run": "PASS", "test": "NONE", "fix": "PASS"}, "checkimplementation": {"run": "PASS", "test": "NONE", "fix": "PASS"}, "quickstart_noexceptions11": {"run": "PASS", "test": "NONE", "fix": "PASS"}, "ondemand_compilation_tests": {"run": "PASS", "test": "NONE", "fix": "PASS"}, "avoid_stdout": {"run": "PASS", "test": "NONE", "fix": "PASS"}, "first_second_access_should_compile": {"run": "PASS", "test": "NONE", "fix": "PASS"}, "unsafe_parse_many_should_compile": {"run": "PASS", "test": "NONE", "fix": "PASS"}, "avoid_cout": {"run": "PASS", "test": "NONE", "fix": "PASS"}, "ondemand_active_tests": {"run": "PASS", "test": "NONE", "fix": "PASS"}, "example_compiletest_should_compile": {"run": "PASS", "test": "NONE", "fix": "PASS"}, "dangling_parser_parse_uchar_should_not_compile": {"run": "PASS", "test": "NONE", "fix": "PASS"}, "ondemand_log_error_tests": {"run": "PASS", "test": "NONE", "fix": "PASS"}, "jsoncheck": {"run": "PASS", "test": "NONE", "fix": "PASS"}, "avoid_stderr": {"run": "PASS", "test": "NONE", "fix": "PASS"}, "extracting_values_example": {"run": "PASS", "test": "NONE", "fix": "PASS"}, "simdjson-singleheader": {"run": "PASS", "test": "NONE", "fix": "PASS"}, "ondemand_error_tests": {"run": "PASS", "test": "NONE", "fix": "PASS"}, "dangling_parser_parse_stdstring_should_not_compile": {"run": "PASS", "test": "NONE", "fix": "PASS"}, "pointercheck": {"run": "PASS", "test": "NONE", "fix": "PASS"}, "ondemand_object_tests": {"run": "PASS", "test": "NONE", "fix": "PASS"}, "integer_tests": {"run": "PASS", "test": "NONE", "fix": "PASS"}, "minify_tests": {"run": "PASS", "test": "NONE", "fix": "PASS"}, "quickstart_ondemand_noexceptions": {"run": "PASS", "test": "NONE", "fix": "PASS"}, "ondemand_iterate_many_csv": {"run": "NONE", "test": "NONE", "fix": "PASS"}, "quickstart11": {"run": "PASS", "test": "NONE", "fix": "PASS"}, "quickstart": {"run": "PASS", "test": "NONE", "fix": "PASS"}, "testjson2json": {"run": "PASS", "test": "NONE", "fix": "PASS"}, "document_tests": {"run": "PASS", "test": "NONE", "fix": "PASS"}, "example_compiletest_should_not_compile": {"run": "PASS", "test": "NONE", "fix": "PASS"}, "padded_string_tests": {"run": "PASS", "test": "NONE", "fix": "PASS"}, "json2json": {"run": "PASS", "test": "NONE", "fix": "PASS"}, "ondemand_assert_out_of_order_values": {"run": "PASS", "test": "NONE", "fix": "PASS"}, "ondemand_key_string_tests": {"run": "PASS", "test": "NONE", "fix": "PASS"}, "bad_array_count_should_compile": {"run": "PASS", "test": "NONE", "fix": "PASS"}, "avoid_abort": {"run": "PASS", "test": "NONE", "fix": "PASS"}, "ondemand_number_in_string_tests": {"run": "PASS", "test": "NONE", "fix": "PASS"}, "quickstart_ondemand_noexceptions11": {"run": "PASS", "test": "NONE", "fix": "PASS"}, "dangling_parser_load_should_compile": {"run": "PASS", "test": "NONE", "fix": "PASS"}, "numberparsingcheck": {"run": "PASS", "test": "NONE", "fix": "PASS"}, "readme_examples_noexceptions11": {"run": "PASS", "test": "NONE", "fix": "PASS"}, "quickstart_noexceptions": {"run": "PASS", "test": "NONE", "fix": "PASS"}, "amalgamate_demo_direct_from_repository": {"run": "PASS", "test": "NONE", "fix": "PASS"}, "ondemand_tostring_tests": {"run": "PASS", "test": "NONE", "fix": "PASS"}, "unsafe_parse_many_should_not_compile": {"run": "PASS", "test": "NONE", "fix": "PASS"}, "dangling_parser_parse_stdstring_should_compile": {"run": "PASS", "test": "NONE", "fix": "PASS"}, "iterate_string_view_should_compile": {"run": "PASS", "test": "NONE", "fix": "PASS"}, "iterate_temporary_buffer_should_compile": {"run": "PASS", "test": "NONE", "fix": "PASS"}, "amalgamate_demo": {"run": "PASS", "test": "NONE", "fix": "PASS"}, "dangling_parser_parse_padstring_should_not_compile": {"run": "PASS", "test": "NONE", "fix": "PASS"}, "bad_array_count_should_not_compile": {"run": "PASS", "test": "NONE", "fix": "PASS"}, "ondemand_object_error_tests": {"run": "PASS", "test": "NONE", "fix": "PASS"}}
{"passed_count": 95, "failed_count": 0, "skipped_count": 0, "passed_tests": ["ondemand_array_tests", "unicode_tests", "readme_examples_will_fail_with_exceptions_off", "ondemand_twitter_tests", "document_stream_tests", "random_string_number_tests", "dangling_parser_parse_uint8_should_not_compile", "quickstart_ondemand11", "iterate_string_view_should_not_compile", "ondemand_misc_tests", "minefieldcheck", "ondemand_number_tests", "dangling_parser_parse_padstring_should_compile", "ondemand_array_error_tests", "quickstart_ondemand14", "ondemand_readme_examples", "quickstart14", "ondemand_log_tests", "dangling_parser_parse_uchar_should_compile", "iterate_char_star_should_compile", "readme_examples_noexceptions", "ondemand_json_pointer_tests", "dangling_parser_parse_uint8_should_compile", "checkimplementation", "quickstart_noexceptions11", "ondemand_compilation_tests", "avoid_stdout", "first_second_access_should_compile", "unsafe_parse_many_should_compile", "avoid_cout", "ondemand_active_tests", "example_compiletest_should_compile", "dangling_parser_parse_uchar_should_not_compile", "jsoncheck", "ondemand_error_tests", "pointercheck", "ondemand_object_tests", "quickstart_ondemand_noexceptions", "quickstart11", "quickstart", "testjson2json", "bad_array_count_should_compile", "readme_examples_noexceptions11", "ondemand_tostring_tests", "unsafe_parse_many_should_not_compile", "dangling_parser_parse_stdstring_should_compile", "iterate_string_view_should_compile", "amalgamate_demo", "dangling_parser_parse_padstring_should_not_compile", "ondemand_object_error_tests", "readme_examples11", "iterate_temporary_buffer_should_not_compile", "quickstart_ondemand", "ondemand_scalar_tests", "ondemand_error_location_tests", "readme_examples", "dangling_parser_load_should_not_compile", "ondemand_wrong_type_error_tests", "ondemand_ordering_tests", "iterate_char_star_should_not_compile", "stringparsingcheck", "basictests", "first_second_access_should_not_compile", "quickstart2_noexceptions", "ondemand_document_stream_tests", "quickstart2_noexceptions11", "errortests", "avoid_cerr", "trivially_copyable_test", "avoid_printf", "ondemand_parse_api_tests", "simdjson_force_implementation_error", "parse_many_test", "ondemand_log_error_tests", "avoid_stderr", "extracting_values_example", "simdjson-singleheader", "dangling_parser_parse_stdstring_should_not_compile", "integer_tests", "minify_tests", "document_tests", "example_compiletest_should_not_compile", "padded_string_tests", "json2json", "ondemand_assert_out_of_order_values", "ondemand_key_string_tests", "avoid_abort", "ondemand_number_in_string_tests", "quickstart_ondemand_noexceptions11", "dangling_parser_load_should_compile", "numberparsingcheck", "quickstart_noexceptions", "amalgamate_demo_direct_from_repository", "iterate_temporary_buffer_should_compile", "bad_array_count_should_not_compile"], "failed_tests": [], "skipped_tests": []}
{"passed_count": 0, "failed_count": 0, "skipped_count": 0, "passed_tests": [], "failed_tests": [], "skipped_tests": []}
{"passed_count": 96, "failed_count": 0, "skipped_count": 0, "passed_tests": ["ondemand_array_tests", "unicode_tests", "readme_examples_will_fail_with_exceptions_off", "ondemand_twitter_tests", "document_stream_tests", "random_string_number_tests", "dangling_parser_parse_uint8_should_not_compile", "quickstart_ondemand11", "iterate_string_view_should_not_compile", "ondemand_misc_tests", "minefieldcheck", "ondemand_number_tests", "dangling_parser_parse_padstring_should_compile", "ondemand_array_error_tests", "quickstart_ondemand14", "ondemand_readme_examples", "quickstart14", "ondemand_log_tests", "dangling_parser_parse_uchar_should_compile", "iterate_char_star_should_compile", "readme_examples_noexceptions", "ondemand_json_pointer_tests", "dangling_parser_parse_uint8_should_compile", "checkimplementation", "quickstart_noexceptions11", "ondemand_compilation_tests", "avoid_stdout", "first_second_access_should_compile", "unsafe_parse_many_should_compile", "avoid_cout", "ondemand_active_tests", "example_compiletest_should_compile", "dangling_parser_parse_uchar_should_not_compile", "jsoncheck", "ondemand_error_tests", "pointercheck", "ondemand_object_tests", "quickstart_ondemand_noexceptions", "ondemand_iterate_many_csv", "quickstart11", "quickstart", "testjson2json", "bad_array_count_should_compile", "readme_examples_noexceptions11", "ondemand_tostring_tests", "unsafe_parse_many_should_not_compile", "dangling_parser_parse_stdstring_should_compile", "iterate_string_view_should_compile", "amalgamate_demo", "dangling_parser_parse_padstring_should_not_compile", "ondemand_object_error_tests", "readme_examples11", "iterate_temporary_buffer_should_not_compile", "quickstart_ondemand", "ondemand_scalar_tests", "ondemand_error_location_tests", "readme_examples", "dangling_parser_load_should_not_compile", "ondemand_wrong_type_error_tests", "ondemand_ordering_tests", "iterate_char_star_should_not_compile", "stringparsingcheck", "basictests", "first_second_access_should_not_compile", "quickstart2_noexceptions", "ondemand_document_stream_tests", "quickstart2_noexceptions11", "errortests", "avoid_cerr", "trivially_copyable_test", "avoid_printf", "ondemand_parse_api_tests", "simdjson_force_implementation_error", "parse_many_test", "ondemand_log_error_tests", "avoid_stderr", "extracting_values_example", "simdjson-singleheader", "dangling_parser_parse_stdstring_should_not_compile", "integer_tests", "minify_tests", "document_tests", "example_compiletest_should_not_compile", "padded_string_tests", "json2json", "ondemand_assert_out_of_order_values", "ondemand_key_string_tests", "avoid_abort", "ondemand_number_in_string_tests", "quickstart_ondemand_noexceptions11", "dangling_parser_load_should_compile", "numberparsingcheck", "quickstart_noexceptions", "amalgamate_demo_direct_from_repository", "iterate_temporary_buffer_should_compile", "bad_array_count_should_not_compile"], "failed_tests": [], "skipped_tests": []}