packages feed

elynx-seq-0.3.0: 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 ELynx.Data.Alphabet.Alphabet
import ELynx.Data.Sequence.Sequence
import ELynx.Import.Sequence.Fasta
import ELynx.Tools
import Test.Hspec

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'