packages feed

sequence-formats-1.6.6.0: test/SequenceFormats/FastaSpec.hs

{-# LANGUAGE OverloadedStrings #-}
module SequenceFormats.FastaSpec (spec) where

import qualified Data.ByteString.Char8 as BS
import qualified Pipes.Prelude         as P
import           SequenceFormats.Fasta (loadFastaChrom)
import           SequenceFormats.Utils (Chrom (..))
import           System.IO             (IOMode (..), withFile)
import           Test.Hspec

spec :: Spec
spec = do
    testLoadFastaChrom

testLoadFastaChrom :: Spec
testLoadFastaChrom = around (withFile "testDat/example.fasta" ReadMode) $
    describe "loadFastaChrom" $
    do
      fastaSpec "short chrom" "chr1"
        "ACGACGACGACGGGGTTTAAAAAGGGTTTCCTCTCTCTCTGGG"

      fastaSpec "short chrom with junk after it" "chr2"
        "ACCAATTTCCCTTTAATATAAGACCCTTTCGGGGAAA"

      fastaSpec "long chrom" "chr4_random"
        "TTGAGAAAGAAATAATAATTTTATATAATTTAAAGGTTATTTAA"

      fastaSpec "long chrom with junk after it" "chr5_random"
        "AAAACTGAAAAAATGTGGTCACCTATGTTAGAACAACAAGGTTT"
  where
    fastaSpec desc chr testseq = it (fmtDesc desc) $ \h -> do
      fastaProd <- loadFastaChrom h (Chrom chr)
      fastaString <- BS.unpack . BS.concat <$> P.toListM fastaProd
      fastaString `shouldBe` testseq
    fmtDesc s = "should read the correct fasta string from file (" ++ s ++ ")"