module Data.Char.MathSpec ( spec ) where import Test.Hspec import Data.Char.Core import Data.Char.Math spec :: Spec spec = do describe "mathAlpha" do describe "Serif" do describe "NoItalic" do describe "NoBold" do let transform = mathAlpha Serif NoItalic NoBold it "A-Za-z" do transform <$> alpha `shouldBe` Just <$> alpha it "0-9 (char)" do transform <$> digits `shouldBe` (Nothing <$ digits) describe "Bold" do let transform = mathAlpha Serif NoItalic Bold it "A-Za-z" do transform <$> alpha `shouldBe` Just <$> "๐€๐๐‚๐ƒ๐„๐…๐†๐‡๐ˆ๐‰๐Š๐‹๐Œ๐๐Ž๐๐๐‘๐’๐“๐”๐•๐–๐—๐˜๐™๐š๐›๐œ๐๐ž๐Ÿ๐ ๐ก๐ข๐ฃ๐ค๐ฅ๐ฆ๐ง๐จ๐ฉ๐ช๐ซ๐ฌ๐ญ๐ฎ๐ฏ๐ฐ๐ฑ๐ฒ๐ณ" it "0-9 (char)" do transform <$> digits `shouldBe` (Nothing <$ digits) describe "Italic" do describe "NoBold" do let transform = mathAlpha Serif Italic NoBold it "A-Za-z" do transform <$> alpha `shouldBe` Just <$> "๐ด๐ต๐ถ๐ท๐ธ๐น๐บ๐ป๐ผ๐ฝ๐พ๐ฟ๐‘€๐‘๐‘‚๐‘ƒ๐‘„๐‘…๐‘†๐‘‡๐‘ˆ๐‘‰๐‘Š๐‘‹๐‘Œ๐‘๐‘Ž๐‘๐‘๐‘‘๐‘’๐‘“๐‘”โ„Ž๐‘–๐‘—๐‘˜๐‘™๐‘š๐‘›๐‘œ๐‘๐‘ž๐‘Ÿ๐‘ ๐‘ก๐‘ข๐‘ฃ๐‘ค๐‘ฅ๐‘ฆ๐‘ง" it "0-9 (char)" do transform <$> digits `shouldBe` (Nothing <$ digits) describe "Bold" do let transform = mathAlpha Serif Italic Bold it "A-Za-z" do transform <$> alpha `shouldBe` Just <$> "๐‘จ๐‘ฉ๐‘ช๐‘ซ๐‘ฌ๐‘ญ๐‘ฎ๐‘ฏ๐‘ฐ๐‘ฑ๐‘ฒ๐‘ณ๐‘ด๐‘ต๐‘ถ๐‘ท๐‘ธ๐‘น๐‘บ๐‘ป๐‘ผ๐‘ฝ๐‘พ๐‘ฟ๐’€๐’๐’‚๐’ƒ๐’„๐’…๐’†๐’‡๐’ˆ๐’‰๐’Š๐’‹๐’Œ๐’๐’Ž๐’๐’๐’‘๐’’๐’“๐’”๐’•๐’–๐’—๐’˜๐’™๐’š๐’›" it "0-9 (char)" do transform <$> digits `shouldBe` (Nothing <$ digits) describe "SansSerif" do describe "NoItalic" do describe "NoBold" do let transform = mathAlpha SansSerif NoItalic NoBold it "A-Za-z" do transform <$> alpha `shouldBe` Just <$> "๐– ๐–ก๐–ข๐–ฃ๐–ค๐–ฅ๐–ฆ๐–ง๐–จ๐–ฉ๐–ช๐–ซ๐–ฌ๐–ญ๐–ฎ๐–ฏ๐–ฐ๐–ฑ๐–ฒ๐–ณ๐–ด๐–ต๐–ถ๐–ท๐–ธ๐–น๐–บ๐–ป๐–ผ๐–ฝ๐–พ๐–ฟ๐—€๐—๐—‚๐—ƒ๐—„๐—…๐—†๐—‡๐—ˆ๐—‰๐—Š๐—‹๐—Œ๐—๐—Ž๐—๐—๐—‘๐—’๐—“" it "0-9 (char)" do transform <$> digits `shouldBe` (Nothing <$ digits) describe "Bold" do let transform = mathAlpha SansSerif NoItalic Bold it "A-Za-z" do transform <$> alpha `shouldBe` Just <$> "๐—”๐—•๐—–๐——๐—˜๐—™๐—š๐—›๐—œ๐—๐—ž๐—Ÿ๐— ๐—ก๐—ข๐—ฃ๐—ค๐—ฅ๐—ฆ๐—ง๐—จ๐—ฉ๐—ช๐—ซ๐—ฌ๐—ญ๐—ฎ๐—ฏ๐—ฐ๐—ฑ๐—ฒ๐—ณ๐—ด๐—ต๐—ถ๐—ท๐—ธ๐—น๐—บ๐—ป๐—ผ๐—ฝ๐—พ๐—ฟ๐˜€๐˜๐˜‚๐˜ƒ๐˜„๐˜…๐˜†๐˜‡" it "0-9 (char)" do transform <$> digits `shouldBe` (Nothing <$ digits) describe "Italic" do describe "NoBold" do let transform = mathAlpha SansSerif Italic NoBold it "A-Za-z" do transform <$> alpha `shouldBe` Just <$> "๐˜ˆ๐˜‰๐˜Š๐˜‹๐˜Œ๐˜๐˜Ž๐˜๐˜๐˜‘๐˜’๐˜“๐˜”๐˜•๐˜–๐˜—๐˜˜๐˜™๐˜š๐˜›๐˜œ๐˜๐˜ž๐˜Ÿ๐˜ ๐˜ก๐˜ข๐˜ฃ๐˜ค๐˜ฅ๐˜ฆ๐˜ง๐˜จ๐˜ฉ๐˜ช๐˜ซ๐˜ฌ๐˜ญ๐˜ฎ๐˜ฏ๐˜ฐ๐˜ฑ๐˜ฒ๐˜ณ๐˜ด๐˜ต๐˜ถ๐˜ท๐˜ธ๐˜น๐˜บ๐˜ป" it "0-9 (char)" do transform <$> digits `shouldBe` (Nothing <$ digits) describe "Bold" do let transform = mathAlpha SansSerif Italic Bold it "A-Za-z" do transform <$> alpha `shouldBe` Just <$> "๐˜ผ๐˜ฝ๐˜พ๐˜ฟ๐™€๐™๐™‚๐™ƒ๐™„๐™…๐™†๐™‡๐™ˆ๐™‰๐™Š๐™‹๐™Œ๐™๐™Ž๐™๐™๐™‘๐™’๐™“๐™”๐™•๐™–๐™—๐™˜๐™™๐™š๐™›๐™œ๐™๐™ž๐™Ÿ๐™ ๐™ก๐™ข๐™ฃ๐™ค๐™ฅ๐™ฆ๐™ง๐™จ๐™ฉ๐™ช๐™ซ๐™ฌ๐™ญ๐™ฎ๐™ฏ" it "0-9 (char)" do transform <$> digits `shouldBe` (Nothing <$ digits) describe "digit" do describe "Serif" do describe "NoBold" do let transform = digit Serif NoBold it "A-Za-z" do transform <$> alpha `shouldBe` (Nothing <$ alpha) it "0-9 (char)" do transform <$> digits `shouldBe` Just <$> digits it "0-9 (int)" do intToDigitChar Serif NoBold <$> [0..9] `shouldBe` Just <$> digits describe "Bold" do let transform = digit Serif Bold it "A-Za-z" do transform <$> alpha `shouldBe` (Nothing <$ alpha) it "0-9 (char)" do transform <$> digits `shouldBe` Just <$> "๐ŸŽ๐Ÿ๐Ÿ๐Ÿ‘๐Ÿ’๐Ÿ“๐Ÿ”๐Ÿ•๐Ÿ–๐Ÿ—" it "0-9 (int)" do intToDigitChar Serif Bold <$> [0..9] `shouldBe` Just <$> "๐ŸŽ๐Ÿ๐Ÿ๐Ÿ‘๐Ÿ’๐Ÿ“๐Ÿ”๐Ÿ•๐Ÿ–๐Ÿ—" describe "SansSerif" do describe "NoBold" do let transform = digit SansSerif NoBold it "A-Za-z" do transform <$> alpha `shouldBe` (Nothing <$ alpha) it "0-9 (char)" do transform <$> digits `shouldBe` Just <$> "๐Ÿข๐Ÿฃ๐Ÿค๐Ÿฅ๐Ÿฆ๐Ÿง๐Ÿจ๐Ÿฉ๐Ÿช๐Ÿซ" it "0-9 (int)" do intToDigitChar SansSerif NoBold <$> [0..9] `shouldBe` Just <$> "๐Ÿข๐Ÿฃ๐Ÿค๐Ÿฅ๐Ÿฆ๐Ÿง๐Ÿจ๐Ÿฉ๐Ÿช๐Ÿซ" describe "Bold" do let transform = digit SansSerif Bold it "A-Za-z" do transform <$> alpha `shouldBe` (Nothing <$ alpha) it "0-9 (char)" do transform <$> digits `shouldBe` Just <$> "๐Ÿฌ๐Ÿญ๐Ÿฎ๐Ÿฏ๐Ÿฐ๐Ÿฑ๐Ÿฒ๐Ÿณ๐Ÿด๐Ÿต" it "0-9 (int)" do intToDigitChar SansSerif Bold <$> [0..9] `shouldBe` Just <$> "๐Ÿฌ๐Ÿญ๐Ÿฎ๐Ÿฏ๐Ÿฐ๐Ÿฑ๐Ÿฒ๐Ÿณ๐Ÿด๐Ÿต" describe "doubleStruck" do it "A-Za-z" do doubleStruck <$> alpha `shouldBe` Just <$> "๐”ธ๐”นโ„‚๐”ป๐”ผ๐”ฝ๐”พโ„๐•€๐•๐•‚๐•ƒ๐•„โ„•๐•†โ„™โ„šโ„๐•Š๐•‹๐•Œ๐•๐•Ž๐•๐•โ„ค๐•’๐•“๐•”๐••๐•–๐•—๐•˜๐•™๐•š๐•›๐•œ๐•๐•ž๐•Ÿ๐• ๐•ก๐•ข๐•ฃ๐•ค๐•ฅ๐•ฆ๐•ง๐•จ๐•ฉ๐•ช๐•ซ" it "0-9 (char)" do doubleStruck <$> digits `shouldBe` Just <$> "๐Ÿ˜๐Ÿ™๐Ÿš๐Ÿ›๐Ÿœ๐Ÿ๐Ÿž๐ŸŸ๐Ÿ ๐Ÿก" it "0-9 (int)" do intToDigitDoubleStruck <$> [0..9] `shouldBe` Just <$> "๐Ÿ˜๐Ÿ™๐Ÿš๐Ÿ›๐Ÿœ๐Ÿ๐Ÿž๐ŸŸ๐Ÿ ๐Ÿก" describe "script" do describe "NoBold" do let transform = script NoBold it "A-Za-z" do transform <$> alpha `shouldBe` Just <$> "๐’œโ„ฌ๐’ž๐’Ÿโ„ฐโ„ฑ๐’ขโ„‹โ„๐’ฅ๐’ฆโ„’โ„ณ๐’ฉ๐’ช๐’ซ๐’ฌโ„›๐’ฎ๐’ฏ๐’ฐ๐’ฑ๐’ฒ๐’ณ๐’ด๐’ต๐’ถ๐’ท๐’ธ๐’นโ„ฏ๐’ปโ„Š๐’ฝ๐’พ๐’ฟ๐“€๐“๐“‚๐“ƒโ„ด๐“…๐“†๐“‡๐“ˆ๐“‰๐“Š๐“‹๐“Œ๐“๐“Ž๐“" it "0-9 (char)" do transform <$> digits `shouldBe` (Nothing <$ digits) describe "Bold" do let transform = script Bold it "A-Za-z" do transform <$> alpha `shouldBe` Just <$> "๐“๐“‘๐“’๐““๐“”๐“•๐“–๐“—๐“˜๐“™๐“š๐“›๐“œ๐“๐“ž๐“Ÿ๐“ ๐“ก๐“ข๐“ฃ๐“ค๐“ฅ๐“ฆ๐“ง๐“จ๐“ฉ๐“ช๐“ซ๐“ฌ๐“ญ๐“ฎ๐“ฏ๐“ฐ๐“ฑ๐“ฒ๐“ณ๐“ด๐“ต๐“ถ๐“ท๐“ธ๐“น๐“บ๐“ป๐“ผ๐“ฝ๐“พ๐“ฟ๐”€๐”๐”‚๐”ƒ" it "0-9 (char)" do transform <$> digits `shouldBe` (Nothing <$ digits) describe "fraktur" do describe "NoBold" do let transform = fraktur NoBold it "A-Za-z" do transform <$> alpha `shouldBe` Just <$> "๐”„๐”…โ„ญ๐”‡๐”ˆ๐”‰๐”Šโ„Œโ„‘๐”๐”Ž๐”๐”๐”‘๐”’๐”“๐””โ„œ๐”–๐”—๐”˜๐”™๐”š๐”›๐”œโ„จ๐”ž๐”Ÿ๐” ๐”ก๐”ข๐”ฃ๐”ค๐”ฅ๐”ฆ๐”ง๐”จ๐”ฉ๐”ช๐”ซ๐”ฌ๐”ญ๐”ฎ๐”ฏ๐”ฐ๐”ฑ๐”ฒ๐”ณ๐”ด๐”ต๐”ถ๐”ท" it "0-9 (char)" do transform <$> digits `shouldBe` (Nothing <$ digits) describe "Bold" do let transform = fraktur Bold it "A-Za-z" do transform <$> alpha `shouldBe` Just <$> "๐•ฌ๐•ญ๐•ฎ๐•ฏ๐•ฐ๐•ฑ๐•ฒ๐•ณ๐•ด๐•ต๐•ถ๐•ท๐•ธ๐•น๐•บ๐•ป๐•ผ๐•ฝ๐•พ๐•ฟ๐–€๐–๐–‚๐–ƒ๐–„๐–…๐–†๐–‡๐–ˆ๐–‰๐–Š๐–‹๐–Œ๐–๐–Ž๐–๐–๐–‘๐–’๐–“๐–”๐–•๐––๐–—๐–˜๐–™๐–š๐–›๐–œ๐–๐–ž๐–Ÿ" it "0-9 (char)" do transform <$> digits `shouldBe` (Nothing <$ digits) describe "monospace" do it "A-Za-z" do monospace <$> alpha `shouldBe` Just <$> "๐™ฐ๐™ฑ๐™ฒ๐™ณ๐™ด๐™ต๐™ถ๐™ท๐™ธ๐™น๐™บ๐™ป๐™ผ๐™ฝ๐™พ๐™ฟ๐š€๐š๐š‚๐šƒ๐š„๐š…๐š†๐š‡๐šˆ๐š‰๐šŠ๐š‹๐šŒ๐š๐šŽ๐š๐š๐š‘๐š’๐š“๐š”๐š•๐š–๐š—๐š˜๐š™๐šš๐š›๐šœ๐š๐šž๐šŸ๐š ๐šก๐šข๐šฃ" it "0-9 (char)" do monospace <$> digits `shouldBe` Just <$> "๐Ÿถ๐Ÿท๐Ÿธ๐Ÿน๐Ÿบ๐Ÿป๐Ÿผ๐Ÿฝ๐Ÿพ๐Ÿฟ" it "0-9 (int)" do intToDigitMonospace <$> [0..9] `shouldBe` Just <$> "๐Ÿถ๐Ÿท๐Ÿธ๐Ÿน๐Ÿบ๐Ÿป๐Ÿผ๐Ÿฝ๐Ÿพ๐Ÿฟ" where alpha :: String alpha = ['A'..'Z'] <> ['a'..'z'] digits :: String digits = ['0'..'9']