packages feed

cobot-io 0.1.3.8 → 0.1.3.9

raw patch · 5 files changed

+89/−20 lines, 5 filesPVP: major bump suggested

API removals or changes: PVP suggests a major version bump

API changes (from Hackage documentation)

- Bio.MMTF.Decode.MessagePack: type MonadFail m = Monad m

Files

ChangeLog.md view
@@ -2,6 +2,10 @@  ## [Unreleased] +## [0.1.3.9] - 2020-10-27+### Fixed+- FASTA parser can now parse empty lines with spaces. + ## [0.1.3.8] - 2020-10-22 ### Fixed - A couple of issues, that caused parametrization failures, fixed in bond restoring for PDB format.
cobot-io.cabal view
@@ -4,10 +4,10 @@ -- -- see: https://github.com/sol/hpack ----- hash: c8e4ad988d6a9a2190936e54867ea81535c6b883ad6448fd8fbd16eab88715ca+-- hash: 2fa509bfbb994978869ae5dc69747b5693ec1c98d823c08ae3b850221ef52a80  name:           cobot-io-version:        0.1.3.8+version:        0.1.3.9 synopsis:       Biological data file formats and IO description:    Please see the README on GitHub at <https://github.com/biocad/cobot-io#readme> category:       Bio
src/Bio/FASTA/Parser.hs view
@@ -6,8 +6,8 @@ import Bio.FASTA.Type       (Fasta, FastaItem (..)) import Bio.Sequence         (BareSequence, bareSequence) import Data.Attoparsec.Text (Parser, char, choice, endOfInput, endOfLine, many', many1', satisfy,-                             takeWhile)-import Data.Char            (isLetter)+                             skipWhile, takeWhile)+import Data.Char            (isLetter, isSpace) import Data.Text            (Text, strip) import Prelude              hiding (takeWhile) @@ -20,7 +20,7 @@ fastaPGeneric = many' . item  item :: (Char -> Bool) -> Parser (FastaItem Char)-item predicate = FastaItem <$> seqName <*> fastaSeq predicate+item predicate = (FastaItem <$> seqName <*> fastaSeq predicate) <* skipWhile isSpace  seqName :: Parser Text seqName = strip <$> (char '>' *> tabs *> takeWhile (`notElem` ['\n', '\r']) <* tabs <* eol)@@ -39,4 +39,3 @@  tabs :: Parser () tabs = () <$ many' (char '\t')-
test/FASTASpec.hs view
@@ -2,12 +2,12 @@  module FASTASpec where -import           Bio.FASTA        (fromFile, toFile)-import           Bio.FASTA.Type   (Fasta, FastaItem (..))-import           Bio.Sequence     (bareSequence)-import           Prelude          hiding (readFile, writeFile)-import           System.Directory (removeFile)-import           Test.Hspec+import Bio.FASTA        (fromFile, toFile)+import Bio.FASTA.Type   (Fasta, FastaItem (..))+import Bio.Sequence     (bareSequence)+import Prelude          hiding (readFile, writeFile)+import System.Directory (removeFile)+import Test.Hspec  correctFasta :: Fasta Char correctFasta = [ FastaItem "3HMX:A|PDBID|CHAIN|SEQUENCE" (bareSequence "IWELKKDVYVVELDWYPDAPGEMVVLTCDTPEEDGITWTLDQSSEVLGSGKTLTIQVKEFGDAGQYTCHKGGEVLSHSLL")@@ -22,10 +22,11 @@     writeFile "test/FASTA/test.fasta"  parseFile :: FilePath -> Spec-parseFile path = describe "fromFile" $ do-    it "correctly parses fasta from file" $ do-        fasta <- fromFile path-        fasta `shouldBe` correctFasta+parseFile path = do+    describe "fromFile" $ do+        it "correctly parses fasta from file" $ do+            fasta <- fromFile path+            fasta `shouldBe` correctFasta  writeFile :: FilePath -> Spec writeFile path = describe "writeFile" $ do@@ -34,3 +35,4 @@         fasta <- fromFile path         removeFile path         fasta `shouldBe` correctFasta+
test/FastaParserSpec.hs view
@@ -2,10 +2,12 @@  module FastaParserSpec where -import           Bio.FASTA.Parser       (fastaP)-import           Bio.FASTA.Type         (FastaItem(..))-import           Bio.Sequence           (bareSequence)-import           Data.Attoparsec.Text   (parseOnly)+import           Bio.FASTA.Parser     (fastaP)+import           Bio.FASTA.Type       (Fasta, FastaItem (..))+import           Bio.Sequence         (bareSequence)+import           Data.Attoparsec.Text (endOfInput, parseOnly)+import           Data.Text            (Text)+import qualified Data.Text            as T import           Test.Hspec  fastaParserSpec :: Spec@@ -21,6 +23,7 @@     sequenceWithSeveralEndOfLineInSequence     sequenceWithTabsInName     sequenceWithTabsInSequence+    toughParserTests  emptyFasta :: Spec emptyFasta = describe "emptyFasta" $ do@@ -87,3 +90,64 @@     it "correctly parses sequence with tabs between sequence parts" $ do         let res = parseOnly fastaP ">this is my sequence\nIWELKKDVYVVELDWYPDAPGEMVVLTCDTPEEGITWTLDQSSE\t\t\nYYYYYYYYYYYYYYYYYYYYYYYY\t\n"         res `shouldBe` Right [FastaItem "this is my sequence" (bareSequence "IWELKKDVYVVELDWYPDAPGEMVVLTCDTPEEGITWTLDQSSEYYYYYYYYYYYYYYYYYYYYYYYY")]++toughParserTests :: Spec+toughParserTests = describe "various parser tests" $ do+    it "correctly parses empty lines" $ checkParser correctTest1 (Right correctAnswer)+    it "correctly parses empty lines with spaces" $ checkParser correctTest2 (Right correctAnswer)+    it "correctly parses empty lines with tabs" $ checkParser correctTest3 (Right correctAnswer)+    it "correctly fails to parse a name without >" $ checkParser incorrectTest1 (Left "endOfInput")+    it "correctly fails to parse a new sequence at the same line" $ checkParser incorrectTest2 (Left "endOfInput")++correctTest1 :: Text+correctTest1 = T.unlines+  [ ">test1"+  , "ABCDEF"+  , "GHIJKL"+  , ""+  , ">test2"+  , "ABCDEF"+  ]++correctTest2 :: Text+correctTest2 = T.unlines+  [ ">test1"+  , "ABCDEF"+  , "GHIJKL"+  , " "+  , ">test2"+  , "ABCDEF"+  ]++correctTest3 :: Text+correctTest3 = T.unlines+  [ ">test1"+  , "ABCDEF"+  , "GHIJKL"+  , "\t"+  , ">test2"+  , "ABCDEF"+  ]++incorrectTest1 :: Text+incorrectTest1 = T.unlines+  [ "test1"+  , "ABCDEF"+  , "GHIJKL"+  , ">test2"+  , "ABCDEF"+  ]++incorrectTest2 :: Text+incorrectTest2 = T.unlines+  [ ">test1"+  , "ABCDEF"+  , "GHIJKL >test2"+  , "ABCDEF"+  ]++correctAnswer :: Fasta Char+correctAnswer = [FastaItem "test1" (bareSequence "ABCDEFGHIJKL"), FastaItem "test2" (bareSequence "ABCDEF")]++checkParser :: Text -> Either String (Fasta Char) -> Expectation+checkParser source expectation = parseOnly (fastaP <* endOfInput) source `shouldBe` expectation