packages feed

HsHTSLib-1.9.2: tests/Main.hs

{-# LANGUAGE LambdaCase #-}
{-# LANGUAGE FlexibleContexts #-}
import Test.Tasty
import Test.Tasty.Golden
import Conduit

import Bio.HTS

main :: IO ()
main = defaultMain $ testGroup "Main"
    [ bamToSamTest
    , markDupTest ]

bamToSamTest :: TestTree
bamToSamTest = goldenVsFile "BAM Read/Write Test" expect output $
    bamFileToSamFile input output
  where
    input = "tests/data/example.bam"
    output = "tests/data/output.sam"
    expect = "tests/data/example.sam"

bamFileToSamFile :: FilePath  -- ^ Input bam file
                 -> FilePath  -- ^ Output Sam file
                 -> IO ()
bamFileToSamFile input output = do
    header <- getBamHeader input
    runResourceT $ runConduit $ streamBam input .|
        mapC (showSam . bamToSam header) .| unlinesAsciiC .| sinkFile output

markDupTest :: TestTree
markDupTest = testGroup "Mark duplicates"
    [ markDup "Single end" "tests/data/single_end_dedup.bam" 
        "tests/data/single_end.bam" "dedup.bam" 
    , markDup "Paired end" "tests/data/paired_end_dedup.bam" 
        "tests/data/paired_end.bam" "dedup.bam" 
    ]
  where
    markDup name expect input output = goldenVsFile name expect output $ do
        header <- getBamHeader input
        runResourceT $ runConduit $ streamBam input .|
            markDupBy (const Nothing) .|
            filterC (not . isDup . flag) .| sinkBam output header