module ParseSpec where
import Test.Hspec
import Control.Exception (evaluate)
import Text.ParserCombinators.Parsec
import Data.Matrix.SymmetryOperationsSymbols.Parser
import Data.Matrix.SymmetryOperationsSymbols.Symbol
parseSymmetryOperation' :: String -> Maybe (Symbol,String,String,String)
parseSymmetryOperation' st = case parse (symmetryElement return) st st of
Right a -> Just a
Left _ -> Nothing
spec :: Spec
spec = do
describe "Data.Matrix.SymmetryOperationsSymbols.Parse.parseSymmetryOperation" $ do
it "parse ' 1 ' is just something" $ do
parseSymmetryOperation' " 1 " `shouldBe` Just (Id,"","","")
it "parse ' -1 0,0,0' is just something" $ do
parseSymmetryOperation' " -1 0,0,0" `shouldBe` Just (Inv,"","0,0,0","")
it "parse ' -1 0,0,0; 0,0,0' is nothing" $ do
parseSymmetryOperation' " -1 0,0,0; 0,0,0" `shouldBe` Nothing
it "parse ' -3- 0,0,0; 0,0,0' is just something" $ do
parseSymmetryOperation' " -3- 0,0,0; 0,0,0" `shouldBe` Just (RI3,"-","0,0,0","0,0,0")
it "parse ' -3 0,0,0; 0,0,0' is nothing" $ do
parseSymmetryOperation' " -2 0,0,0; 0,0,0" `shouldBe` Nothing
it "parse ' -3 x,y,z; 0,0,0' is nothing" $ do
parseSymmetryOperation' " -2 x,y,z; 0,0,0" `shouldBe` Nothing
it "parse ' -3 0,0,0; x,y,z' is nothing" $ do
parseSymmetryOperation' " -2 0,0,0; x,y,z" `shouldBe` Nothing
it "parse ' 2 (0,0,0) x,y,z' is nothing" $ do
parseSymmetryOperation' " 2 (0,0,0) x,y,z" `shouldBe` Just (R2,"","0,0,0","x,y,z")
it "parse ' 3+ (0,0,0) x,y,z ' is nothing" $ do
parseSymmetryOperation' " 3+ (0,0,0) x,y,z" `shouldBe` Just (R3,"+","0,0,0","x,y,z")
it "parse ' 6- (0,0,0) x,y,z ' is nothing" $ do
parseSymmetryOperation' " 6- (0,0,0) x,y,z " `shouldBe` Just (R6,"-","0,0,0","x,y,z")
it "parse ' 6- (x,y,z) x,y,z ' is nothing" $ do
parseSymmetryOperation' " 6- (x,y,z) x,y,z " `shouldBe` Nothing
-- 理想的にははじきたいけれど、現段階では保留
-- it "parse ' 6- (0,0,0) 0,0,0 ' is nothing" $ do
-- parseSymmetryOperation " 6- (0,0,0) 0,0,0 " `shouldBe` Nothing
it "parse ' g (0,0,0) x,y,z ' is nothing" $ do
parseSymmetryOperation' " g (0,0,0) x,y,z " `shouldBe` Just (G,"","0,0,0","x,y,z")
it "parse ' g ( 0, 0, 0 ) x, y, z ' is nothing" $ do
parseSymmetryOperation' " g ( 0, 0, 0 ) x, y, z " `shouldBe` Just (G,"","0,0,0","x,y,z")
it "parse ' m x,y,z ' is nothing" $ do
parseSymmetryOperation' " m x,y,z " `shouldBe` Just (M,"","","x,y,z")
it "parse ' a x,y,z ' is nothing" $ do
parseSymmetryOperation' " a x,y,z " `shouldBe` Just (A,"","","x,y,z")
it "parse ' m (0,0,0) x,y,z ' is nothing" $ do
parseSymmetryOperation' " m (0,0,0) x,y,z " `shouldBe` Nothing
it "parse ' a (0,0,0) x,y,z ' is nothing" $ do
parseSymmetryOperation' " a (0,0,0) x,y,z " `shouldBe` Nothing