packages feed

compact-0.1.0.0: tests/compact-test.hs

{-# LANGUAGE TypeApplications #-}

import Data.Compact
import Data.Compact.Serialize
import Control.Exception
import System.IO
import System.Directory
import System.Mem
import Control.Monad

main = do
    tmp <- getTemporaryDirectory
    let val = ("hello", 1, 42, 42, Just 42) :: (String, Int, Int, Integer, Maybe Int)
    c <- compact val
    (fp, h) <- openTempFile tmp "compact.bin"
    hPutCompact h c
    hClose h
    performMajorGC
    r <- unsafeReadCompact @(String, Int, Int, Integer, Maybe Int) fp
    c' <- case r of
            Left err -> fail err
            Right x -> return x
    removeFile fp
    print (getCompact c')
    when (val /= getCompact c') $ fail "did not match"
    putStrLn "OK"