# tests/test_codec.py 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-мнемоники будет работать корректно. STRINGS_FOR_DECODE = [ # Тестовые строки для декодирования html-метаккода в uft-8 ("", ""), # Пустая строка ("Hello world!", "Hello world!"), # Строка ("Привет типограф!", "Привет типограф!"), # Строка русского текста ("< > & "", "< > & \""), # Самый простой набор HTML-мнемоников ("­", "\u00AD"), # Мягкий перенос ("    ‍‌", "\u00A0\u2002\u2003\u2009\u200D\u200C"), # Набор пробелов и невидимых символов ("– — ‐ ―", "– — ‐ ―"), # Набор тире и дефисов ("$ ¢ £ ¤ ¥ € ₽", "$ ¢ £ ¤ ¥ € ₽"), # Валютные символы # Набор из html.entities.name2codepoint ("Æ Á  À Α Å Ã Ä Ä", "Æ Á  À Α Å Ã Ä Ä"), ("Β Ç Χ ‡ Δ Ð É Ê È", "Β Ç Χ ‡ Δ Ð É Ê È"), ("Ε Η Ë Γ Í Î Ì Ι Ï", "Ε Η Ë Γ Í Î Ì Ι Ï"), ("Κ Λ Μ Ñ Ν Œ Ó Ô Ò Ö", "Κ Λ Μ Ñ Ν Œ Ó Ô Ò Ö"), ("Ω Ο Ø Õ Φ Π ″ Ψ Ρ Š", "Ω Ο Ø Õ Φ Π ″ Ψ Ρ Š"), ("Σ Þ Τ Θ Ú Û Ù Υ Ü", "Σ Þ Τ Θ Ú Û Ù Υ Ü"), ("Ξ Ý Ÿ Ζ á â ´ æ à", "Ξ Ý Ÿ Ζ á â ´ æ à"), ("ℵ α & ∧ ∠ ' å ≈ ã ä", "ℵ α & ∧ ∠ ' å ≈ ã ä"), ("„ β ¦ • ∩ ç ¸ ¢ χ ˆ", "„ β ¦ • ∩ ç ¸ ¢ χ ˆ"), ("♣ ≅ © ↵ ∪ ¤ ⇓ † ↓ °", "♣ ≅ © ↵ ∪ ¤ ⇓ † ↓ °"), ("δ ♦ ÷ é ê è ∅    ", "δ ♦ ÷ é ê è ∅ \u2003 \u2002"), ("ε ≡ η ð ë € ∃ ƒ ∀ ½", "ε ≡ η ð ë € ∃ ƒ ∀ ½"), ("¼ ¾ ⁄ γ ≥ > ⇔ ↔ ♥ …", "¼ ¾ ⁄ γ ≥ > ⇔ ↔ ♥ …"), ("í î ¡ ì ℑ ∞ ∫ ι ¿ ∈", "í î ¡ ì ℑ ∞ ∫ ι ¿ ∈"), ("ï κ ⇐ λ ⟨ « ← ⌈ “ ≤", "ï κ ⇐ λ ⟨ « ← ⌈ “ ≤"), ("⌊ ∗ ◊ ‎ ‹ ‘ < ¯ — µ", "⌊ ∗ ◊ \u200e ‹ ‘ < ¯ — µ"), ("· − μ ∇   – ≠ ∋ ¬ ∉", "· − μ ∇ \u00A0 – ≠ ∋ ¬ ∉"), ("⊄ ñ ν ó ô œ ò ‾ ω", "⊄ ñ ν ó ô œ ò ‾ ω"), ("ο ⊕ ∨ ª º ø õ ⊗ ö", "ο ⊕ ∨ ª º ø õ ⊗ ö"), ("¶ ∂ ‰ ⊥ φ π ϖ ± £ ′ ∏", "¶ ∂ ‰ ⊥ φ π ϖ ± £ ′ ∏"), ("∝ ψ " ⇒ √ ⟩ » → ⌉ ”", "∝ ψ \" ⇒ √ ⟩ » → ⌉ ”"), ("ℜ ® ⌋ ρ ‏ › ’ ‚ š", "ℜ ® ⌋ ρ \u200f › ’ ‚ š"), ("⋅ § ­ σ ς ∼ ♠ ⊂ ⊆ ∑", "⋅ § \u00AD σ ς ∼ ♠ ⊂ ⊆ ∑"), ("⊃ ¹ ² ³ ⊇ ß τ ∴ θ ϑ", "⊃ ¹ ² ³ ⊇ ß τ ∴ θ ϑ"), ("  þ ˜ × ™ ⇑ ú ↑ û", "\u2009 þ ˜ × ™ ⇑ ú ↑ û"), ("ù ¨ ϒ υ ü ℘ ξ ý ¥ ÿ", "ù ¨ ϒ υ ü ℘ ξ ý ¥ ÿ"), ("ζ ‍ ‌ + = %", "ζ \u200D \u200C + = %"), # Набор из 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) def test_html_mnemo_to_utf(input_string, expected_output): """ Проверяет ПОВЕДЕНИЕ: декодирование HTML-мнемоников в Unicode-строки. """ # Act (действие) - тестируем actual_output = codec.decode_to_unicode(input_string) # Assert (проверка) assert actual_output == expected_output STRINGS_FOR_ENCODE = [ # Тестовые строки для декодирования html-метаккода в uft-8 ("", ""), # Пустая строка ("Hello world!", "Hello world!"), # Строка ("Привет типограф!", "Привет типограф!"), # Строка русского текста ("< > & \"", "< > & ""), # Самый простой набор HTML-мнемоников ("\u00AD", "­"), # Мягкий перенос ("\u00A0\u2002\u2003\u2009\u200D\u200C", "    ‍‌"), # Набор пробелов и невидимых символов ("– — ‐ ―", "– — ‐ ―"), # Набор тире и дефисов ("$ ¢ £ ¤ ¥ € ₽", "$ ¢ £ ¤ ¥ € ₽"), # Валютные символы # Набор из html.entities.name2codepoint ("Æ Á  À Α Å Ã Ä Ä", "Æ Á  À Α Å Ã Ä Ä"), ("Β Ç Χ ‡ Δ Ð É Ê È", "Β Ç Χ ‡ Δ Ð É Ê È"), ("Ε Η Ë Γ Í Î Ì Ι Ï", "Ε Η Ë Γ Í Î Ì Ι Ï"), ("Κ Λ Μ Ñ Ν Œ Ó Ô Ò Ö", "Κ Λ Μ Ñ Ν Œ Ó Ô Ò Ö"), ("Ω Ο Ø Õ Φ Π ″ Ψ Ρ Š", "Ω Ο Ø Õ Φ Π ″ Ψ Ρ Š"), ("Σ Þ Τ Θ Ú Û Ù Υ Ü", "Σ Þ Τ Θ Ú Û Ù Υ Ü"), ("Ξ Ý Ÿ Ζ á â ´ æ à", "Ξ Ý Ÿ Ζ á â ´ æ à"), ("ℵ α & ∧ ∠ ' å ≈ ã ä", "ℵ α & ∧ ∠ ' å ≈ ã ä"), ("„ β ¦ • ∩ ç ¸ ¢ χ ˆ", "„ β ¦ • ∩ ç ¸ ¢ χ ˆ"), ("♣ ≅ © ↵ ∪ ¤ ⇓ † ↓ °", "♣ ≅ © ↵ ∪ ¤ ⇓ † ↓ °"), ("δ ♦ ÷ é ê è ∅ \u2003 \u2002", "δ ♦ ÷ é ê è ∅    "), ("ε ≡ η ð ë € ∃ ƒ ∀ ½", "ε ≡ η ð ë € ∃ ƒ ∀ ½"), ("¼ ¾ ⁄ γ ≥ > ⇔ ↔ ♥ …", "¼ ¾ ⁄ γ ≥ > ⇔ ↔ ♥ …"), ("í î ¡ ì ℑ ∞ ∫ ι ¿ ∈", "í î ¡ ì ℑ ∞ ∫ ι ¿ ∈"), ("ï κ ⇐ λ ⟨ « ← ⌈ “ ≤", "ï κ ⇐ λ ⟨ « ← ⌈ “ ≤"), ("⌊ ∗ ◊ \u200e ‹ ‘ < ¯ — µ", "⌊ ∗ ◊ ‎ ‹ ‘ < ¯ — µ"), ("· − μ ∇ \u00A0 – ≠ ∋ ¬ ∉", "· − μ ∇   – ≠ ∋ ¬ ∉"), ("⊄ ñ ν ó ô œ ò ‾ ω", "⊄ ñ ν ó ô œ ò ‾ ω"), ("ο ⊕ ∨ ª º ø õ ⊗ ö", "ο ⊕ ∨ ª º ø õ ⊗ ö"), ("¶ ∂ ‰ ⊥ φ π ϖ ± £ ′ ∏", "¶ ∂ ‰ ⊥ φ π ϖ ± £ ′ ∏"), ("∝ ψ \" ⇒ √ ⟩ » → ⌉ ”", "∝ ψ " ⇒ √ ⟩ » → ⌉ ”"), ("ℜ ® ⌋ ρ \u200f › ’ ‚ š", "ℜ ® ⌋ ρ ‏ › ’ ‚ š"), ("⋅ § \u00AD σ ς ∼ ♠ ⊂ ⊆ ∑", "⋅ § ­ σ ς ∼ ♠ ⊂ ⊆ ∑"), ("⊃ ¹ ² ³ ⊇ ß τ ∴ θ ϑ", "⊃ ¹ ² ³ ⊇ ß τ ∴ θ ϑ"), ("\u2009 þ ˜ × ™ ⇑ ú ↑ û", "  þ ˜ × ™ ⇑ ú ↑ û"), ("ù ¨ ϒ υ ü ℘ ξ ý ¥ ÿ", "ù ¨ ϒ υ ü ℘ ξ ý ¥ ÿ"), ("ζ \u200D \u200C + = %", "ζ ‍ ‌ + = %"), # Набор из html.entities.html5 ] @pytest.mark.parametrize("input_string, expected_output", STRINGS_FOR_ENCODE) def test_utf_to_html_mnemo(input_string, expected_output): """ Проверяет ПОВЕДЕНИЕ: кодирование Unicode-строк в HTML-мнемоники. """ # Act (действие) - тестируем actual_output = codec.encode_from_unicode(input_string, mode="mnemonic") # Assert (проверка) assert actual_output == expected_output