From 1684649607dc3d7f37a932b77c7d09355ee4c8ac Mon Sep 17 00:00:00 2001 From: erjemin Date: Tue, 5 Aug 2025 12:29:32 +0300 Subject: [PATCH] =?UTF-8?q?mod:=20=D1=82=D0=B5=D1=81=D1=82=D1=8B=20=D0=B2?= =?UTF-8?q?=D1=81=D0=B5=D1=85=20html-=D0=BC=D0=BD=D0=B5=D0=BC=D0=BE=D0=BD?= =?UTF-8?q?=D0=B8=D0=BA=20=D0=B4=D0=BB=D1=8F=20decode=5Fto=5Funicode()?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- tests/test_codec.py | 290 +++++++++++++++++++++++++++++++++++++++++++- 1 file changed, 286 insertions(+), 4 deletions(-) diff --git a/tests/test_codec.py b/tests/test_codec.py index 889807d..81fc04a 100644 --- a/tests/test_codec.py +++ b/tests/test_codec.py @@ -2,6 +2,10 @@ import pytest from etpgrf import codec +# Справочники html-мнемоник для любопытных: +# https://www.compart.com/en/unicode/html +# https://symbl.cc/ru/html-entities/ + # Вообще, проверять кодирование HTML-мнемоников в Unicode не обязательно, так как это внутренняя библиотека html, # но так как мнемоники были собраны из разных сторонников, полезно проверить какие из них работают, а какие нет... # Это способствует тому, что обратное преобразование из Unicode в HTML-мнемоники будет работать корректно. @@ -43,10 +47,288 @@ STRINGS_FOR_DECODE = [ ("  þ ˜ × ™ ⇑ ú ↑ û", "\u2009 þ ˜ × ™ ⇑ ú ↑ û"), ("ù ¨ ϒ υ ü ℘ ξ ý ¥ ÿ", "ù ¨ ϒ υ ü ℘ ξ ý ¥ ÿ"), ("ζ ‍ ‌ + = %", "ζ \u200D \u200C + = %"), - # Набор из html.entities.html5 - ("", ""), - ("", ""), - + # Набор из html.entities.html5 (только новые html-мнемоники) + ("Ă ă ∾ ∿ ∾̳ ´ А а ⁡ 𝔄 𝔞", "Ă ă ∾ ∿ ∾̳ ´ А а \u2061 𝔄 𝔞"), + ("ℵ Ā ā ⨿ & ⩓ ⩕ ⩜ ⩘", "ℵ Ā ā ⨿ & ⩓ ⩕ ⩜ ⩘"), + ("⩚ ∠ ⦤ ∠ ∡ ⦨ ⦩ ⦪", "⩚ ∠ ⦤ ∠ ∡ ⦨ ⦩ ⦪"), + ("⦫ ⦬ ⦭ ⦮ ⦯ ∟ ⊾", "⦫ ⦬ ⦭ ⦮ ⦯ ∟ ⊾"), + ("⦝ ∢ Å ⍼ Ą ą 𝔸 𝕒 ≈", "⦝ ∢ Å ⍼ Ą ą 𝔸 𝕒 ≈"), + ("⩯ ⩰ ≊ ≋ ' ⁡ ≈ ≊", "⩯ ⩰ ≊ ≋ ' \u2061 ≈ ≊"), + ("𝒜 𝒶 ≔ * ≍ ∳ ⨑ ≌", "𝒜 𝒶 ≔ * ≍ ∳ ⨑ ≌"), + ("϶ ‵ ∽ ⋍ ∖ ⫧ ⊽", "϶ ‵ ∽ ⋍ ∖ ⫧ ⊽"), + ("⌆ ⌅ ⌅ ⎵ ⎶ ≌ Б б „", "⌆ ⌅ ⌅ ⎵ ⎶ ≌ Б б „"), + ("∵ ∵ ∵ ⦰ ϶ ℬ ℬ ℶ", "∵ ∵ ∵ ⦰ ϶ ℬ ℬ ℶ"), + ("≬ 𝔅 𝔟 ⋂ ◯ ⋃ ⨀ ⨁", "≬ 𝔅 𝔟 ⋂ ◯ ⋃ ⨀ ⨁"), + ("⨂ ⨆ ★ ▽ △ ⨄", "⨂ ⨆ ★ ▽ △ ⨄"), + ("⋁ ⋀ ⤍ ⧫ ▪ ▴", "⋁ ⋀ ⤍ ⧫ ▪ ▴"), + ("▾ ◂ ▸ ␣ ▒", "▾ ◂ ▸ ␣ ▒"), + ("░ ▓ █ =⃥ ≡⃥ ⫭ ⌐ 𝔹 𝕓 ⊥", "░ ▓ █ =⃥ ≡⃥ ⫭ ⌐ 𝔹 𝕓 ⊥"), + ("⊥ ⋈ ⧉ ╗ ╖ ╕ ┐ ╔", "⊥ ⋈ ⧉ ╗ ╖ ╕ ┐ ╔"), + ("╓ ╒ ┌ ═ ─ ╦ ╤ ╥ ┬", "╓ ╒ ┌ ═ ─ ╦ ╤ ╥ ┬"), + ("╩ ╧ ╨ ┴ ⊟ ⊞ ⊠", "╩ ╧ ╨ ┴ ⊟ ⊞ ⊠"), + ("╝ ╜ ╛ ┘ ╚ ╙ ╘ └ ║ │", "╝ ╜ ╛ ┘ ╚ ╙ ╘ └ ║ │"), + ("╬ ╫ ╪ ┼ ╣ ╢ ╡ ┤ ╠", "╬ ╫ ╪ ┼ ╣ ╢ ╡ ┤ ╠"), + ("╟ ╞ ├ ‵ ˘ ˘ ¦ ℬ 𝒷", "╟ ╞ ├ ‵ ˘ ˘ ¦ ℬ 𝒷"), + ("⁏ ∽ ⋍ \ ⧅ ⟈ • • ≎", "⁏ ∽ ⋍ \\ ⧅ ⟈ • • ≎"), + ("⪮ ≏ ≎ ≏ Ć ć ⋒ ∩ ⩄", "⪮ ≏ ≎ ≏ Ć ć ⋒ ∩ ⩄"), + ("⩉ ⩋ ⩇ ⩀ ⅅ ∩︀ ⁁", "⩉ ⩋ ⩇ ⩀ ⅅ ∩︀ ⁁"), + ("ˇ ℭ ⩍ Č č Ç ĉ ∰", "ˇ ℭ ⩍ Č č Ç ĉ ∰"), + ("⩌ ⩐ Ċ ċ ¸ ¸ ⦲ ¢", "⩌ ⩐ Ċ ċ ¸ ¸ ⦲ ¢"), + ("· · ℭ 𝔠 Ч ч ✓ ✓", "· · ℭ 𝔠 Ч ч ✓ ✓"), + ("Χ χ ○ ˆ ≗ ↺ ↻", "Χ χ ○ ˆ ≗ ↺ ↻"), + ("⊛ ⊚ ⊝ ⊙ ® Ⓢ", "⊛ ⊚ ⊝ ⊙ ® Ⓢ"), + ("⊖ ⊕ ⊗ ⧃ ≗ ⨐ ⫯", "⊖ ⊕ ⊗ ⧃ ≗ ⨐ ⫯"), + ("⧂ ∲ ” ’", "⧂ ∲ ” ’"), + ("♣ ♣ ∷ : ⩴ ≔ ≔ , @", "♣ ♣ ∷ : ⩴ ≔ ≔ , @"), + ("∁ ∘ ∁ ℂ ≅ ⩭ ≡", "∁ ∘ ∁ ℂ ≅ ⩭ ≡"), + ("∯ ∮ ∮ ℂ 𝕔 ∐ ∐", "∯ ∮ ∮ ℂ 𝕔 ∐ ∐"), + ("© ℗ ∳ ↵ ⨯ ✗", "© ℗ ∳ ↵ ⨯ ✗"), + ("𝒞 𝒸 ⫏ ⫑ ⫐ ⫒ ⋯ ⤸ ⤵", "𝒞 𝒸 ⫏ ⫑ ⫐ ⫒ ⋯ ⤸ ⤵"), + ("⋞ ⋟ ↶ ⤽ ⋓ ∪ ⩈ ≍ ⩆", "⋞ ⋟ ↶ ⤽ ⋓ ∪ ⩈ ≍ ⩆"), + ("⩊ ⊍ ⩅ ∪︀ ↷ ⤼ ⋞ ⋟", "⩊ ⊍ ⩅ ∪︀ ↷ ⤼ ⋞ ⋟"), + ("⋎ ⋏ ¤ ↶ ↷ ⋎", "⋎ ⋏ ¤ ↶ ↷ ⋎"), + ("⋏ ∲ ∱ ⌭ ℸ ↡ ⇓ ↓ ‐", "⋏ ∲ ∱ ⌭ ℸ ↡ ⇓ ↓ ‐"), + ("⫤ ⊣ ⤏ ˝ Ď ď Д д ⅅ ⅆ", "⫤ ⊣ ⤏ ˝ Ď ď Д д ⅅ ⅆ"), + ("‡ ⇊ ⤑ ⩷ ° ∇ Δ δ", "‡ ⇊ ⤑ ⩷ ° ∇ Δ δ"), + ("⦱ ⥿ 𝔇 𝔡 ⥥ ⇃ ⇂ ´", "⦱ ⥿ 𝔇 𝔡 ⥥ ⇃ ⇂ ´"), + ("˙ ˝ ` ˜", "˙ ˝ ` ˜"), + ("⋄ ⋄ ⋄ ♦ ♦ ¨ ⅆ", "⋄ ⋄ ⋄ ♦ ♦ ¨ ⅆ"), + ("ϝ ⋲ ÷ ÷ ⋇ ⋇ Ђ ђ", "ϝ ⋲ ÷ ÷ ⋇ ⋇ Ђ ђ"), + ("⌞ ⌍ 𝔻 𝕕 ¨ ˙ ⃜ ≐ ≑", "⌞ ⌍ 𝔻 𝕕 ¨ ˙ ⃜ ≐ ≑"), + ("≐ ∸ ∔ ⊡ ⌆", "≐ ∸ ∔ ⊡ ⌆"), + ("∯ ¨ ⇓ ⇐", "∯ ¨ ⇓ ⇐"), + ("⇔ ⫤ ⟸", "⇔ ⫤ ⟸"), + ("⟺ ⟹ ⇒", "⟺ ⟹ ⇒"), + ("⊨ ⇑ ⇕ ∥", "⊨ ⇑ ⇕ ∥"), + ("↓ ⇓ ↓ ⤓ ⇵", "↓ ⇓ ↓ ⤓ ⇵"), + ("̑ ⇊ ⇃ ⇂", "̑ ⇊ ⇃ ⇂"), + ("⥐ ⥞ ↽ ⥖", "⥐ ⥞ ↽ ⥖"), + ("⥟ ⇁ ⥗ ⊤", "⥟ ⇁ ⥗ ⊤"), + ("↧ ⤐ ⌟ ⌌ 𝒟 𝒹 Ѕ ѕ ⧶", "↧ ⤐ ⌟ ⌌ 𝒟 𝒹 Ѕ ѕ ⧶"), + ("Đ đ ⋱ ▿ ▾ ⇵ ⥯ ⦦ Џ", "Đ đ ⋱ ▿ ▾ ⇵ ⥯ ⦦ Џ"), + ("џ ⟿ É é É é ⩮ Ě", "џ ⟿ É é É é ⩮ Ě"), + ("ě ≖ Ê ê Ê ê ≕ Э э ⩷", "ě ≖ Ê ê Ê ê ≕ Э э ⩷"), + ("Ė ≑ ė ⅇ ≒ 𝔈 𝔢 ⪚ È è È", "Ė ≑ ė ⅇ ≒ 𝔈 𝔢 ⪚ È è È"), + ("è ⪖ ⪘ ⪙ ∈ ⏧ ℓ ⪕ ⪗ Ē", "è ⪖ ⪘ ⪙ ∈ ⏧ ℓ ⪕ ⪗ Ē"), + ("ē ∅ ∅ ◻ ∅ ▫", "ē ∅ ∅ ◻ ∅ ▫"), + ("      Ŋ ŋ   Ę ę 𝔼", "\u2004 \u2005 \u2003 Ŋ ŋ \u2002 Ę ę 𝔼"), + ("𝕖 ⋕ ⧣ ⩱ ε Ε ε ϵ ≖ ≕", "𝕖 ⋕ ⧣ ⩱ ε Ε ε ϵ ≖ ≕"), + ("≂ ⪖ ⪕ ⩵ = ≂ ≟", "≂ ⪖ ⪕ ⩵ = ≂ ≟"), + ("⇌ ≡ ⩸ ⧥ ⥱ ≓ ℰ ℯ", "⇌ ≡ ⩸ ⧥ ⥱ ≓ ℰ ℯ"), + ("≐ ⩳ ≂ Η η Ð ð Ð ð Ë ë Ë", "≐ ⩳ ≂ Η η Ð ð Ð ð Ë ë Ë"), + ("ë € ! ∃ ∃ ℰ ⅇ", "ë € ! ∃ ∃ ℰ ⅇ"), + ("ⅇ ≒ Ф ф ♀ ffi ff ffl", "ⅇ ≒ Ф ф ♀ ffi ff ffl"), + ("𝔉 𝔣 fi ◼ ▪ fj ♭", "𝔉 𝔣 fi ◼ ▪ fj ♭"), + ("fl ▱ ƒ 𝔽 𝕗 ∀ ∀ ⋔ ⫙", "fl ▱ ƒ 𝔽 𝕗 ∀ ∀ ⋔ ⫙"), + ("ℱ ⨍ ½ ½ ⅓ ¼ ¼ ⅕", "ℱ ⨍ ½ ½ ⅓ ¼ ¼ ⅕"), + ("⅙ ⅛ ⅔ ⅖ ¾ ¾ ⅗ ⅜", "⅙ ⅛ ⅔ ⅖ ¾ ¾ ⅗ ⅜"), + ("⅘ ⅚ ⅝ ⅞ ⁄ ⌢ ℱ 𝒻 ǵ", "⅘ ⅚ ⅝ ⅞ ⁄ ⌢ ℱ 𝒻 ǵ"), + ("Γ γ Ϝ ϝ ⪆ Ğ ğ Ģ Ĝ", "Γ γ Ϝ ϝ ⪆ Ğ ğ Ģ Ĝ"), + ("ĝ Г г Ġ ġ ≧ ≥ ⪌ ⋛ ≥ ≧", "ĝ Г г Ġ ġ ≧ ≥ ⪌ ⋛ ≥ ≧"), + ("⩾ ⩾ ⪩ ⪀ ⪂ ⪄ ⋛︀ ⪔ 𝔊", "⩾ ⩾ ⪩ ⪀ ⪂ ⪄ ⋛︀ ⪔ 𝔊"), + ("𝔤 ⋙ ≫ ⋙ ℷ Ѓ ѓ ≷ ⪥ ⪒ ⪤ ⪊", "𝔤 ⋙ ≫ ⋙ ℷ Ѓ ѓ ≷ ⪥ ⪒ ⪤ ⪊"), + ("⪊ ≩ ⪈ ⪈ ≩ ⋧ 𝔾 𝕘 `", "⪊ ≩ ⪈ ⪈ ≩ ⋧ 𝔾 𝕘 `"), + ("≥ ⋛ ≧ ⪢", "≥ ⋛ ≧ ⪢"), + ("≷ ⩾ ≳ 𝒢 ℊ ≳ ⪎", "≷ ⩾ ≳ 𝒢 ℊ ≳ ⪎"), + ("⪐ > > > ≫ > ⪧ ⩺ ⋗ ⦕ ⩼", "⪐ > > > ≫ > ⪧ ⩺ ⋗ ⦕ ⩼"), + ("⪆ ⥸ ⋗ ⋛ ⪌ ≷ ≳", "⪆ ⥸ ⋗ ⋛ ⪌ ≷ ≳"), + ("≩︀ ≩︀ ˇ   ½ ℋ Ъ ъ ⇔", "≩︀ ≩︀ ˇ \u200a ½ ℋ Ъ ъ ⇔"), + ("↔ ⥈ ↭ ^ ℏ Ĥ ĥ ♥ ♥", "↔ ⥈ ↭ ^ ℏ Ĥ ĥ ♥ ♥"), + ("… ⊹ ℌ 𝔥 ℋ ⤥ ⤦ ⇿", "… ⊹ ℌ 𝔥 ℋ ⤥ ⤦ ⇿"), + ("∻ ↩ ↪ ℍ 𝕙 ―", "∻ ↩ ↪ ℍ 𝕙 ―"), + ("─ ℋ 𝒽 ℏ Ħ ħ ≎", "─ ℋ 𝒽 ℏ Ħ ħ ≎"), + ("≏ ⁃ ‐ Í í Í í ⁣ Î", "≏ ⁃ ‐ Í í Í í ⁣ Î"), + ("î Î î И и İ Е е ¡ ¡ ⇔", "î Î î И и İ Е е ¡ ¡ ⇔"), + ("ℑ 𝔦 Ì ì Ì ì ⅈ ⨌ ∭ ⧜", "ℑ 𝔦 Ì ì Ì ì ⅈ ⨌ ∭ ⧜"), + ("℩ IJ ij ℑ Ī ī ℑ ⅈ ℐ", "℩ IJ ij ℑ Ī ī ℑ ⅈ ℐ"), + ("ℑ ı ⊷ Ƶ ⇒ ∈ ℅ ∞ ⧝", "ℑ ı ⊷ Ƶ ⇒ ∈ ℅ ∞ ⧝"), + ("ı ∬ ∫ ⊺ ℤ ∫ ⊺ ⋂", "ı ∬ ∫ ⊺ ℤ ∫ ⊺ ⋂"), + ("⨗ ⨼ ⁣ ⁢ Ё ё Į", "⨗ ⨼ ⁣ ⁢ Ё ё Į"), + ("į 𝕀 𝕚 Ι ι ⨼ ¿ ¿ ℐ 𝒾", "į 𝕀 𝕚 Ι ι ⨼ ¿ ¿ ℐ 𝒾"), + ("∈ ⋵ ⋹ ⋴ ⋳ ∈ ⁢ Ĩ ĩ", "∈ ⋵ ⋹ ⋴ ⋳ ∈ ⁢ Ĩ ĩ"), + ("І і Ï ï Ï ï Ĵ ĵ Й й 𝔍", "І і Ï ï Ï ï Ĵ ĵ Й й 𝔍"), + ("𝔧 ȷ 𝕁 𝕛 𝒥 𝒿 Ј ј Є є", "𝔧 ȷ 𝕁 𝕛 𝒥 𝒿 Ј ј Є є"), + ("Κ κ ϰ Ķ ķ К к 𝔎 𝔨 ĸ", "Κ κ ϰ Ķ ķ К к 𝔎 𝔨 ĸ"), + ("Х х Ќ ќ 𝕂 𝕜 𝒦 𝓀 ⇚ Ĺ", "Х х Ќ ќ 𝕂 𝕜 𝒦 𝓀 ⇚ Ĺ"), + ("ĺ ⦴ ℒ Λ λ ⟪ ⟨ ⦑ ⟨", "ĺ ⦴ ℒ Λ λ ⟪ ⟨ ⦑ ⟨"), + ("⪅ ℒ « « ↞ ⇐ ← ⇤ ⤟", "⪅ ℒ « « ↞ ⇐ ← ⇤ ⤟"), + ("⤝ ↩ ↫ ⤹ ⥳ ↢ ⪫ ⤛ ⤙", "⤝ ↩ ↫ ⤹ ⥳ ↢ ⪫ ⤛ ⤙"), + ("⪭ ⪭︀ ⤎ ⤌ ❲ { [ ⦋ ⦏", "⪭ ⪭︀ ⤎ ⤌ ❲ { [ ⦋ ⦏"), + ("⦍ Ľ ľ Ļ ļ ⌈ { Л л", "⦍ Ľ ľ Ļ ļ ⌈ { Л л"), + ("⤶ “ „ ⥧ ⥋ ↲ ≦ ≤", "⤶ “ „ ⥧ ⥋ ↲ ≦ ≤"), + ("⟨ ← ⇐ ← ⇤", "⟨ ← ⇐ ← ⇤"), + ("⇆ ↢ ⌈ ⟦", "⇆ ↢ ⌈ ⟦"), + ("⥡ ⇃ ⥙ ⌊", "⥡ ⇃ ⥙ ⌊"), + ("↽ ↼ ⇇ ↔", "↽ ↼ ⇇ ↔"), + ("⇔ ↔ ⇆ ⇋", "⇔ ↔ ⇆ ⇋"), + ("↭ ⥎ ⊣ ↤", "↭ ⥎ ⊣ ↤"), + ("⥚ ⋋ ⊲ ⧏", "⥚ ⋋ ⊲ ⧏"), + ("⊴ ⥑ ⥠ ↿", "⊴ ⥑ ⥠ ↿"), + ("⥘ ↼ ⥒ ⪋ ⋚ ≤ ≦", "⥘ ↼ ⥒ ⪋ ⋚ ≤ ≦"), + ("⩽ ⩽ ⪨ ⩿ ⪁ ⪃ ⋚︀ ⪓", "⩽ ⩽ ⪨ ⩿ ⪁ ⪃ ⋚︀ ⪓"), + ("⪅ ⋖ ⋚ ⪋ ⋚", "⪅ ⋖ ⋚ ⪋ ⋚"), + ("≦ ≶ ≶ ⪡ ≲ ⩽", "≦ ≶ ≶ ⪡ ≲ ⩽"), + ("≲ ⥼ ⌊ 𝔏 𝔩 ≶ ⪑ ⥢ ↽ ↼", "≲ ⥼ ⌊ 𝔏 𝔩 ≶ ⪑ ⥢ ↽ ↼"), + ("⥪ ▄ Љ љ ⋘ ≪ ⇇ ⌞ ⇚", "⥪ ▄ Љ љ ⋘ ≪ ⇇ ⌞ ⇚"), + ("⥫ ◺ Ŀ ŀ ⎰ ⎰ ⪉ ⪉", "⥫ ◺ Ŀ ŀ ⎰ ⎰ ⪉ ⪉"), + ("≨ ⪇ ⪇ ≨ ⋦ ⟬ ⇽ ⟦ ⟵", "≨ ⪇ ⪇ ≨ ⋦ ⟬ ⇽ ⟦ ⟵"), + ("⟸ ⟵ ⟷ ⟺", "⟸ ⟵ ⟷ ⟺"), + ("⟷ ⟼ ⟶ ⟹", "⟷ ⟼ ⟶ ⟹"), + ("⟶ ↫ ↬ ⦅ 𝕃 𝕝", "⟶ ↫ ↬ ⦅ 𝕃 𝕝"), + ("⨭ ⨴ ∗ _ ↙ ↘ ◊", "⨭ ⨴ ∗ _ ↙ ↘ ◊"), + ("◊ ⧫ ( ⦓ ⇆ ⌟ ⇋ ⥭ ‎", "◊ ⧫ ( ⦓ ⇆ ⌟ ⇋ ⥭ \u200E"), + ("⊿ ‹ ℒ 𝓁 ↰ ↰ ≲ ⪍ ⪏ [", "⊿ ‹ ℒ 𝓁 ↰ ↰ ≲ ⪍ ⪏ ["), + ("‘ ‚ Ł ł < < < ≪ < ⪦ ⩹", "‘ ‚ Ł ł < < < ≪ < ⪦ ⩹"), + ("⋖ ⋋ ⋉ ⥶ ⩻ ◃ ⊴ ◂ ⦖", "⋖ ⋋ ⋉ ⥶ ⩻ ◃ ⊴ ◂ ⦖"), + ("⥊ ⥦ ≨︀ ≨︀ ¯ ¯ ♂ ✠ ✠", "⥊ ⥦ ≨︀ ≨︀ ¯ ¯ ♂ ✠ ✠"), + ("⤅ ↦ ↦ ↧ ↤ ↥ ▮ ⨩", "⤅ ↦ ↦ ↧ ↤ ↥ ▮ ⨩"), + ("М м — ∺ ∡   ℳ 𝔐", "М м — ∺ ∡ \u205F ℳ 𝔐"), + ("𝔪 ℧ µ µ ∣ * ⫰ · · −", "𝔪 ℧ µ µ ∣ * ⫰ · · −"), + ("⊟ ∸ ⨪ ∓ ⫛ … ∓ ⊧ 𝕄", "⊟ ∸ ⨪ ∓ ⫛ … ∓ ⊧ 𝕄"), + ("𝕞 ∓ ℳ 𝓂 ∾ Μ μ ⊸ ⊸ ∇", "𝕞 ∓ ℳ 𝓂 ∾ Μ μ ⊸ ⊸ ∇"), + ("Ń ń ∠⃒ ≉ ⩰̸ ≋̸ ʼn ≉ ♮", "Ń ń ∠⃒ ≉ ⩰̸ ≋̸ ʼn ≉ ♮"), + ("♮ ℕ     ≎̸ ≏̸ ⩃ Ň ň", "♮ ℕ \u00A0 \u00A0 ≎̸ ≏̸ ⩃ Ň ň"), + ("Ņ ņ ≇ ⩭̸ ⩂ Н н – ≠ ⤤", "Ņ ņ ≇ ⩭̸ ⩂ Н н – ≠ ⤤"), + ("⇗ ↗ ↗ ≐̸ ​ ​", "⇗ ↗ ↗ ≐̸ \u200b \u200b"), + ("​ ​ ≢ ⤨ ≂̸", "\u200b \u200b ≢ ⤨ ≂̸"), + ("≫ ≪ ∄ ∄ 𝔑", "≫ ≪ \n ∄ ∄ 𝔑"), + ("𝔫 ≧̸ ≱ ≱ ≧̸ ⩾̸ ⩾̸ ⋙̸ ≵ ≫⃒ ≯", "𝔫 ≧̸ ≱ ≱ ≧̸ ⩾̸ ⩾̸ ⋙̸ ≵ ≫⃒ ≯"), + ("≯ ≫̸ ⇎ ↮ ⫲ ∋ ⋼ ⋺ ∋ Њ њ", "≯ ≫̸ ⇎ ↮ ⫲ ∋ ⋼ ⋺ ∋ Њ њ"), + ("⇍ ↚ ‥ ≦̸ ≰ ⇍ ↚ ⇎", "⇍ ↚ ‥ ≦̸ ≰ ⇍ ↚ ⇎"), + ("↮ ≰ ≦̸ ⩽̸ ⩽̸ ≮ ⋘̸ ≴", "↮ ≰ ≦̸ ⩽̸ ⩽̸ ≮ ⋘̸ ≴"), + ("≪⃒ ≮ ⋪ ⋬ ≪̸ ∤ ⁠   ℕ", "≪⃒ ≮ ⋪ ⋬ ≪̸ ∤ \u2060 \u00A0 ℕ"), + ("𝕟 ¬ ⫬ ¬ ≢ ≭ ∦", "𝕟 ¬ ⫬ ¬ ≢ ≭ ∦"), + ("∉ ≠ ≂̸ ∄ ≯", "∉ ≠ ≂̸ ∄ ≯"), + ("≱ ≧̸ ≫̸ ≹", "≱ ≧̸ ≫̸ ≹"), + ("⩾̸ ≵ ≎̸ ≏̸", "⩾̸ ≵ ≎̸ ≏̸"), + ("∉ ⋵̸ ⋹̸ ∉ ⋷ ⋶ ⋪", "∉ ⋵̸ ⋹̸ ∉ ⋷ ⋶ ⋪"), + ("⧏̸ ⋬ ≮ ≰", "⧏̸ ⋬ ≮ ≰"), + ("≸ ≪̸ ⩽̸ ≴", "≸ ≪̸ ⩽̸ ≴"), + ("⪢̸ ⪡̸ ∌ ∌ ⋾", "⪢̸ ⪡̸ ∌ ∌ ⋾"), + ("⋽ ⊀ ⪯̸ ⋠", "⋽ ⊀ ⪯̸ ⋠"), + ("∌ ⋫ ⧐̸", "∌ ⋫ ⧐̸"), + ("⋭ ⊏̸ ⋢", "⋭ ⊏̸ ⋢"), + ("⊐̸ ⋣ ⊂⃒ ⊈", "⊐̸ ⋣ ⊂⃒ ⊈"), + ("⊁ ⪰̸ ⋡ ≿̸", "⊁ ⪰̸ ⋡ ≿̸"), + ("⊃⃒ ⊉ ≁ ≄", "⊃⃒ ⊉ ≁ ≄"), + ("≇ ≉ ∤ ∦ ∦", "≇ ≉ ∤ ∦ ∦"), + ("⫽⃥ ∂̸ ⨔ ⊀ ⋠ ⪯̸ ⊀ ⪯̸ ⇏", "⫽⃥ ∂̸ ⨔ ⊀ ⋠ ⪯̸ ⊀ ⪯̸ ⇏"), + ("↛ ⤳̸ ↝̸ ⇏ ↛ ⋫ ⋭ ⊁", "↛ ⤳̸ ↝̸ ⇏ ↛ ⋫ ⋭ ⊁"), + ("⋡ ⪰̸ 𝒩 𝓃 ∤ ∦ ≁ ≄", "⋡ ⪰̸ 𝒩 𝓃 ∤ ∦ ≁ ≄"), + ("≄ ∤ ∦ ⋢ ⋣ ⊄ ⫅̸ ⊈ ⊂⃒", "≄ ∤ ∦ ⋢ ⋣ ⊄ ⫅̸ ⊈ ⊂⃒"), + ("⊈ ⫅̸ ⊁ ⪰̸ ⊅ ⫆̸ ⊉ ⊃⃒", "⊈ ⫅̸ ⊁ ⪰̸ ⊅ ⫆̸ ⊉ ⊃⃒"), + ("⊉ ⫆̸ ≹ Ñ ñ Ñ ñ ≸", "⊉ ⫆̸ ≹ Ñ ñ Ñ ñ ≸"), + ("⋪ ⋬ ⋫ ⋭ Ν", "⋪ ⋬ ⋫ ⋭ Ν"), + ("ν # №   ≍⃒ ⊯ ⊮ ⊭ ⊬ ≥⃒", "ν # № \u2007 ≍⃒ ⊯ ⊮ ⊭ ⊬ ≥⃒"), + (">⃒ ⤄ ⧞ ⤂ ≤⃒ <⃒ ⊴⃒ ⤃ ⊵⃒", ">⃒ ⤄ ⧞ ⤂ ≤⃒ <⃒ ⊴⃒ ⤃ ⊵⃒"), + ("∼⃒ ⤣ ⇖ ↖ ↖ ⤧ Ó ó Ó", "∼⃒ ⤣ ⇖ ↖ ↖ ⤧ Ó ó Ó"), + ("ó ⊛ ⊚ Ô ô Ô ô О о ⊝", "ó ⊛ ⊚ Ô ô Ô ô О о ⊝"), + ("Ő ő ⨸ ⊙ ⦼ Œ œ ⦿ 𝔒 𝔬", "Ő ő ⨸ ⊙ ⦼ Œ œ ⦿ 𝔒 𝔬"), + ("˛ Ò ò Ò ò ⧁ ⦵ Ω ∮ ↺", "˛ Ò ò Ò ò ⧁ ⦵ Ω ∮ ↺"), + ("⦾ ⦻ ‾ ⧀ Ō ō Ω ω Ο", "⦾ ⦻ ‾ ⧀ Ō ō Ω ω Ο"), + ("ο ⦶ ⊖ 𝕆 𝕠 ⦷ “", "ο ⦶ ⊖ 𝕆 𝕠 ⦷ “"), + ("‘ ⦹ ⊕ ⩔ ∨ ↻ ⩝ ℴ ℴ", "‘ ⦹ ⊕ ⩔ ∨ ↻ ⩝ ℴ ℴ"), + ("ª ª º º ⊶ ⩖ ⩗ ⩛ Ⓢ 𝒪 ℴ", "ª ª º º ⊶ ⩖ ⩗ ⩛ Ⓢ 𝒪 ℴ"), + ("Ø ø Ø ø ⊘ Õ õ Õ õ", "Ø ø Ø ø ⊘ Õ õ Õ õ"), + ("⨷ ⊗ ⨶ Ö ö Ö ö ⌽ ‾", "⨷ ⊗ ⨶ Ö ö Ö ö ⌽ ‾"), + ("⏞ ⎴ ⏜ ∥ ¶ ¶ ∥", "⏞ ⎴ ⏜ ∥ ¶ ¶ ∥"), + ("⫳ ⫽ ∂ ∂ П п % . ‰", "⫳ ⫽ ∂ ∂ П п % . ‰"), + ("⊥ ‱ 𝔓 𝔭 Φ φ ϕ ℳ ☎ Π π", "⊥ ‱ 𝔓 𝔭 Φ φ ϕ ℳ ☎ Π π"), + ("⋔ ϖ ℏ ℎ ℏ + ⨣ ⊞", "⋔ ϖ ℏ ℎ ℏ + ⨣ ⊞"), + ("⨢ ∔ ⨥ ⩲ ± ± ± ⨦", "⨢ ∔ ⨥ ⩲ ± ± ± ⨦"), + ("⨧ ± ℌ ⨕ ℙ 𝕡 £ £ ⪻", "⨧ ± ℌ ⨕ ℙ 𝕡 £ £ ⪻"), + ("≺ ⪷ ≼ ⪳ ⪯ ≺ ⪷ ≼ ≺", "≺ ⪷ ≼ ⪳ ⪯ ≺ ⪷ ≼ ≺"), + ("⪯ ≼ ≾ ⪯ ⪹", "⪯ ≼ ≾ ⪯ ⪹"), + ("⪵ ⋨ ≾ ″ ′ ℙ ⪹ ⪵", "⪵ ⋨ ≾ ″ ′ ℙ ⪹ ⪵"), + ("⋨ ∏ ∏ ⌮ ⌒ ⌓ ∝ ∷", "⋨ ∏ ∏ ⌮ ⌒ ⌓ ∝ ∷"), + ("∝ ∝ ≾ ⊰ 𝒫 𝓅 Ψ ψ  ", "∝ ∝ ≾ ⊰ 𝒫 𝓅 Ψ ψ \u2008"), + ("𝔔 𝔮 ⨌ ℚ 𝕢 ⁗ 𝒬 𝓆 ℍ", "𝔔 𝔮 ⨌ ℚ 𝕢 ⁗ 𝒬 𝓆 ℍ"), + ("⨖ ? ≟ " " ⇛ ∽̱", "⨖ ? ≟ \" \" ⇛ ∽̱"), + ("Ŕ ŕ √ ⦳ ⟫ ⟩ ⦒ ⦥ ⟩", "Ŕ ŕ √ ⦳ ⟫ ⟩ ⦒ ⦥ ⟩"), + ("» » ↠ ⇒ → ⥵ ⇥ ⤠ ⤳", "» » ↠ ⇒ → ⥵ ⇥ ⤠ ⤳"), + ("⤞ ↪ ↬ ⥅ ⥴ ⤖ ↣ ↝", "⤞ ↪ ↬ ⥅ ⥴ ⤖ ↣ ↝"), + ("⤜ ⤚ ∶ ℚ ⤐ ⤏ ⤍ ❳ }", "⤜ ⤚ ∶ ℚ ⤐ ⤏ ⤍ ❳ }"), + ("] ⦌ ⦎ ⦐ Ř ř Ŗ ŗ", "] ⦌ ⦎ ⦐ Ř ř Ŗ ŗ"), + ("⌉ } Р р ⤷ ⥩ ” ” ↳ ℜ", "⌉ } Р р ⤷ ⥩ ” ” ↳ ℜ"), + ("ℜ ℛ ℜ ℝ ▭ ® ® ® ®", "ℜ ℛ ℜ ℝ ▭ ® ® ® ®"), + ("∋ ⇋ ⥯ ⥽ ⌋", "∋ ⇋ ⥯ ⥽ ⌋"), + ("ℜ 𝔯 ⥤ ⇁ ⇀ ⥬ Ρ ρ ϱ", "ℜ 𝔯 ⥤ ⇁ ⇀ ⥬ Ρ ρ ϱ"), + ("⟩ → ⇒ → ⇥", "⟩ → ⇒ → ⇥"), + ("⇄ ↣ ⌉ ⟧", "⇄ ↣ ⌉ ⟧"), + ("⥝ ⇂ ⥕ ⌋", "⥝ ⇂ ⥕ ⌋"), + ("⇁ ⇀ ⇄ ⇌", "⇁ ⇀ ⇄ ⇌"), + ("⇉ ↝ ⊢ ↦", "⇉ ↝ ⊢ ↦"), + ("⥛ ⋌ ⊳ ⧐", "⥛ ⋌ ⊳ ⧐"), + ("⊵ ⥏ ⥜ ↾", "⊵ ⥏ ⥜ ↾"), + ("⥔ ⇀ ⥓ ˚ ≓", "⥔ ⇀ ⥓ ˚ ≓"), + ("⇄ ⇌ ‏ ⎱ ⎱ ⫮ ⟭ ⇾ ⟧", "⇄ ⇌ \u200f ⎱ ⎱ ⫮ ⟭ ⇾ ⟧"), + ("⦆ ℝ 𝕣 ⨮ ⨵ ⥰ ) ⦔", "⦆ ℝ 𝕣 ⨮ ⨵ ⥰ ) ⦔"), + ("⨒ ⇉ ⇛ › ℛ 𝓇 ↱ ↱ ]", "⨒ ⇉ ⇛ › ℛ 𝓇 ↱ ↱ ]"), + ("’ ’ ⋌ ⋊ ▹ ⊵ ▸ ⧎", "’ ’ ⋌ ⋊ ▹ ⊵ ▸ ⧎"), + ("⧴ ⥨ ℞ Ś ś ‚ ⪼ ≻ ⪸", "⧴ ⥨ ℞ Ś ś ‚ ⪼ ≻ ⪸"), + ("Š š ≽ ⪴ ⪰ Ş ş Ŝ ŝ", "Š š ≽ ⪴ ⪰ Ş ş Ŝ ŝ"), + ("⪺ ⪶ ⋩ ⨓ ≿ С с ⋅ ⊡ ⩦", "⪺ ⪶ ⋩ ⨓ ≿ С с ⋅ ⊡ ⩦"), + ("⤥ ⇘ ↘ ↘ § § ; ⤩ ∖", "⤥ ⇘ ↘ ↘ § § ; ⤩ ∖"), + ("∖ ✶ 𝔖 𝔰 ⌢ ♯ Щ щ Ш ш", "∖ ✶ 𝔖 𝔰 ⌢ ♯ Щ щ Ш ш"), + ("↓ ← ∣ ∥ →", "↓ ← ∣ ∥ →"), + ("↑ ­ Σ σ ς ς ∼ ⩪", "↑ \u00AD Σ σ ς ς ∼ ⩪"), + ("≃ ≃ ⪞ ⪠ ⪝ ⪟ ≆ ⨤ ⥲", "≃ ≃ ⪞ ⪠ ⪝ ⪟ ≆ ⨤ ⥲"), + ("← ∘ ∖ ⨳ ⧤ ∣ ⌣ ⪪", "← ∘ ∖ ⨳ ⧤ ∣ ⌣ ⪪"), + ("⪬ ⪬︀ Ь ь / ⧄ ⌿ 𝕊 𝕤 ♠", "⪬ ⪬︀ Ь ь / ⧄ ⌿ 𝕊 𝕤 ♠"), + ("♠ ∥ ⊓ ⊓︀ ⊔ ⊔︀ √ ⊏ ⊑", "♠ ∥ ⊓ ⊓︀ ⊔ ⊔︀ √ ⊏ ⊑"), + ("⊏ ⊑ ⊐ ⊒ ⊐ ⊒ □", "⊏ ⊑ ⊐ ⊒ ⊐ ⊒ □"), + ("□ □ ⊓ ⊏ ⊑", "□ □ ⊓ ⊏ ⊑"), + ("⊐ ⊒ ⊔ ▪ ▪ →", "⊐ ⊒ ⊔ ▪ ▪ →"), + ("𝒮 𝓈 ∖ ⌣ ⋆ ⋆ ☆ ★", "𝒮 𝓈 ∖ ⌣ ⋆ ⋆ ☆ ★"), + ("ϵ ϕ ¯ ⋐ ⊂ ⪽ ⫅ ⊆", "ϵ ϕ ¯ ⋐ ⊂ ⪽ ⫅ ⊆"), + ("⫃ ⫁ ⫋ ⊊ ⪿ ⥹ ⋐ ⊂", "⫃ ⫁ ⫋ ⊊ ⪿ ⥹ ⋐ ⊂"), + ("⊆ ⫅ ⊆ ⊊ ⫋ ⫇", "⊆ ⫅ ⊆ ⊊ ⫋ ⫇"), + ("⫕ ⫓ ≻ ⪸ ≽ ≻ ⪰", "⫕ ⫓ ≻ ⪸ ≽ ≻ ⪰"), + ("≽ ≿ ⪰ ⪺ ⪶", "≽ ≿ ⪰ ⪺ ⪶"), + ("⋩ ≿ ∋ ∑ ∑ ♪ ¹ ¹ ² ²", "⋩ ≿ ∋ ∑ ∑ ♪ ¹ ¹ ² ²"), + ("³ ³ ⋑ ⊃ ⪾ ⫘ ⫆ ⊇ ⫄", "³ ³ ⋑ ⊃ ⪾ ⫘ ⫆ ⊇ ⫄"), + ("⊃ ⊇ ⟉ ⫗ ⥻ ⫂ ⫌", "⊃ ⊇ ⟉ ⫗ ⥻ ⫂ ⫌"), + ("⊋ ⫀ ⋑ ⊃ ⊇ ⫆ ⊋", "⊋ ⫀ ⋑ ⊃ ⊇ ⫆ ⊋"), + ("⫌ ⫈ ⫔ ⫖ ⤦ ⇙ ↙ ↙", "⫌ ⫈ ⫔ ⫖ ⤦ ⇙ ↙ ↙"), + ("⤪ ß ß ⌖ Τ τ ⎴ Ť ť", "⤪ ß ß ⌖ Τ τ ⎴ Ť ť"), + ("Ţ ţ Т т ⃛ ⌕ 𝔗 𝔱 ∴ ∴", "Ţ ţ Т т ⃛ ⌕ 𝔗 𝔱 ∴ ∴"), + ("∴ Θ θ ϑ ϑ ≈ ∼", "∴ Θ θ ϑ ϑ ≈ ∼"), + ("       ≈ ∼ Þ", "\u205F\u200A \u2009 \u2009 ≈ ∼ Þ"), + ("þ ∼ ˜ ≃ ≅ ≈ ×", "þ ∼ ˜ ≃ ≅ ≈ ×"), + ("× ⊠ ⨱ ⨰ ∭ ⤨ ⊤ ⌶ ⫱", "× ⊠ ⨱ ⨰ ∭ ⤨ ⊤ ⌶ ⫱"), + ("𝕋 𝕥 ⫚ ⤩ ‴ ™ ™ ▵", "𝕋 𝕥 ⫚ ⤩ ‴ ™ ™ ▵"), + ("▿ ◃ ⊴ ≜ ▹", "▿ ◃ ⊴ ≜ ▹"), + ("⊵ ◬ ≜ ⨺ ⃛ ⨹ ⧍", "⊵ ◬ ≜ ⨺ ⃛ ⨹ ⧍"), + ("⨻ ⏢ 𝒯 𝓉 Ц ц Ћ ћ Ŧ", "⨻ ⏢ 𝒯 𝓉 Ц ц Ћ ћ Ŧ"), + ("ŧ ≬ ↞ ↠ Ú ú", "ŧ ≬ ↞ ↠ Ú ú"), + ("Ú ú ↟ ⇑ ↑ ⥉ Ў ў Ŭ", "Ú ú ↟ ⇑ ↑ ⥉ Ў ў Ŭ"), + ("ŭ Û û Û û У у ⇅ Ű ű", "ŭ Û û Û û У у ⇅ Ű ű"), + ("⥮ ⥾ 𝔘 𝔲 Ù ù Ù ù ⥣", "⥮ ⥾ 𝔘 𝔲 Ù ù Ù ù ⥣"), + ("↿ ↾ ▀ ⌜ ⌜ ⌏ ◸ Ū ū", "↿ ↾ ▀ ⌜ ⌜ ⌏ ◸ Ū ū"), + ("¨ ¨ _ ⏟ ⎵ ⏝ ⋃", "¨ ¨ _ ⏟ ⎵ ⏝ ⋃"), + ("⊎ Ų ų 𝕌 𝕦 ↑ ⇑ ↑", "⊎ Ų ų 𝕌 𝕦 ↑ ⇑ ↑"), + ("⤒ ⇅ ↕ ⇕ ↕", "⤒ ⇅ ↕ ⇕ ↕"), + ("⥮ ↿ ↾ ⊎ ↖", "⥮ ↿ ↾ ⊎ ↖"), + ("↗ ϒ υ ϒ Υ υ ⊥", "↗ ϒ υ ϒ Υ υ ⊥"), + ("↥ ⇈ ⌝ ⌝ ⌎ Ů ů ◹", "↥ ⇈ ⌝ ⌝ ⌎ Ů ů ◹"), + ("𝒰 𝓊 ⋰ Ũ ũ ▵ ▴ ⇈ Ü ü", "𝒰 𝓊 ⋰ Ũ ũ ▵ ▴ ⇈ Ü ü"), + ("Ü ü ⦧ ⦜ ϵ ϰ ∅ ϕ", "Ü ü ⦧ ⦜ ϵ ϰ ∅ ϕ"), + ("ϖ ∝ ⇕ ↕ ϱ ς ⊊︀", "ϖ ∝ ⇕ ↕ ϱ ς ⊊︀"), + ("⫋︀ ⊋︀ ⫌︀ ϑ ⊲", "⫋︀ ⊋︀ ⫌︀ ϑ ⊲"), + ("⊳ ⫫ ⫨ ⫩ В в ⊫ ⊩ ⊨", "⊳ ⫫ ⫨ ⫩ В в ⊫ ⊩ ⊨"), + ("⊢ ⫦ ⋁ ∨ ⊻ ≚ ⋮ ‖ |", "⊢ ⫦ ⋁ ∨ ⊻ ≚ ⋮ ‖ |"), + ("‖ | ∣ | ❘ ≀", "‖ | ∣ | ❘ ≀"), + ("  𝔙 𝔳 ⊲ ⊂⃒ ⊃⃒ 𝕍 𝕧 ∝", "\u200A 𝔙 𝔳 ⊲ ⊂⃒ ⊃⃒ 𝕍 𝕧 ∝"), + ("⊳ 𝒱 𝓋 ⫋︀ ⊊︀ ⫌︀ ⊋︀ ⊪ ⦚", "⊳ 𝒱 𝓋 ⫋︀ ⊊︀ ⫌︀ ⊋︀ ⊪ ⦚"), + ("Ŵ ŵ ⩟ ⋀ ∧ ≙ ℘ 𝔚 𝔴 𝕎", "Ŵ ŵ ⩟ ⋀ ∧ ≙ ℘ 𝔚 𝔴 𝕎"), + ("𝕨 ℘ ≀ ≀ 𝒲 𝓌 ⋂ ◯ ⋃ ▽ 𝔛", "𝕨 ℘ ≀ ≀ 𝒲 𝓌 ⋂ ◯ ⋃ ▽ 𝔛"), + ("𝔵 ⟺ ⟷ Ξ ξ ⟸ ⟵ ⟼ ⋻ ⨀ 𝕏", "𝔵 ⟺ ⟷ Ξ ξ ⟸ ⟵ ⟼ ⋻ ⨀ 𝕏"), + ("𝕩 ⨁ ⨂ ⟹ ⟶ 𝒳 𝓍 ⨆ ⨄", "𝕩 ⨁ ⨂ ⟹ ⟶ 𝒳 𝓍 ⨆ ⨄"), + ("△ ⋁ ⋀ Ý ý Ý ý Я я", "△ ⋁ ⋀ Ý ý Ý ý Я я"), + ("Ŷ ŷ Ы ы ¥ ¥ 𝔜 𝔶 Ї ї 𝕐", "Ŷ ŷ Ы ы ¥ ¥ 𝔜 𝔶 Ї ї 𝕐"), + ("𝕪 𝒴 𝓎 Ю ю ÿ Ÿ ÿ Ź ź", "𝕪 𝒴 𝓎 Ю ю ÿ Ÿ ÿ Ź ź"), + ("Ž ž З з Ż ż ℨ ​ Ζ", "Ž ž З з Ż ż ℨ \u200b Ζ"), + ("ζ ℨ 𝔷 Ж ж ⇝ ℤ 𝕫 𝒵 𝓏 ‍", "ζ ℨ 𝔷 Ж ж ⇝ ℤ 𝕫 𝒵 𝓏 \u200d"), ] @pytest.mark.parametrize("input_string, expected_output", STRINGS_FOR_DECODE)