module Main where
import Prelude
import Test.QuickCheck.Instances
import Test.Tasty
import Test.Tasty.Runners
import Test.Tasty.HUnit
import Test.Tasty.QuickCheck
import qualified Test.QuickCheck as QuickCheck
import qualified Test.QuickCheck.Property as QuickCheck
import qualified Data.ByteString as ByteString
import qualified Data.ByteString.Short as ShortByteString
import qualified Data.Serialize as Serialize
import qualified AsciiString
main =
defaultMain $
testGroup "All" $ let
listGen = do
length <- QuickCheck.choose (0, 100)
replicateM length (QuickCheck.choose (0, 127))
stringGen = fmap chr <$> listGen
byteStringGen = ByteString.pack <$> listGen
shortByteStringGen = ShortByteString.pack <$> listGen
asciiStringGen = AsciiString.fromSeptetList <$> listGen
in
[
testCase "Reduces the length" $ do
assertEqual "" 6 (AsciiString.length (AsciiString.fromByteString "123456"))
assertEqual "" 7 (AsciiString.length (AsciiString.fromByteString "1234567"))
assertEqual "" 8 (AsciiString.length (AsciiString.fromByteString "12345678"))
assertEqual "" 14 (AsciiString.length (AsciiString.fromByteString "12345678901234"))
,
testProperty "List roundtrip" $ forAll listGen $ \ list ->
list === AsciiString.toSeptetList (AsciiString.fromSeptetList list)
,
testProperty "ByteString Roundtrip" $ forAll byteStringGen $ \ byteString ->
byteString === AsciiString.toByteString (AsciiString.fromByteString byteString)
,
testProperty "ShortByteString Roundtrip" $ forAll shortByteStringGen $ \ sbs ->
sbs === AsciiString.toShortByteString (AsciiString.fromShortByteString sbs)
,
testProperty "String Roundtrip" $ forAll stringGen $ \ string ->
show string === show (fromString string :: AsciiString.AsciiString)
,
testProperty "Cereal Roundtrip" $ forAll asciiStringGen $ \ asciiString ->
Right asciiString === Serialize.decode (Serialize.encode asciiString)
]