BiobaseFasta-0.3.0.0: tests/properties.hs
module Main where
import Control.Lens (view)
import Control.Monad.Trans.Resource (runResourceT, ResourceT(..), MonadResource)
import Data.ByteString.Streaming as BSS
import Data.ByteString.Streaming.Char8 as S8
import Data.ByteString.Streaming.Internal (ByteString(..))
import Data.Functor.Of
import Data.Void
import Prelude as P
import qualified Data.ByteString.Char8 as BS
import qualified Data.ByteString.Lazy.Char8 as BL8
import qualified Data.Text as T
import qualified Data.Text.Encoding as T
import qualified Test.Tasty.Golden as Golden
import Streaming as S
import Streaming.Prelude as SP
import System.FilePath (takeBaseName, replaceExtension)
import Test.Tasty
import Test.Tasty.HUnit
import Test.Tasty.QuickCheck as QC
import Test.Tasty.TH
import Biobase.Types.BioSequence
import Biobase.Types.Strand
import Biobase.Fasta.Streaming
import Biobase.Fasta.Strict
-- -- * golden tests
--
-- eachFasta (HeaderSize h) (OverlapSize o) (CurrentSize c p) = SP.yield (h,o,c)
--
-- readFastaFile ∷ FilePath → IO [(BS.ByteString,BS.ByteString,BS.ByteString)]
-- readFastaFile f = do
-- let s = 1000000
-- xs :> r ← runResourceT
-- $ SP.toList
-- $ streamingFasta (HeaderSize s) (OverlapSize 0) (CurrentSize s) eachFasta
-- $ S8.readFile f
-- return xs
--
-- lazyFastaOut = BL8.concat . P.map go
-- where go (h,o,c) = BL8.concat
-- [ BL8.fromStrict h
-- , BL8.pack "\n"
-- , BL8.fromStrict o
-- , BL8.pack "\n"
-- , BL8.fromStrict c
-- , BL8.pack "\n"
-- ]
--
-- goldenTests ∷ IO TestTree
-- goldenTests = do
-- fastaFiles ← Golden.findByExtension [".fa"] "./tests/"
-- return $ testGroup "readFastaFile golden tests"
-- [ Golden.goldenVsString
-- (takeBaseName fastaFile) -- test name
-- goldenFile -- golden file path
-- (lazyFastaOut <$> readFastaFile fastaFile) -- action whose result is tested
-- | fastaFile <- fastaFiles
-- , let goldenFile = replaceExtension fastaFile ".fa-golden"
-- ]
-- * unit tests
smallInlineFasta = P.unlines
[ ">Aaaa"
, "123"
, ">Bbbb"
, "4567"
, ">Cccc"
, "890"
]
smallTest ∷ Int → Int → Int → Of [BioSequenceWindow Void Void 1] ()
smallTest h o c = runIdentity
. toList
-- . SP.map (view windowedFasta)
. streamingFasta (HeaderSize h) (OverlapSize o) (CurrentSize c)
. S8.fromStrict
$ BS.pack smallInlineFasta
where go (HeaderSize h) (OverlapSize o) (CurrentSize c) = yield (h,o,c)
smallTest333 = testCase "3/3/3" $ do
let res :> r = smallTest 3 3 3
assertEqual "return is null" () r
assertEqual "length is 4" 4 (P.length res)
assertEqual "!!0" (BioSequenceWindow "Aaa" "" "123" "" PlusStrand 1) (res!!0)
assertEqual "!!1" (BioSequenceWindow "Bbb" "" "456" "" PlusStrand 1) (res!!1)
assertEqual "!!2" (BioSequenceWindow "Bbb" "456" "7" "" PlusStrand 4) (res!!2)
assertEqual "!!3" (BioSequenceWindow "Ccc" "" "890" "" PlusStrand 1) (res!!3)
--
assertEqual "!!0/Fasta" (Fasta "Aaa" "123") (view windowedFasta $ res!!0)
assertEqual "!!1/Fasta" (Fasta "Bbb" "456") (view windowedFasta $ res!!1)
assertEqual "!!2/Fasta" (Fasta "Bbb" "7" ) (view windowedFasta $ res!!2)
assertEqual "!!3/Fasta" (Fasta "Ccc" "890") (view windowedFasta $ res!!3)
main :: IO ()
main = do
-- gs ← goldenTests
defaultMain $ testGroup "all tests"
-- [ testGroup "Golden" [gs]
[ testGroup "unit tests" [smallTest333]
]