packages feed

elynx-seq-0.2.1: test/ELynx/Data/Sequence/SequenceSpec.hs

{- |
Module      :  ELynx.Data.Sequence.SequenceSpec
Copyright   :  (c) Dominik Schrempf 2018
License     :  GPL-3.0-or-later

Maintainer  :  dominik.schrempf@gmail.com
Stability   :  unstable
Portability :  portable

Creation date: Fri Oct  5 14:25:42 2018.

-}

module ELynx.Data.Sequence.SequenceSpec
  ( spec
  )
where

import qualified Data.ByteString.Lazy.Char8    as L
import           Test.Hspec

import           ELynx.Data.Alphabet.Alphabet
import           ELynx.Data.Sequence.Sequence
import           ELynx.Import.Sequence.Fasta
import           ELynx.Tools

fastaDifferentLengthFN :: FilePath
fastaDifferentLengthFN = "data/NucleotideDifferentLength.fasta"

fastaDifferentLengthTrimmedFN :: FilePath
fastaDifferentLengthTrimmedFN = "data/NucleotideDifferentLengthTrimmed.fasta"

longestSequenceInFileBS :: L.ByteString
longestSequenceInFileBS = L.unlines
  $ map L.pack [">SEQUENCE_3", "ATTTAAAAAAACCCAAAACCCGGGCCCCGGGTTTTTTTA"]

longestSequenceInFile :: Sequence
longestSequenceInFile = parseByteStringWith "Fasta byte string"
                                            (fastaSequence DNA)
                                            longestSequenceInFileBS

spec :: Spec
spec = do
  describe "longest" $ it "finds the longest sequence" $ do
    ss <- parseFileWith (fasta DNA) fastaDifferentLengthFN
    longest ss `shouldBe` longestSequenceInFile

  describe "filterLongerThan"
    $ it "filters sequences that are longer than a specified length"
    $ do
        ss  <- parseFileWith (fasta DNA) fastaDifferentLengthFN
        ss' <- parseFileWith (fasta DNA) fastaDifferentLengthTrimmedFN
        filterLongerThan 10 ss `shouldBe` ss'