diff options
| author | Eugen Wissner <belka@caraus.de> | 2025-12-11 10:28:11 +0100 |
|---|---|---|
| committer | Eugen Wissner <belka@caraus.de> | 2025-12-11 10:28:11 +0100 |
| commit | 98329e0a3dd4f78b5d815ac3896272ec70904901 (patch) | |
| tree | 80f9c56cfe2ac20232358f236d32e84bd683be1b /Haskell-book/14/morse/tests/tests.hs | |
| parent | 3624c712d72d246f21d4e710cec7c11e052e0326 (diff) | |
| download | book-exercises-98329e0a3dd4f78b5d815ac3896272ec70904901.tar.gz | |
Add remaining haskell book exercises
Diffstat (limited to 'Haskell-book/14/morse/tests/tests.hs')
| -rw-r--r-- | Haskell-book/14/morse/tests/tests.hs | 86 |
1 files changed, 86 insertions, 0 deletions
diff --git a/Haskell-book/14/morse/tests/tests.hs b/Haskell-book/14/morse/tests/tests.hs new file mode 100644 index 0000000..b27d3b3 --- /dev/null +++ b/Haskell-book/14/morse/tests/tests.hs @@ -0,0 +1,86 @@ +module Main where + +import qualified Data.Map as M +import Morse +import Test.QuickCheck +import Test.QuickCheck.Gen (oneof) + +allowedChars :: [Char] +allowedChars = M.keys letterToMorse + +allowedMorse :: [Morse] +allowedMorse = M.elems letterToMorse + +charGen :: Gen Char +charGen = elements allowedChars + +morseGen :: Gen Morse +morseGen = elements allowedMorse + +prop_thereAndBackAgain :: Property +prop_thereAndBackAgain = + forAll charGen (\c -> ((charToMorse c) >>= morseToChar) == Just c) + +main' :: IO () +main' = quickCheck prop_thereAndBackAgain + +data Trivial = Trivial deriving (Eq, Show) + +trivialGen :: Gen Trivial +trivialGen = return Trivial + +instance Arbitrary Trivial where + arbitrary = trivialGen + +main :: IO () +main = do + sample trivialGen + +data Identity a = Identity a deriving (Eq, Show) + +identityGen :: Arbitrary a => Gen (Identity a) +identityGen = do + a <- arbitrary + return (Identity a) + +instance Arbitrary a => Arbitrary (Identity a) where + arbitrary = identityGen + +identityGenInt :: Gen (Identity Int) +identityGenInt = identityGen + +data Pair a b = Pair a b deriving (Eq, Show) + +pairGen :: (Arbitrary a, Arbitrary b) => Gen (Pair a b) +pairGen = do + a <- arbitrary + b <- arbitrary + return (Pair a b) + +instance (Arbitrary a, Arbitrary b) => Arbitrary (Pair a b) where + arbitrary = pairGen + +pairGenIntString :: Gen (Pair Int String) +pairGenIntString = pairGen + +data Sum a b = First a | Second b deriving (Eq, Show) + +sumGenEqual :: Gen (Sum Char Int) +sumGenEqual = do + a <- arbitrary + b <- arbitrary + oneof [return $ First a, + return $ Second b] + +sumGenCharInt :: Gen (Sum Char Int) +sumGenCharInt = sumGenEqual + +sumGenFirstPls :: (Arbitrary a, Arbitrary b) => Gen (Sum a b) +sumGenFirstPls = do + a <- arbitrary + b <- arbitrary + frequency [(10, return $ First a), + (1, return $ Second b)] + +sumGenCharIntFirst :: Gen (Sum Char Int) +sumGenCharIntFirst = sumGenFirstPls
\ No newline at end of file |
