packages feed

potoki-cereal-0.3.0.1: test/Main.hs

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