sequence-formats-1.3.2.1: src-tests/SequenceFormats/FreqSum/Test.hs
{-# LANGUAGE OverloadedStrings #-}
module SequenceFormats.FreqSum.Test (fsReadTest, fsWriteTest) where
import SequenceFormats.FreqSum (readFreqSumFile, printFreqSumFile, FreqSumEntry(..),
FreqSumHeader(..))
import SequenceFormats.Utils (Chrom(..))
import Control.Foldl (purely, list)
import Control.Monad.IO.Class (liftIO)
import Pipes (each, runEffect, (>->))
import qualified Pipes.Prelude as P
import Pipes.Safe (runSafeT)
import Test.Tasty.HUnit (Assertion, assertEqual)
fsReadTest :: Assertion
fsReadTest = runSafeT $ do
let fsFile = "testDat/example.freqsum"
(fsHeader, fsProd) <- readFreqSumFile fsFile
liftIO $ assertEqual "fsReadTest_assertIndEntries" testDatFsHeader fsHeader
fsEntries <- purely P.fold list fsProd
liftIO $ assertEqual "fsReadTest_assertFsEntries" testDatFsEntries fsEntries
fsWriteTest :: Assertion
fsWriteTest = do
let fn = "/tmp/freqSumWriteTest.txt"
testDatFsProd = each testDatFsEntries
runSafeT . runEffect $ testDatFsProd >-> printFreqSumFile fn testDatFsHeader
runSafeT $ do
(fsHeader, fsProd) <- readFreqSumFile fn
liftIO $ assertEqual "fsWriteTest_assertIndEntries" testDatFsHeader fsHeader
fsEntries <- purely P.fold list fsProd
liftIO $ assertEqual "fsWriteTest_assertFsEntries" testDatFsEntries fsEntries
testDatFsHeader :: FreqSumHeader
testDatFsHeader = FreqSumHeader names numbers
where
names = ["SAMPLE0", "SAMPLE1", "SAMPLE2", "SAMPLE3", "SAMPLE4"]
numbers = [2, 2, 2, 1, 1]
testDatFsEntries :: [FreqSumEntry]
testDatFsEntries = [
FreqSumEntry (Chrom "11") 0 'A' 'C' [Just 1, Just 1, Just 1, Just 1, Just 1],
FreqSumEntry (Chrom "11") 100000 'A' 'G' [Just 2, Just 1, Just 0, Just 0, Just 0],
FreqSumEntry (Chrom "11") 200000 'A' 'T' [Just 0, Just 1, Just 1, Just 1, Just 1],
FreqSumEntry (Chrom "11") 300000 'C' 'A' [Just 2, Nothing, Just 1, Just 0, Just 0],
FreqSumEntry (Chrom "11") 400000 'G' 'A' [Just 0, Just 1, Just 1, Just 1, Just 1],
FreqSumEntry (Chrom "11") 500000 'T' 'A' [Just 2, Just 2, Just 1, Nothing, Just 1],
FreqSumEntry (Chrom "11") 600000 'G' 'T' [Just 0, Just 0, Just 1, Nothing, Nothing]]