Skip to content

Instantly share code, notes, and snippets.

@pedro pedro/parsing.html
Created Oct 26, 2016

Embed
What would you like to do?
Testing Ruby's Oj json parser with https://github.com/nst/JSONTestSuite
<!DOCTYPE html>
<HTML>
<HEAD>
<TITLE>JSON Parsing Tests</TITLE>
<LINK rel="stylesheet" type="text/css" href="style.css">
<META charset="UTF-8">
</HEAD>
<BODY>
<H1>JSON Parsing Tests</H1>
<P>Appendix to: seriot.ch <A HREF="http://www.seriot.ch/parsing_json.php">Parsing JSON is a Minefield</A> http://www.seriot.ch/parsing_json.php</P>
<PRE>2016-10-26 16:40:58</PRE>
<H4>Contents</H4>
<OL>
<LI><A HREF="#color_scheme">Color Scheme</A>
<LI><A HREF="#all_results">Full Results</A>
<LI><A HREF="#results_by_parser">Results by Parser</A><UL>
<LI><A HREF="#0">Ruby (JSON)</A>
<LI><A HREF="#1">Ruby (Oj)</A>
</OL>
<A NAME="color_scheme"></A>
<H4>1. Color scheme:</H4>
<TABLE>
<TR><TD class="EXPECTED_RESULT">expected result</TD><TR>
<TR><TD class="SHOULD_HAVE_PASSED">parsing should have succeeded but failed</TD><TR>
<TR><TD class="SHOULD_HAVE_FAILED">parsing should have failed but succeeded</TD><TR>
<TR><TD class="IMPLEMENTATION_PASS">result undefined, parsing succeeded</TD><TR>
<TR><TD class="IMPLEMENTATION_FAIL">result undefined, parsing failed</TD><TR>
<TR><TD class="CRASH">parser crashed</TD><TR>
<TR><TD class="TIMEOUT">timeout</TD><TR>
</TABLE>
<A NAME="all_results"></A>
<H4>2. Full Results</H4>
<TABLE>
<TR>
<TH></TH>
<TH class="vertical"><DIV>Ruby (JSON)</DIV></TH>
<TH class="vertical"><DIV>Ruby (Oj)</DIV></TH>
<TH></TH>
</TR>
<TR>
<TD>i_string_UTF-16LE_with_BOM.json</TD> <TD class="IMPLEMENTATION_FAIL"></TD> <TD class="IMPLEMENTATION_FAIL"></TD> <TD><U>FF</U><U>FE</U>[<U>00</U>"<U>00</U><U>E9</U><U>00</U>"<U>00</U>]<U>00</U> <=> [""]</TD> </TR> <TR>
<TD>i_structure_UTF-8_BOM_empty_object.json</TD> <TD class="IMPLEMENTATION_FAIL"></TD> <TD class="IMPLEMENTATION_FAIL"></TD> <TD><U>EF</U><U>BB</U><U>BF</U>{} <=> {}</TD> </TR> <TR>
<TD>i_structure_500_nested_arrays.json</TD> <TD class="IMPLEMENTATION_FAIL"></TD> <TD class="IMPLEMENTATION_PASS"></TD> <TD>[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[(...)</TD> </TR> <TR>
<TD>i_object_key_lone_2nd_surrogate.json</TD> <TD class="IMPLEMENTATION_PASS"></TD> <TD class="IMPLEMENTATION_FAIL"></TD> <TD>{"\uDFAA":0}</TD> </TR> <TR>
<TD>i_string_1st_surrogate_but_2nd_missing.json</TD> <TD class="IMPLEMENTATION_PASS"></TD> <TD class="IMPLEMENTATION_FAIL"></TD> <TD>["\uDADA"]</TD> </TR> <TR>
<TD>i_string_UTF-16_invalid_lonely_surrogate.json</TD> <TD class="IMPLEMENTATION_PASS"></TD> <TD class="IMPLEMENTATION_FAIL"></TD> <TD>["\ud800"]</TD> </TR> <TR>
<TD>i_string_UTF-16_invalid_surrogate.json</TD> <TD class="IMPLEMENTATION_PASS"></TD> <TD class="IMPLEMENTATION_FAIL"></TD> <TD>["\ud800abc"]</TD> </TR> <TR>
<TD>i_string_incomplete_surrogate_and_escape_valid.json</TD> <TD class="IMPLEMENTATION_PASS"></TD> <TD class="IMPLEMENTATION_FAIL"></TD> <TD>["\uD800\n"]</TD> </TR> <TR>
<TD>i_string_incomplete_surrogate_pair.json</TD> <TD class="IMPLEMENTATION_PASS"></TD> <TD class="IMPLEMENTATION_FAIL"></TD> <TD>["\uDd1ea"]</TD> </TR> <TR>
<TD>i_string_lone_second_surrogate.json</TD> <TD class="IMPLEMENTATION_PASS"></TD> <TD class="IMPLEMENTATION_FAIL"></TD> <TD>["\uDFAA"]</TD> </TR> <TR>
<TD>i_string_1st_valid_surrogate_2nd_invalid.json</TD> <TD class="IMPLEMENTATION_PASS"></TD> <TD class="IMPLEMENTATION_PASS"></TD> <TD>["\uD888\u1234"]</TD> </TR> <TR>
<TD>i_string_UTF-8_invalid_sequence.json</TD> <TD class="IMPLEMENTATION_PASS"></TD> <TD class="IMPLEMENTATION_PASS"></TD> <TD>["<U>E6</U><U>97</U><U>A5</U><U>D1</U><U>88</U><U>FA</U>"] <=> ["日ш"]</TD> </TR> <TR>
<TD>i_string_incomplete_surrogates_escape_valid.json</TD> <TD class="IMPLEMENTATION_PASS"></TD> <TD class="IMPLEMENTATION_PASS"></TD> <TD>["\uD800\uD800\n"]</TD> </TR> <TR>
<TD>i_string_inverted_surrogates_U+1D11E.json</TD> <TD class="IMPLEMENTATION_PASS"></TD> <TD class="IMPLEMENTATION_PASS"></TD> <TD>["\uDd1e\uD834"]</TD> </TR> <TR>
<TD>i_string_not_in_unicode_range.json</TD> <TD class="IMPLEMENTATION_PASS"></TD> <TD class="IMPLEMENTATION_PASS"></TD> <TD>["<U>F4</U><U>BF</U><U>BF</U><U>BF</U>"] <=> [""]</TD> </TR> <TR>
<TD>i_string_truncated-utf-8.json</TD> <TD class="IMPLEMENTATION_PASS"></TD> <TD class="IMPLEMENTATION_PASS"></TD> <TD>["<U>E0</U><U>FF</U>"] <=> [""]</TD> </TR> <TR>
<TD>i_string_unicode_U+10FFFE_nonchar.json</TD> <TD class="IMPLEMENTATION_PASS"></TD> <TD class="IMPLEMENTATION_PASS"></TD> <TD>["\uDBFF\uDFFE"]</TD> </TR> <TR>
<TD>i_string_unicode_U+1FFFE_nonchar.json</TD> <TD class="IMPLEMENTATION_PASS"></TD> <TD class="IMPLEMENTATION_PASS"></TD> <TD>["\uD83F\uDFFE"]</TD> </TR> <TR>
<TD>i_string_unicode_U+FDD0_nonchar.json</TD> <TD class="IMPLEMENTATION_PASS"></TD> <TD class="IMPLEMENTATION_PASS"></TD> <TD>["\uFDD0"]</TD> </TR> <TR>
<TD>i_string_unicode_U+FFFE_nonchar.json</TD> <TD class="IMPLEMENTATION_PASS"></TD> <TD class="IMPLEMENTATION_PASS"></TD> <TD>["\uFFFE"]</TD> </TR> <TR>
<TD>n_string_escape_x.json</TD> <TD class="SHOULD_HAVE_FAILED"></TD> <TD class="EXPECTED_RESULT"></TD> <TD>["\x00"]</TD> </TR> <TR>
<TD>n_string_escaped_emoji.json</TD> <TD class="SHOULD_HAVE_FAILED"></TD> <TD class="EXPECTED_RESULT"></TD> <TD>["\<U>F0</U><U>9F</U><U>8C</U><U>80</U>"] <=> ["\🌀"]</TD> </TR> <TR>
<TD>n_string_incomplete_surrogate_escape_invalid.json</TD> <TD class="SHOULD_HAVE_FAILED"></TD> <TD class="EXPECTED_RESULT"></TD> <TD>["\uD800\uD800\x"]</TD> </TR> <TR>
<TD>n_string_invalid_backslash_esc.json</TD> <TD class="SHOULD_HAVE_FAILED"></TD> <TD class="EXPECTED_RESULT"></TD> <TD>["\a"]</TD> </TR> <TR>
<TD>n_string_invalid_utf8_after_escape.json</TD> <TD class="SHOULD_HAVE_FAILED"></TD> <TD class="EXPECTED_RESULT"></TD> <TD>["\<U>E5</U>"] <=> ["\"]</TD> </TR> <TR>
<TD>n_string_unicode_CapitalU.json</TD> <TD class="SHOULD_HAVE_FAILED"></TD> <TD class="EXPECTED_RESULT"></TD> <TD>"\UA66D"</TD> </TR> <TR>
<TD>n_object_trailing_comment.json</TD> <TD class="SHOULD_HAVE_FAILED"></TD> <TD class="SHOULD_HAVE_FAILED"></TD> <TD>{"a":"b"}/**/</TD> </TR> <TR>
<TD>n_string_UTF8_surrogate_U+D800.json</TD> <TD class="SHOULD_HAVE_FAILED"></TD> <TD class="SHOULD_HAVE_FAILED"></TD> <TD>["<U>ED</U><U>A0</U><U>80</U>"] <=> [""]</TD> </TR> <TR>
<TD>n_string_invalid_utf-8.json</TD> <TD class="SHOULD_HAVE_FAILED"></TD> <TD class="SHOULD_HAVE_FAILED"></TD> <TD>["<U>FF</U>"] <=> [""]</TD> </TR> <TR>
<TD>n_string_iso_latin_1.json</TD> <TD class="SHOULD_HAVE_FAILED"></TD> <TD class="SHOULD_HAVE_FAILED"></TD> <TD>["<U>E9</U>"] <=> [""]</TD> </TR> <TR>
<TD>n_string_lone_utf8_continuation_byte.json</TD> <TD class="SHOULD_HAVE_FAILED"></TD> <TD class="SHOULD_HAVE_FAILED"></TD> <TD>["<U>81</U>"] <=> [""]</TD> </TR> <TR>
<TD>n_string_overlong_sequence_2_bytes.json</TD> <TD class="SHOULD_HAVE_FAILED"></TD> <TD class="SHOULD_HAVE_FAILED"></TD> <TD>["<U>C0</U><U>AF</U>"] <=> [""]</TD> </TR> <TR>
<TD>n_string_overlong_sequence_6_bytes.json</TD> <TD class="SHOULD_HAVE_FAILED"></TD> <TD class="SHOULD_HAVE_FAILED"></TD> <TD>["<U>FC</U><U>83</U><U>BF</U><U>BF</U><U>BF</U><U>BF</U>"] <=> [""]</TD> </TR> <TR>
<TD>n_string_overlong_sequence_6_bytes_null.json</TD> <TD class="SHOULD_HAVE_FAILED"></TD> <TD class="SHOULD_HAVE_FAILED"></TD> <TD>["<U>FC</U><U>80</U><U>80</U><U>80</U><U>80</U><U>80</U>"] <=> [""]</TD> </TR> <TR>
<TD>n_structure_object_with_comment.json</TD> <TD class="SHOULD_HAVE_FAILED"></TD> <TD class="SHOULD_HAVE_FAILED"></TD> <TD>{"a":/*comment*/"b"}</TD> </TR> <TR>
<TD>n_array_just_minus.json</TD> <TD class="EXPECTED_RESULT"></TD> <TD class="SHOULD_HAVE_FAILED"></TD> <TD>[-]</TD> </TR> <TR>
<TD>n_number_+1.json</TD> <TD class="EXPECTED_RESULT"></TD> <TD class="SHOULD_HAVE_FAILED"></TD> <TD>[+1]</TD> </TR> <TR>
<TD>n_number_-01.json</TD> <TD class="EXPECTED_RESULT"></TD> <TD class="SHOULD_HAVE_FAILED"></TD> <TD>[-01]</TD> </TR> <TR>
<TD>n_number_-2..json</TD> <TD class="EXPECTED_RESULT"></TD> <TD class="SHOULD_HAVE_FAILED"></TD> <TD>[-2.]</TD> </TR> <TR>
<TD>n_number_-NaN.json</TD> <TD class="EXPECTED_RESULT"></TD> <TD class="SHOULD_HAVE_FAILED"></TD> <TD>[-NaN]</TD> </TR> <TR>
<TD>n_number_0.3e+.json</TD> <TD class="EXPECTED_RESULT"></TD> <TD class="SHOULD_HAVE_FAILED"></TD> <TD>[0.3e+]</TD> </TR> <TR>
<TD>n_number_0.3e.json</TD> <TD class="EXPECTED_RESULT"></TD> <TD class="SHOULD_HAVE_FAILED"></TD> <TD>[0.3e]</TD> </TR> <TR>
<TD>n_number_0.e1.json</TD> <TD class="EXPECTED_RESULT"></TD> <TD class="SHOULD_HAVE_FAILED"></TD> <TD>[0.e1]</TD> </TR> <TR>
<TD>n_number_0_capital_E+.json</TD> <TD class="EXPECTED_RESULT"></TD> <TD class="SHOULD_HAVE_FAILED"></TD> <TD>[0E+]</TD> </TR> <TR>
<TD>n_number_0_capital_E.json</TD> <TD class="EXPECTED_RESULT"></TD> <TD class="SHOULD_HAVE_FAILED"></TD> <TD>[0E]</TD> </TR> <TR>
<TD>n_number_0e+.json</TD> <TD class="EXPECTED_RESULT"></TD> <TD class="SHOULD_HAVE_FAILED"></TD> <TD>[0e+]</TD> </TR> <TR>
<TD>n_number_0e.json</TD> <TD class="EXPECTED_RESULT"></TD> <TD class="SHOULD_HAVE_FAILED"></TD> <TD>[0e]</TD> </TR> <TR>
<TD>n_number_1.0e+.json</TD> <TD class="EXPECTED_RESULT"></TD> <TD class="SHOULD_HAVE_FAILED"></TD> <TD>[1.0e+]</TD> </TR> <TR>
<TD>n_number_1.0e-.json</TD> <TD class="EXPECTED_RESULT"></TD> <TD class="SHOULD_HAVE_FAILED"></TD> <TD>[1.0e-]</TD> </TR> <TR>
<TD>n_number_1.0e.json</TD> <TD class="EXPECTED_RESULT"></TD> <TD class="SHOULD_HAVE_FAILED"></TD> <TD>[1.0e]</TD> </TR> <TR>
<TD>n_number_2.e+3.json</TD> <TD class="EXPECTED_RESULT"></TD> <TD class="SHOULD_HAVE_FAILED"></TD> <TD>[2.e+3]</TD> </TR> <TR>
<TD>n_number_2.e-3.json</TD> <TD class="EXPECTED_RESULT"></TD> <TD class="SHOULD_HAVE_FAILED"></TD> <TD>[2.e-3]</TD> </TR> <TR>
<TD>n_number_2.e3.json</TD> <TD class="EXPECTED_RESULT"></TD> <TD class="SHOULD_HAVE_FAILED"></TD> <TD>[2.e3]</TD> </TR> <TR>
<TD>n_number_9.e+.json</TD> <TD class="EXPECTED_RESULT"></TD> <TD class="SHOULD_HAVE_FAILED"></TD> <TD>[9.e+]</TD> </TR> <TR>
<TD>n_number_NaN.json</TD> <TD class="EXPECTED_RESULT"></TD> <TD class="SHOULD_HAVE_FAILED"></TD> <TD>[NaN]</TD> </TR> <TR>
<TD>n_number_infinity.json</TD> <TD class="EXPECTED_RESULT"></TD> <TD class="SHOULD_HAVE_FAILED"></TD> <TD>[Infinity]</TD> </TR> <TR>
<TD>n_number_minus_infinity.json</TD> <TD class="EXPECTED_RESULT"></TD> <TD class="SHOULD_HAVE_FAILED"></TD> <TD>[-Infinity]</TD> </TR> <TR>
<TD>n_number_neg_int_starting_with_zero.json</TD> <TD class="EXPECTED_RESULT"></TD> <TD class="SHOULD_HAVE_FAILED"></TD> <TD>[-012]</TD> </TR> <TR>
<TD>n_number_neg_real_without_int_part.json</TD> <TD class="EXPECTED_RESULT"></TD> <TD class="SHOULD_HAVE_FAILED"></TD> <TD>[-.123]</TD> </TR> <TR>
<TD>n_number_real_without_fractional_part.json</TD> <TD class="EXPECTED_RESULT"></TD> <TD class="SHOULD_HAVE_FAILED"></TD> <TD>[1.]</TD> </TR> <TR>
<TD>n_number_then_00.json</TD> <TD class="EXPECTED_RESULT"></TD> <TD class="SHOULD_HAVE_FAILED"></TD> <TD>1<U>00</U> <=> 1</TD> </TR> <TR>
<TD>n_number_with_leading_zero.json</TD> <TD class="EXPECTED_RESULT"></TD> <TD class="SHOULD_HAVE_FAILED"></TD> <TD>[012]</TD> </TR> <TR>
<TD>n_object_trailing_comment_slash_open.json</TD> <TD class="EXPECTED_RESULT"></TD> <TD class="SHOULD_HAVE_FAILED"></TD> <TD>{"a":"b"}//</TD> </TR> <TR>
<TD>n_string_unescaped_newline.json</TD> <TD class="EXPECTED_RESULT"></TD> <TD class="SHOULD_HAVE_FAILED"></TD> <TD>["new<U>0A</U>line"] <=> ["new
line"]</TD> </TR> <TR>
<TD>n_string_unescaped_tab.json</TD> <TD class="EXPECTED_RESULT"></TD> <TD class="SHOULD_HAVE_FAILED"></TD> <TD>["<U>09</U>"] <=> [" "]</TD> </TR> <TR>
<TD>n_structure_double_array.json</TD> <TD class="EXPECTED_RESULT"></TD> <TD class="SHOULD_HAVE_FAILED"></TD> <TD>[][]</TD> </TR> <TR>
<TD>n_structure_object_with_trailing_garbage.json</TD> <TD class="EXPECTED_RESULT"></TD> <TD class="SHOULD_HAVE_FAILED"></TD> <TD>{"a": true} "x"</TD> </TR> <TR>
<TD>n_structure_whitespace_formfeed.json</TD> <TD class="EXPECTED_RESULT"></TD> <TD class="SHOULD_HAVE_FAILED"></TD> <TD>[<U>0C</U>] <=> [ ]</TD> </TR> <TR>
<TD>y_string_utf16BE_no_BOM.json</TD> <TD class="SHOULD_HAVE_PASSED"></TD> <TD class="SHOULD_HAVE_PASSED"></TD> <TD><U>00</U>[<U>00</U>"<U>00</U><U>E9</U><U>00</U>"<U>00</U>] <=> [""]</TD> </TR> <TR>
<TD>y_string_utf16LE_no_BOM.json</TD> <TD class="SHOULD_HAVE_PASSED"></TD> <TD class="SHOULD_HAVE_PASSED"></TD> <TD>[<U>00</U>"<U>00</U><U>E9</U><U>00</U>"<U>00</U>]<U>00</U> <=> [""]</TD> </TR> <TR>
<TD>y_structure_lonely_null.json</TD> <TD class="SHOULD_HAVE_PASSED"></TD> <TD class="SHOULD_HAVE_PASSED"></TD> <TD>null</TD> </TR></TABLE>
<A NAME="results_by_parser"></A>
<H4>3. Results by Parser</H4><P>
<A NAME="0"></A><H4>Ruby (JSON)</H4>
<TABLE>
<TR>
<TH></TH>
<TH class="space"><DIV></DIV></TH>
<TH></TH>
</TR>
<TR>
<TD>i_object_key_lone_2nd_surrogate.json</TD> <TD class="IMPLEMENTATION_PASS"></TD> <TD>{"\uDFAA":0}</TD> </TR> <TR>
<TD>i_string_1st_surrogate_but_2nd_missing.json</TD> <TD class="IMPLEMENTATION_PASS"></TD> <TD>["\uDADA"]</TD> </TR> <TR>
<TD>i_string_1st_valid_surrogate_2nd_invalid.json</TD> <TD class="IMPLEMENTATION_PASS"></TD> <TD>["\uD888\u1234"]</TD> </TR> <TR>
<TD>i_string_UTF-16LE_with_BOM.json</TD> <TD class="IMPLEMENTATION_FAIL"></TD> <TD><U>FF</U><U>FE</U>[<U>00</U>"<U>00</U><U>E9</U><U>00</U>"<U>00</U>]<U>00</U> <=> [""]</TD> </TR> <TR>
<TD>i_string_UTF-16_invalid_lonely_surrogate.json</TD> <TD class="IMPLEMENTATION_PASS"></TD> <TD>["\ud800"]</TD> </TR> <TR>
<TD>i_string_UTF-16_invalid_surrogate.json</TD> <TD class="IMPLEMENTATION_PASS"></TD> <TD>["\ud800abc"]</TD> </TR> <TR>
<TD>i_string_UTF-8_invalid_sequence.json</TD> <TD class="IMPLEMENTATION_PASS"></TD> <TD>["<U>E6</U><U>97</U><U>A5</U><U>D1</U><U>88</U><U>FA</U>"] <=> ["日ш"]</TD> </TR> <TR>
<TD>i_string_incomplete_surrogate_and_escape_valid.json</TD> <TD class="IMPLEMENTATION_PASS"></TD> <TD>["\uD800\n"]</TD> </TR> <TR>
<TD>i_string_incomplete_surrogate_pair.json</TD> <TD class="IMPLEMENTATION_PASS"></TD> <TD>["\uDd1ea"]</TD> </TR> <TR>
<TD>i_string_incomplete_surrogates_escape_valid.json</TD> <TD class="IMPLEMENTATION_PASS"></TD> <TD>["\uD800\uD800\n"]</TD> </TR> <TR>
<TD>i_string_inverted_surrogates_U+1D11E.json</TD> <TD class="IMPLEMENTATION_PASS"></TD> <TD>["\uDd1e\uD834"]</TD> </TR> <TR>
<TD>i_string_lone_second_surrogate.json</TD> <TD class="IMPLEMENTATION_PASS"></TD> <TD>["\uDFAA"]</TD> </TR> <TR>
<TD>i_string_not_in_unicode_range.json</TD> <TD class="IMPLEMENTATION_PASS"></TD> <TD>["<U>F4</U><U>BF</U><U>BF</U><U>BF</U>"] <=> [""]</TD> </TR> <TR>
<TD>i_string_truncated-utf-8.json</TD> <TD class="IMPLEMENTATION_PASS"></TD> <TD>["<U>E0</U><U>FF</U>"] <=> [""]</TD> </TR> <TR>
<TD>i_string_unicode_U+10FFFE_nonchar.json</TD> <TD class="IMPLEMENTATION_PASS"></TD> <TD>["\uDBFF\uDFFE"]</TD> </TR> <TR>
<TD>i_string_unicode_U+1FFFE_nonchar.json</TD> <TD class="IMPLEMENTATION_PASS"></TD> <TD>["\uD83F\uDFFE"]</TD> </TR> <TR>
<TD>i_string_unicode_U+FDD0_nonchar.json</TD> <TD class="IMPLEMENTATION_PASS"></TD> <TD>["\uFDD0"]</TD> </TR> <TR>
<TD>i_string_unicode_U+FFFE_nonchar.json</TD> <TD class="IMPLEMENTATION_PASS"></TD> <TD>["\uFFFE"]</TD> </TR> <TR>
<TD>i_structure_500_nested_arrays.json</TD> <TD class="IMPLEMENTATION_FAIL"></TD> <TD>[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[(...)</TD> </TR> <TR>
<TD>i_structure_UTF-8_BOM_empty_object.json</TD> <TD class="IMPLEMENTATION_FAIL"></TD> <TD><U>EF</U><U>BB</U><U>BF</U>{} <=> {}</TD> </TR> <TR>
<TD>n_object_trailing_comment.json</TD> <TD class="SHOULD_HAVE_FAILED"></TD> <TD>{"a":"b"}/**/</TD> </TR> <TR>
<TD>n_string_UTF8_surrogate_U+D800.json</TD> <TD class="SHOULD_HAVE_FAILED"></TD> <TD>["<U>ED</U><U>A0</U><U>80</U>"] <=> [""]</TD> </TR> <TR>
<TD>n_string_escape_x.json</TD> <TD class="SHOULD_HAVE_FAILED"></TD> <TD>["\x00"]</TD> </TR> <TR>
<TD>n_string_escaped_emoji.json</TD> <TD class="SHOULD_HAVE_FAILED"></TD> <TD>["\<U>F0</U><U>9F</U><U>8C</U><U>80</U>"] <=> ["\🌀"]</TD> </TR> <TR>
<TD>n_string_incomplete_surrogate_escape_invalid.json</TD> <TD class="SHOULD_HAVE_FAILED"></TD> <TD>["\uD800\uD800\x"]</TD> </TR> <TR>
<TD>n_string_invalid_backslash_esc.json</TD> <TD class="SHOULD_HAVE_FAILED"></TD> <TD>["\a"]</TD> </TR> <TR>
<TD>n_string_invalid_utf-8.json</TD> <TD class="SHOULD_HAVE_FAILED"></TD> <TD>["<U>FF</U>"] <=> [""]</TD> </TR> <TR>
<TD>n_string_invalid_utf8_after_escape.json</TD> <TD class="SHOULD_HAVE_FAILED"></TD> <TD>["\<U>E5</U>"] <=> ["\"]</TD> </TR> <TR>
<TD>n_string_iso_latin_1.json</TD> <TD class="SHOULD_HAVE_FAILED"></TD> <TD>["<U>E9</U>"] <=> [""]</TD> </TR> <TR>
<TD>n_string_lone_utf8_continuation_byte.json</TD> <TD class="SHOULD_HAVE_FAILED"></TD> <TD>["<U>81</U>"] <=> [""]</TD> </TR> <TR>
<TD>n_string_overlong_sequence_2_bytes.json</TD> <TD class="SHOULD_HAVE_FAILED"></TD> <TD>["<U>C0</U><U>AF</U>"] <=> [""]</TD> </TR> <TR>
<TD>n_string_overlong_sequence_6_bytes.json</TD> <TD class="SHOULD_HAVE_FAILED"></TD> <TD>["<U>FC</U><U>83</U><U>BF</U><U>BF</U><U>BF</U><U>BF</U>"] <=> [""]</TD> </TR> <TR>
<TD>n_string_overlong_sequence_6_bytes_null.json</TD> <TD class="SHOULD_HAVE_FAILED"></TD> <TD>["<U>FC</U><U>80</U><U>80</U><U>80</U><U>80</U><U>80</U>"] <=> [""]</TD> </TR> <TR>
<TD>n_string_unicode_CapitalU.json</TD> <TD class="SHOULD_HAVE_FAILED"></TD> <TD>"\UA66D"</TD> </TR> <TR>
<TD>n_structure_object_with_comment.json</TD> <TD class="SHOULD_HAVE_FAILED"></TD> <TD>{"a":/*comment*/"b"}</TD> </TR> <TR>
<TD>y_string_utf16BE_no_BOM.json</TD> <TD class="SHOULD_HAVE_PASSED"></TD> <TD><U>00</U>[<U>00</U>"<U>00</U><U>E9</U><U>00</U>"<U>00</U>] <=> [""]</TD> </TR> <TR>
<TD>y_string_utf16LE_no_BOM.json</TD> <TD class="SHOULD_HAVE_PASSED"></TD> <TD>[<U>00</U>"<U>00</U><U>E9</U><U>00</U>"<U>00</U>]<U>00</U> <=> [""]</TD> </TR> <TR>
<TD>y_structure_lonely_null.json</TD> <TD class="SHOULD_HAVE_PASSED"></TD> <TD>null</TD> </TR></TABLE>
</P>
<P>
<A NAME="1"></A><H4>Ruby (Oj)</H4>
<TABLE>
<TR>
<TH></TH>
<TH class="space"><DIV></DIV></TH>
<TH></TH>
</TR>
<TR>
<TD>i_object_key_lone_2nd_surrogate.json</TD> <TD class="IMPLEMENTATION_FAIL"></TD> <TD>{"\uDFAA":0}</TD> </TR> <TR>
<TD>i_string_1st_surrogate_but_2nd_missing.json</TD> <TD class="IMPLEMENTATION_FAIL"></TD> <TD>["\uDADA"]</TD> </TR> <TR>
<TD>i_string_1st_valid_surrogate_2nd_invalid.json</TD> <TD class="IMPLEMENTATION_PASS"></TD> <TD>["\uD888\u1234"]</TD> </TR> <TR>
<TD>i_string_UTF-16LE_with_BOM.json</TD> <TD class="IMPLEMENTATION_FAIL"></TD> <TD><U>FF</U><U>FE</U>[<U>00</U>"<U>00</U><U>E9</U><U>00</U>"<U>00</U>]<U>00</U> <=> [""]</TD> </TR> <TR>
<TD>i_string_UTF-16_invalid_lonely_surrogate.json</TD> <TD class="IMPLEMENTATION_FAIL"></TD> <TD>["\ud800"]</TD> </TR> <TR>
<TD>i_string_UTF-16_invalid_surrogate.json</TD> <TD class="IMPLEMENTATION_FAIL"></TD> <TD>["\ud800abc"]</TD> </TR> <TR>
<TD>i_string_UTF-8_invalid_sequence.json</TD> <TD class="IMPLEMENTATION_PASS"></TD> <TD>["<U>E6</U><U>97</U><U>A5</U><U>D1</U><U>88</U><U>FA</U>"] <=> ["日ш"]</TD> </TR> <TR>
<TD>i_string_incomplete_surrogate_and_escape_valid.json</TD> <TD class="IMPLEMENTATION_FAIL"></TD> <TD>["\uD800\n"]</TD> </TR> <TR>
<TD>i_string_incomplete_surrogate_pair.json</TD> <TD class="IMPLEMENTATION_FAIL"></TD> <TD>["\uDd1ea"]</TD> </TR> <TR>
<TD>i_string_incomplete_surrogates_escape_valid.json</TD> <TD class="IMPLEMENTATION_PASS"></TD> <TD>["\uD800\uD800\n"]</TD> </TR> <TR>
<TD>i_string_inverted_surrogates_U+1D11E.json</TD> <TD class="IMPLEMENTATION_PASS"></TD> <TD>["\uDd1e\uD834"]</TD> </TR> <TR>
<TD>i_string_lone_second_surrogate.json</TD> <TD class="IMPLEMENTATION_FAIL"></TD> <TD>["\uDFAA"]</TD> </TR> <TR>
<TD>i_string_not_in_unicode_range.json</TD> <TD class="IMPLEMENTATION_PASS"></TD> <TD>["<U>F4</U><U>BF</U><U>BF</U><U>BF</U>"] <=> [""]</TD> </TR> <TR>
<TD>i_string_truncated-utf-8.json</TD> <TD class="IMPLEMENTATION_PASS"></TD> <TD>["<U>E0</U><U>FF</U>"] <=> [""]</TD> </TR> <TR>
<TD>i_string_unicode_U+10FFFE_nonchar.json</TD> <TD class="IMPLEMENTATION_PASS"></TD> <TD>["\uDBFF\uDFFE"]</TD> </TR> <TR>
<TD>i_string_unicode_U+1FFFE_nonchar.json</TD> <TD class="IMPLEMENTATION_PASS"></TD> <TD>["\uD83F\uDFFE"]</TD> </TR> <TR>
<TD>i_string_unicode_U+FDD0_nonchar.json</TD> <TD class="IMPLEMENTATION_PASS"></TD> <TD>["\uFDD0"]</TD> </TR> <TR>
<TD>i_string_unicode_U+FFFE_nonchar.json</TD> <TD class="IMPLEMENTATION_PASS"></TD> <TD>["\uFFFE"]</TD> </TR> <TR>
<TD>i_structure_500_nested_arrays.json</TD> <TD class="IMPLEMENTATION_PASS"></TD> <TD>[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[(...)</TD> </TR> <TR>
<TD>i_structure_UTF-8_BOM_empty_object.json</TD> <TD class="IMPLEMENTATION_FAIL"></TD> <TD><U>EF</U><U>BB</U><U>BF</U>{} <=> {}</TD> </TR> <TR>
<TD>n_array_just_minus.json</TD> <TD class="SHOULD_HAVE_FAILED"></TD> <TD>[-]</TD> </TR> <TR>
<TD>n_number_+1.json</TD> <TD class="SHOULD_HAVE_FAILED"></TD> <TD>[+1]</TD> </TR> <TR>
<TD>n_number_-01.json</TD> <TD class="SHOULD_HAVE_FAILED"></TD> <TD>[-01]</TD> </TR> <TR>
<TD>n_number_-2..json</TD> <TD class="SHOULD_HAVE_FAILED"></TD> <TD>[-2.]</TD> </TR> <TR>
<TD>n_number_-NaN.json</TD> <TD class="SHOULD_HAVE_FAILED"></TD> <TD>[-NaN]</TD> </TR> <TR>
<TD>n_number_0.3e+.json</TD> <TD class="SHOULD_HAVE_FAILED"></TD> <TD>[0.3e+]</TD> </TR> <TR>
<TD>n_number_0.3e.json</TD> <TD class="SHOULD_HAVE_FAILED"></TD> <TD>[0.3e]</TD> </TR> <TR>
<TD>n_number_0.e1.json</TD> <TD class="SHOULD_HAVE_FAILED"></TD> <TD>[0.e1]</TD> </TR> <TR>
<TD>n_number_0_capital_E+.json</TD> <TD class="SHOULD_HAVE_FAILED"></TD> <TD>[0E+]</TD> </TR> <TR>
<TD>n_number_0_capital_E.json</TD> <TD class="SHOULD_HAVE_FAILED"></TD> <TD>[0E]</TD> </TR> <TR>
<TD>n_number_0e+.json</TD> <TD class="SHOULD_HAVE_FAILED"></TD> <TD>[0e+]</TD> </TR> <TR>
<TD>n_number_0e.json</TD> <TD class="SHOULD_HAVE_FAILED"></TD> <TD>[0e]</TD> </TR> <TR>
<TD>n_number_1.0e+.json</TD> <TD class="SHOULD_HAVE_FAILED"></TD> <TD>[1.0e+]</TD> </TR> <TR>
<TD>n_number_1.0e-.json</TD> <TD class="SHOULD_HAVE_FAILED"></TD> <TD>[1.0e-]</TD> </TR> <TR>
<TD>n_number_1.0e.json</TD> <TD class="SHOULD_HAVE_FAILED"></TD> <TD>[1.0e]</TD> </TR> <TR>
<TD>n_number_2.e+3.json</TD> <TD class="SHOULD_HAVE_FAILED"></TD> <TD>[2.e+3]</TD> </TR> <TR>
<TD>n_number_2.e-3.json</TD> <TD class="SHOULD_HAVE_FAILED"></TD> <TD>[2.e-3]</TD> </TR> <TR>
<TD>n_number_2.e3.json</TD> <TD class="SHOULD_HAVE_FAILED"></TD> <TD>[2.e3]</TD> </TR> <TR>
<TD>n_number_9.e+.json</TD> <TD class="SHOULD_HAVE_FAILED"></TD> <TD>[9.e+]</TD> </TR> <TR>
<TD>n_number_NaN.json</TD> <TD class="SHOULD_HAVE_FAILED"></TD> <TD>[NaN]</TD> </TR> <TR>
<TD>n_number_infinity.json</TD> <TD class="SHOULD_HAVE_FAILED"></TD> <TD>[Infinity]</TD> </TR> <TR>
<TD>n_number_minus_infinity.json</TD> <TD class="SHOULD_HAVE_FAILED"></TD> <TD>[-Infinity]</TD> </TR> <TR>
<TD>n_number_neg_int_starting_with_zero.json</TD> <TD class="SHOULD_HAVE_FAILED"></TD> <TD>[-012]</TD> </TR> <TR>
<TD>n_number_neg_real_without_int_part.json</TD> <TD class="SHOULD_HAVE_FAILED"></TD> <TD>[-.123]</TD> </TR> <TR>
<TD>n_number_real_without_fractional_part.json</TD> <TD class="SHOULD_HAVE_FAILED"></TD> <TD>[1.]</TD> </TR> <TR>
<TD>n_number_then_00.json</TD> <TD class="SHOULD_HAVE_FAILED"></TD> <TD>1<U>00</U> <=> 1</TD> </TR> <TR>
<TD>n_number_with_leading_zero.json</TD> <TD class="SHOULD_HAVE_FAILED"></TD> <TD>[012]</TD> </TR> <TR>
<TD>n_object_trailing_comment.json</TD> <TD class="SHOULD_HAVE_FAILED"></TD> <TD>{"a":"b"}/**/</TD> </TR> <TR>
<TD>n_object_trailing_comment_slash_open.json</TD> <TD class="SHOULD_HAVE_FAILED"></TD> <TD>{"a":"b"}//</TD> </TR> <TR>
<TD>n_string_UTF8_surrogate_U+D800.json</TD> <TD class="SHOULD_HAVE_FAILED"></TD> <TD>["<U>ED</U><U>A0</U><U>80</U>"] <=> [""]</TD> </TR> <TR>
<TD>n_string_invalid_utf-8.json</TD> <TD class="SHOULD_HAVE_FAILED"></TD> <TD>["<U>FF</U>"] <=> [""]</TD> </TR> <TR>
<TD>n_string_iso_latin_1.json</TD> <TD class="SHOULD_HAVE_FAILED"></TD> <TD>["<U>E9</U>"] <=> [""]</TD> </TR> <TR>
<TD>n_string_lone_utf8_continuation_byte.json</TD> <TD class="SHOULD_HAVE_FAILED"></TD> <TD>["<U>81</U>"] <=> [""]</TD> </TR> <TR>
<TD>n_string_overlong_sequence_2_bytes.json</TD> <TD class="SHOULD_HAVE_FAILED"></TD> <TD>["<U>C0</U><U>AF</U>"] <=> [""]</TD> </TR> <TR>
<TD>n_string_overlong_sequence_6_bytes.json</TD> <TD class="SHOULD_HAVE_FAILED"></TD> <TD>["<U>FC</U><U>83</U><U>BF</U><U>BF</U><U>BF</U><U>BF</U>"] <=> [""]</TD> </TR> <TR>
<TD>n_string_overlong_sequence_6_bytes_null.json</TD> <TD class="SHOULD_HAVE_FAILED"></TD> <TD>["<U>FC</U><U>80</U><U>80</U><U>80</U><U>80</U><U>80</U>"] <=> [""]</TD> </TR> <TR>
<TD>n_string_unescaped_newline.json</TD> <TD class="SHOULD_HAVE_FAILED"></TD> <TD>["new<U>0A</U>line"] <=> ["new
line"]</TD> </TR> <TR>
<TD>n_string_unescaped_tab.json</TD> <TD class="SHOULD_HAVE_FAILED"></TD> <TD>["<U>09</U>"] <=> [" "]</TD> </TR> <TR>
<TD>n_structure_double_array.json</TD> <TD class="SHOULD_HAVE_FAILED"></TD> <TD>[][]</TD> </TR> <TR>
<TD>n_structure_object_with_comment.json</TD> <TD class="SHOULD_HAVE_FAILED"></TD> <TD>{"a":/*comment*/"b"}</TD> </TR> <TR>
<TD>n_structure_object_with_trailing_garbage.json</TD> <TD class="SHOULD_HAVE_FAILED"></TD> <TD>{"a": true} "x"</TD> </TR> <TR>
<TD>n_structure_whitespace_formfeed.json</TD> <TD class="SHOULD_HAVE_FAILED"></TD> <TD>[<U>0C</U>] <=> [ ]</TD> </TR> <TR>
<TD>y_string_utf16BE_no_BOM.json</TD> <TD class="SHOULD_HAVE_PASSED"></TD> <TD><U>00</U>[<U>00</U>"<U>00</U><U>E9</U><U>00</U>"<U>00</U>] <=> [""]</TD> </TR> <TR>
<TD>y_string_utf16LE_no_BOM.json</TD> <TD class="SHOULD_HAVE_PASSED"></TD> <TD>[<U>00</U>"<U>00</U><U>E9</U><U>00</U>"<U>00</U>]<U>00</U> <=> [""]</TD> </TR> <TR>
<TD>y_structure_lonely_null.json</TD> <TD class="SHOULD_HAVE_PASSED"></TD> <TD>null</TD> </TR></TABLE>
</P>
</BODY>
</HTML>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
You can’t perform that action at this time.