fix: Reject surrogate pairs with invalid low surrogate
Closes #1894

Reject low surrogates outside of the range U+DC00—U+DFFF

Related to https://unicodebook.readthedocs.io/unicode_encodings.html#utf-16-surrogate-pairs

A surrogate pair should consist of a high surrogate and low surrogate. They're used to represent 0x010000-0x10FFFF in the JSON spec because the JavaScript specification originally only supported `\uXXXX`.

Previously, simdjson would accept some combinations of valid high surrogates and invalid low surrogates due to a bug in the check. (e.g. `\uD888\u1234` was accepted)

U+D800—U+DBFF (1,024 code points): high surrogates
U+DC00—U+DFFF (1,024 code points): low surrogates

{"label": "simdjson:master", "ref": "master", "sha": "d4ac1b51d0aeb2d4f792136fe7792de709006afa"}
**Describe the bug**
simdjon's dom parser (and other parsers) will accept the string `"\uD888\u1234"`, despite `"\u1234"` not being a low surrogate (for surrogate pairs) in the range `U+DC00—U+DFFF`

This was an example found in the json minefield test suite also mentioned elsewhere in the simdjson issue tracker for surrogate pair bug fixes https://github.com/TkTech/pysimdjson/blob/master/jsonexamples/test_parsing/i_string_1st_valid_surrogate_2nd_invalid.json
https://seriot.ch/projects/parsing_json.html (i_ is implementation-defined)

Related to issue https://github.com/simdjson/simdjson/issues/1870

Related to https://unicodebook.readthedocs.io/unicode_encodings.html#utf-16-surrogate-pairs 

```
U+D800—U+DBFF (1,024 code points): high surrogates
U+DC00—U+DFFF (1,024 code points): low surrogates
```

```c
// simdjson/src/generic/stage2/stringparsing.h
simdjson_inline bool handle_unicode_codepoint(const uint8_t **src_ptr,
                                            uint8_t **dst_ptr) {
  // jsoncharutils::hex_to_u32_nocheck fills high 16 bits of the return value with 1s if the
  // conversion isn't valid; we defer the check for this to inside the
  // multilingual plane check
  uint32_t code_point = jsoncharutils::hex_to_u32_nocheck(*src_ptr + 2);
  *src_ptr += 6;

  // If we found a high surrogate, we must
  // check for low surrogate for characters
  // outside the Basic
  // Multilingual Plane.
  if (code_point >= 0xd800 && code_point < 0xdc00) {
    if (((*src_ptr)[0] != '\\') || (*src_ptr)[1] != 'u') {
      return false;
    }
    uint32_t code_point_2 = jsoncharutils::hex_to_u32_nocheck(*src_ptr + 2);

    // if the first code point is invalid we will get here, as we will go past
    // the check for being outside the Basic Multilingual plane. If we don't
    // find a \u immediately afterwards we fail out anyhow, but if we do,
    // this check catches both the case of the first code point being invalid
    // or the second code point being invalid.
    if ((code_point | code_point_2) >> 16) {
      return false;
    }

    code_point =
        (((code_point - 0xd800) << 10) | (code_point_2 - 0xdc00)) + 0x10000;
    *src_ptr += 6;
  } else if (code_point >= 0xdc00 && code_point <= 0xdfff) {
      // If we encounter a low surrogate (not preceded by a high surrogate)
      // then we have an error.
      return false;
  }
```

Looking at the method:
1. `if ((code_point | code_point_2) >> 16) {` seems to be in the wrong position. ` if (code_point >= 0xd800 && code_point < 0xdc00) {` implies that `(code_point >> 16) === 0` do there doesn't seem to be an effect of the bitwise or. But even if that's meant to be the code_point after the reassignment, `0x10FFFF >> 16` would still be true, so that also seems wrong.
2. Maybe the check should be `if ((code_point_2 - 0xdc00) >> 16)` so it would fail both for invalid hex (all high 16 bits set) and for values smaller than 0xdc00?
3. the check can still overflow - i.e. it isn't checking for `code_point_2 <= 0xdfff` - i.e. it should reject `\xD888\xE0000`?
4. Maybe it's meant to check `if (((code_point - 0xd800) | (code_point_2 - 0xdc00)) >> 10) { return false; }` - though I don't know if that'd even be more efficient (e.g. check that they're both in the range of 1024 possible values, fail if at least one isn't)

    EDIT: This already checked `code_point >= 0xd800 && code_point < 0xdc00`, so only code_point_2 would need to be checked at that point for  `if ((code_point_2 - 0xdc00) >> 10) { return false; }`

E.g. if you execute that step by step

1. code_point = 0xd888 = 55432
2. code_point_2 = 0x1234 = 4660
3. code_point is reassigned to `(((code_point - 0xd800) << 10) | (code_point_2 - 0xdc00)) + 0x10000;` and becomes 13876 (which is between 0...0x10FFFF) and the function succeeds with an invalid low surrogate


**To Reproduce**
Call simdjson handle_unicode_codepoint with `\uD888\u1234` or simdjson decode in a binding with `"\uD888\u1234"` (testing with dom bindings)

