module Main (main) where import ASCII.Refinement (ASCII, asciiUnsafe) import qualified ASCII.Lift as Lift import qualified ASCII.Refinement as Refinement import ASCII.Char (Char (..)) import Control.Monad (Monad (..), when) import Data.Bool (not) import Data.Function (($)) import Data.Int (Int) import Data.List (map) import Data.Maybe (Maybe (..)) import Data.String (String) import Data.Text (Text) import Data.Word (Word8) import System.Exit (exitFailure) import System.IO (IO) import Hedgehog (Property, checkParallel, discover, property, withTests, (===)) main :: IO () main = checkParallel $$(discover) >>= \ok -> when (not ok) exitFailure prop_lift_letter :: Property prop_lift_letter = withTests 1 $ property $ (Lift.lift CapitalLetterA :: Word8) === 65 prop_lift_list :: Property prop_lift_list = withTests 1 $ property $ (Lift.lift [CapitalLetterH,SmallLetterI,ExclamationMark] :: Text) === "Hi!" prop_validate_char :: Property prop_validate_char = withTests 1 $ property $ (map Refinement.validateChar [-1, 65, 97, 128] :: [Maybe (ASCII Int)]) === [Nothing, Just (asciiUnsafe 65), Just (asciiUnsafe 97), Nothing] prop_from_char_list :: Property prop_from_char_list = withTests 1 $ property $ (Refinement.fromCharList [CapitalLetterH,SmallLetterI,ExclamationMark] :: ASCII Text) === asciiUnsafe "Hi!" prop_to_char_list :: Property prop_to_char_list = withTests 1 $ property $ Refinement.toCharList (Refinement.substituteString "Piñata" :: ASCII Text) === [CapitalLetterP, SmallLetterI, Substitute, SmallLetterA, SmallLetterT, SmallLetterA] prop_substitute_string :: Property prop_substitute_string = withTests 1 $ property $ (Refinement.substituteString "Cristóbal" :: ASCII Text) === asciiUnsafe "Crist\SUBbal" prop_validate_text :: Property prop_validate_text = withTests 1 $ property $ (map Refinement.validateString ["Hello", "Cristóbal"] :: [Maybe (ASCII Text)]) === [Just (asciiUnsafe "Hello"), Nothing] prop_validate_string :: Property prop_validate_string = withTests 1 $ property $ (map Refinement.validateString ["Hello", "Cristóbal"] :: [Maybe (ASCII String)]) === [Just (asciiUnsafe "Hello"), Nothing]