module Main where
import Prelude hiding (choose)
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 Potoki.Cereal.Consume as Consume
import qualified Potoki.Cereal.Produce as Produce
import qualified Potoki.Cereal.Transform as Transform
import qualified Potoki.Consume as Consume
import qualified Potoki.Produce as Produce
import qualified Potoki.Transform as Transform
import qualified Potoki.IO as IO
import qualified System.Directory as IO
main =
defaultMain $
testGroup "All" $
[
testProperty "" $ let
workDir = "dist/test-temp"
file = workDir <> "/list"
gen :: Gen [Int]
gen = do
length <- choose (0, 100)
replicateM length (choose (-100, 100))
in forAll gen $ \ list -> unsafePerformIO $ do
IO.createDirectoryIfMissing True workDir
raiseIOException =<< IO.produceAndConsume (Produce.list list) (Consume.encodeToFile file)
restoredList <- raiseText =<< raiseIOException =<< IO.produceAndConsume (Produce.fileDecoded file) (right' (right' Consume.list))
return (list === restoredList)
]
raiseIOException = either throwIO return
raiseText = either (fail . show) return