packages feed

isotope-0.3.3.0: test/Isotope/ParsersSpec.hs

{-# LANGUAGE QuasiQuotes #-}
module Isotope.ParsersSpec (spec) where

import Isotope
import Isotope.Parsers
import Test.Hspec
import Test.QuickCheck
import Data.Map (fromList)
import Text.Megaparsec

spec :: Spec
spec = do
  describe "elementSymbol" .
    it "Na" $
      parse (elementSymbol <* eof) "" "Na" `shouldBe` Right Na
  describe "subFormula" .
    it "C2" $
      parse (subFormula <* eof) "" "C2" `shouldBe` Right (C, 2)
  describe "molecularFormula" .
    it "CH2O" $
      parse (molecularFormula <* eof) "" "CH2O" `shouldBe` Right (MolecularFormula (fromList [(C, 1), (H, 2), (O, 1)]))
  describe "condensedFormula" .
    it "N(CH3)3" $
      parse (condensedFormula <* eof) "" "N(CH3)3" `shouldBe` Right (CondensedFormula {getCondensedFormula = [Left (MolecularFormula {getMolecularFormula = fromList [(N,1)]}),Right (CondensedFormula {getCondensedFormula = [Left (MolecularFormula {getMolecularFormula = fromList [(C,1)]}),Left (MolecularFormula {getMolecularFormula = fromList [(H,3)]})]},3)]})
  describe "mol" .
    it "QuasiQuoter for MolecularFormula should produce correct value" $
      [mol|C6H6|] `shouldBe`
      MolecularFormula {getMolecularFormula = fromList [(H,6),(C,6)]}
  describe "emp" .
    it "QuasiQuoter for EmpiricalFormula should produce correct value" $
      [emp|CH|] `shouldBe`
      EmpiricalFormula {getEmpiricalFormula = fromList [(H,1),(C,1)]}
  describe "ele" .
    it "QuasiQuoter for ElementalComposition should produce correct value" $
      [ele|C6H6|] `shouldBe`
      ElementalComposition {getElementalComposition = fromList [(H,6),(C,6)]}
  describe "con" .
    it "QuasiQuoter for CondensedFormula should produce the correct value" $
      [con|CH3(CH3)2CH3|] `shouldBe` CondensedFormula {getCondensedFormula = [Left (MolecularFormula {getMolecularFormula = fromList [(C,1)]}),Left (MolecularFormula {getMolecularFormula = fromList [(H,3)]}),Right (CondensedFormula {getCondensedFormula = [Left (MolecularFormula {getMolecularFormula = fromList [(C,1)]}),Left (MolecularFormula {getMolecularFormula = fromList [(H,3)]})]},2),Left (MolecularFormula {getMolecularFormula = fromList [(C,1)]}),Left (MolecularFormula {getMolecularFormula = fromList [(H,3)]})]}