Observed: simdjson decodes `"\uD888\u1234"` as `㘴`, reencoded as `"\\u3634"`
Expected: simdjson should throw for the following codepoint being out of the range of a low surrogate

 
If we cannot reproduce the issue, then we cannot address it. Note that a stack trace from your own program is not enough. A sample of your source code is insufficient: please provide a complete test for us to reproduce the issue. Please reduce the issue: use as small and as simple an example of the bug as possible.

It should be possible to trigger the bug by using solely simdjson with our default build setup. If you can only observe the bug within some specific context, with some other software, please reduce the issue first.

**simjson release**

https://github.com/simdjson/simdjson/tree/v2.2.2/singleheader

**Indicate whether you are willing or able to provide a bug fix as a pull request**

If you plan to contribute to simdjson, please read our
* CONTRIBUTING guide: https://github.com/simdjson/simdjson/blob/master/CONTRIBUTING.md and our
* HACKING guide: https://github.com/simdjson/simdjson/blob/master/HACKING.md

simdjson does not check that the value after high surrogate is in the range of a low surrogate?
diff --git a/src/generic/stage2/stringparsing.h b/src/generic/stage2/stringparsing.h
index 47ecd025e5..e330b86bc5 100644
--- a/src/generic/stage2/stringparsing.h
+++ b/src/generic/stage2/stringparsing.h
@@ -58,17 +58,18 @@ simdjson_inline bool handle_unicode_codepoint(const uint8_t **src_ptr,
     }
     uint32_t code_point_2 = jsoncharutils::hex_to_u32_nocheck(*src_ptr + 2);
 
-    // if the first code point is invalid we will get here, as we will go past
-    // the check for being outside the Basic Multilingual plane. If we don't
-    // find a \u immediately afterwards we fail out anyhow, but if we do,
-    // this check catches both the case of the first code point being invalid
-    // or the second code point being invalid.
-    if ((code_point | code_point_2) >> 16) {
+    // We have already checked that the high surrogate is valid and
+    // (code_point - 0xd800) < 1024.
+    //
+    // Check that code_point_2 is in the range 0xdc00..0xdfff
+    // and that code_point_2 was parsed from valid hex.
+    uint32_t low_bit = code_point_2 - 0xdc00;
+    if (low_bit >> 10) {
       return false;
     }
 
     code_point =
-        (((code_point - 0xd800) << 10) | (code_point_2 - 0xdc00)) + 0x10000;
+        (((code_point - 0xd800) << 10) | low_bit) + 0x10000;
     *src_ptr += 6;
   } else if (code_point >= 0xdc00 && code_point <= 0xdfff) {
       // If we encounter a low surrogate (not preceded by a high surrogate)

diff --git a/tests/ondemand/ondemand_misc_tests.cpp b/tests/ondemand/ondemand_misc_tests.cpp
index 7325e5b444..1a422f534f 100644
--- a/tests/ondemand/ondemand_misc_tests.cpp
+++ b/tests/ondemand/ondemand_misc_tests.cpp
@@ -63,6 +63,42 @@ namespace misc_tests {
     TEST_SUCCEED();
   }
 
+  // Test a surrogate pair with the low surrogate out of range
+  bool issue1894() {
+    TEST_START();
+    ondemand::parser parser;
+    auto json = R"("\uD888\u1234")"_padded;
+    ondemand::document doc;
+    ASSERT_SUCCESS(parser.iterate(json).get(doc));
+    std::string_view view;
+    ASSERT_ERROR(doc.get_string().get(view), STRING_ERROR);
+    TEST_SUCCEED();
+  }
+
+  bool issue1894toolarge() {
+    TEST_START();
+    ondemand::parser parser;
+    auto json = R"("\uD888\uE000")"_padded;
+    ondemand::document doc;
+    ASSERT_SUCCESS(parser.iterate(json).get(doc));
+    std::string_view view;
+    ASSERT_ERROR(doc.get_string().get(view), STRING_ERROR);
+    TEST_SUCCEED();
+  }
+
+  // Test the smallest surrogate pair, largest surrogate pair, and a surrogate pair in range.
+  bool issue1894success() {
+    TEST_START();
+    ondemand::parser parser;
+    auto json = R"("\uD888\uDC00\uD800\uDC00\uDBFF\uDFFF")"_padded;
+    ondemand::document doc;
+    ASSERT_SUCCESS(parser.iterate(json).get(doc));
+    std::string_view view;
+    ASSERT_SUCCESS(doc.get_string().get(view));
+	ASSERT_EQUAL(view, "\xf0\xb2\x80\x80\xf0\x90\x80\x80\xf4\x8f\xbf\xbf");
+    TEST_SUCCEED();
+  }
+
   bool issue1660() {
     TEST_START();
     ondemand::parser parser;
@@ -459,6 +495,9 @@ namespace misc_tests {
   bool run() {
     return
            issue1870() &&
+           issue1894() &&
+           issue1894toolarge() &&
+           issue1894success() &&
            is_alive_root_array() &&
            is_alive_root_object() &&
            is_alive_array() &&

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