✅ haskell: rna-transcription
This commit is contained in:
61
haskell/rna-transcription/test/Tests.hs
Normal file
61
haskell/rna-transcription/test/Tests.hs
Normal file
@ -0,0 +1,61 @@
|
||||
{-# LANGUAGE RecordWildCards #-}
|
||||
|
||||
import Data.Foldable (for_)
|
||||
import Test.Hspec (Spec, describe, it, shouldBe)
|
||||
import Test.Hspec.Runner (configFastFail, defaultConfig, hspecWith)
|
||||
|
||||
import DNA (toRNA)
|
||||
|
||||
main :: IO ()
|
||||
main = hspecWith defaultConfig {configFastFail = True} specs
|
||||
|
||||
specs :: Spec
|
||||
specs = describe "toRNA" $ for_ cases test
|
||||
where
|
||||
test Case{..} = it description $ toRNA dna `shouldBe` expected
|
||||
|
||||
data Case = Case { description :: String
|
||||
, dna :: String
|
||||
, expected :: Either Char String
|
||||
}
|
||||
|
||||
cases :: [Case]
|
||||
cases = [ Case { description = "Empty RNA sequence"
|
||||
, dna = ""
|
||||
, expected = Right ""
|
||||
}
|
||||
, Case { description = "RNA complement of cytosine is guanine"
|
||||
, dna = "C"
|
||||
, expected = Right "G"
|
||||
}
|
||||
, Case { description = "RNA complement of guanine is cytosine"
|
||||
, dna = "G"
|
||||
, expected = Right "C"
|
||||
}
|
||||
, Case { description = "RNA complement of thymine is adenine"
|
||||
, dna = "T"
|
||||
, expected = Right "A"
|
||||
}
|
||||
, Case { description = "RNA complement of adenine is uracil"
|
||||
, dna = "A"
|
||||
, expected = Right "U"
|
||||
}
|
||||
, Case { description = "RNA complement"
|
||||
, dna = "ACGTGGTCTTAA"
|
||||
, expected = Right "UGCACCAGAAUU"
|
||||
}
|
||||
, Case { description = "correctly handles invalid input (RNA instead of DNA)"
|
||||
, dna = "U"
|
||||
, expected = Left 'U'
|
||||
}
|
||||
, Case { description = "correctly handles completely invalid DNA input"
|
||||
, dna = "XXX"
|
||||
, expected = Left 'X'
|
||||
}
|
||||
, Case { description = "correctly handles partially invalid DNA input"
|
||||
, dna = "ACGTXXXCTTAA"
|
||||
, expected = Left 'X'
|
||||
}
|
||||
]
|
||||
|
||||
-- b02fedbb302892cb17dfa608df335b530ae2bc92
|
Reference in New Issue
Block a user