Compliance cases

These are the 6,835 inputs a submission must decode. Each output must match the expected text byte for byte. You can run the suite without reading it, or open any case to see its input and expected output.

Run the full compliance suite locally. Replace your-component.wasm with your compiled component. Download the suite

curl -fLo unescape_html.comply.wasm https://calculated.world/comply/unescape_html.wasm
qipx comply your-component.wasm --with unescape_html.comply.wasm

All 6,835 cases

Case Name Expected Note Size
004800 named-hellip-no-semicolon Focused regression &hellip Legacy names decode without ; using the longest match 7 B
004801 named-hellip Focused regression … Legacy names decode without ; using the longest match 8 B
004802 named-upper-amp Focused regression && Legacy names decode without ; using the longest match 9 B
004803 named-mixed-case-unknown Focused regression &Amp;&aMp; Legacy names decode without ; using the longest match 10 B
004804 named-lt-tag Focused regression <<b>> Legacy names decode without ; using the longest match 9 B
004805 named-lt-gt-run Focused regression ><< Legacy names decode without ; using the longest match 10 B
004806 named-two-letter-prefix Focused regression <x>x<x>x Legacy names decode without ; using the longest match 16 B
004807 named-unknown Focused regression &foo; &no; &qwerty Legacy names decode without ; using the longest match 18 B
004808 query-string Focused regression /search?q=1&lang=en©=2¬=3®¶=4§=5×=6 Body-text rules: legacy names decode even in URLs 58 B
004809 named-CounterClockwiseContourIntegral Focused regression ∳&CounterClockwiseContourIntegral With and without ; 65 B
004810 named-DoubleLongLeftRightArrow Focused regression ⟺&DoubleLongLeftRightArrow With and without ; 51 B
004811 named-ThickSpace Focused regression   &ThickSpace With and without ; 23 B
004812 named-nGt Focused regression ≫⃒&nGt With and without ; 9 B
004813 named-nLt Focused regression ≪⃒&nLt With and without ; 9 B
004814 named-fjlig Focused regression fj&fjlig With and without ; 13 B
004815 named-acE Focused regression ∾̳&acE With and without ; 9 B
004816 named-NotNestedGreaterGreater Focused regression ⪢̸&NotNestedGreaterGreater With and without ; 49 B
004817 named-bne Focused regression =⃥&bne With and without ; 9 B
004818 named-race Focused regression ∽̱&race With and without ; 11 B
004819 named-Lt Focused regression ≪&Lt With and without ; 7 B
004820 named-LT Focused regression << With and without ; 7 B
004821 named-lt Focused regression << With and without ; 7 B
004822 long-name-after-legacy Focused regression &xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx; Python looks at 32 characters; the result is the same 45 B
004823 long-unknown-name Focused regression &aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa… 62 B
004824 no-double-decode Focused regression &amp; &#38; &lt; The output of one reference is never decoded again 28 B
004825 terminators Focused regression &␉&␊&␌& &<&&&#& 40 B
004826 raw-cr-lf-nul Focused regression a␍␊b␍c␀d Raw CR and NUL are copied, not normalised 8 B
004827 reference-then-raw Focused regression &␀A␍&␍ 12 B
004828 zero-width Focused regression ⟨U+200D⟩⟨U+200C⟩⟨U+200B⟩⟨U+2060⟩ 36 B
004829 large-expansion Focused regression ≫⃒≫⃒≫⃒≫⃒≫⃒≫⃒≫⃒≫⃒≫⃒≫⃒≫⃒≫⃒≫⃒≫⃒≫⃒≫⃒≫⃒≫⃒≫⃒≫⃒≫⃒≫⃒≫⃒≫⃒≫⃒≫⃒≫⃒≫⃒≫⃒≫⃒≫⃒≫⃒≫⃒≫⃒≫⃒≫⃒≫⃒≫⃒≫⃒≫⃒≫⃒≫⃒≫⃒≫⃒≫⃒≫⃒≫⃒≫⃒… Worst-case growth: 5 bytes become 6 97.7 KiB
004830 large-amp Focused regression &&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&… 97.7 KiB
004831 large-plain Focused regression abcdefghijabcdefghijabcdefghijabcdefghijabcdefgh… 97.7 KiB
004832 large-ampersands Focused regression &&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&… 48.8 KiB
004833 large-max-code-point Focused regression ⟨U+10FFFF⟩⟨U+10FFFF⟩⟨U+10FFFF⟩⟨U+10FFFF⟩⟨U+10FFFF⟩⟨U+10FFFF⟩⟨U+10FFFF⟩⟨U+10FFFF⟩⟨U+10FFFF⟩⟨U+10FFFF⟩⟨U+10FFFF⟩⟨U+10FFFF⟩⟨U+10FFFF⟩⟨U+10FFFF⟩⟨U+10FFFF⟩⟨U+10FFFF⟩⟨U+10FFFF⟩⟨U+10FFFF⟩⟨U+10FFFF⟩⟨U+10FFFF⟩⟨U+10FFFF⟩⟨U+10FFFF⟩⟨U+10FFFF⟩⟨U+10FFFF⟩⟨U+10FFFF⟩⟨U+10FFFF⟩⟨U+10FFFF⟩⟨U+10FFFF⟩⟨U+10FFFF⟩⟨U+10FFFF⟩⟨U+10FFFF⟩⟨U+10FFFF⟩⟨U+10FFFF⟩⟨U+10FFFF⟩⟨U+10FFFF⟩⟨U+10FFFF⟩⟨U+10FFFF⟩⟨U+10FFFF⟩⟨U+10FFFF⟩⟨U+10FFFF⟩⟨U+10FFFF⟩⟨U+10FFFF⟩⟨U+10FFFF⟩⟨U+10FFFF⟩⟨U+10FFFF⟩⟨U+10FFFF⟩⟨U+10FFFF⟩⟨U+10FFFF⟩… 97.7 KiB
004834 large-legacy-mix Focused regression © ∉ &x €© ∉ &x €© ∉ &x €© ∉ &x €© ∉ &x €© ∉ &x €… 101.6 KiB
004835 generated/0000 Generated x-A €--�€ ⪥<9ø&󳇟" 53 B
004836 generated/0001 Generated ⤓>&Zfr␍&NestedGreaterG&a🎉• 49 B
004837 generated/0002 Generated 9򛉙⪮⟨U+00A0⟩&g␉␉&gla␊f🎉日 47 B
004838 generated/0003 Generated 󺔆�Ÿ ∉&andan␊&boxhé 50 B
004839 generated/0004 Generated 日򹰙񏞽gA;▪🎉⟨U+2061⟩&odi񁌛 60 B
004840 generated/0005 Generated &€&varph&bump񖾪 €;񴢠…󅰟g&u&lbrkslϑ-&b 76 B
004841 generated/0006 Generated ==ℂ#␊␀␉-�&subd�䠧g񖧻gé 63 B
004842 generated/0007 Generated ␉ 󃻨gx􃆫€∻9&n␀򛝧 52 B
004843 generated/0008 Generated ␊F>񮡏g9A€FaÊ&cir򆬣� &blackt 59 B
004844 generated/0009 Generated 󉗬&cc'&Aogo🎉9󛏆g⇙F…␊'&=� 62 B
004845 generated/0010 Generated …񆞳Ģ&p-& ␍􌭄g␉&i 44 B
004846 generated/0011 Generated -␍␀f␍∽€&ŸΘ 27 B
004847 generated/0012 Generated ␍񨣸g&€x9&>�x 30 B
004848 generated/0013 Generated =&rig򞲊󲰭gF 23 B
004849 generated/0014 Generated &coĩFf&AEliН&NotRightTriangl9Z< 42 B

Where these rules come from

Expected outputs come from Python’s html.unescape, changed to keep references to controls and noncharacters the way the WHATWG tokenizer does.