packages feed

seitz-symbol-0.1.0.0: test/SetizSymbolSpec.hs

module SetizSymbolSpec where

import Test.Hspec

import Data.Matrix.SeitzSymbol
import Data.Matrix.AsXYZ (fromXYZ,prettyXYZ)
import Data.Matrix.SymmetryOperationsSymbols

spec :: Spec
spec = do

   describe "Data.Matrix.SeitzSymbol" $ do
      it "fromSeitzSymbol" $ do
        prettyXYZ <$> fromSeitzSymbolS "{ 1 | 0 0 0 }"
          `shouldBe` Right "x,y,z"
        prettyXYZ <$> fromSeitzSymbolS "{ 2 010 | 1/2 1/2 1/2 }"
          `shouldBe` Right "-x+1/2,y+1/2,-z+1/2"
        prettyXYZ <$> fromSeitzSymbolS "{ 3+ 111 | 1/2 1/2 1/2 }"
          `shouldBe` Right "z+1/2,x+1/2,y+1/2"
        prettyXYZ <$> fromSeitzSymbolS "{ -3+ 111 | 1/2 1/2 1/2 }"
          `shouldBe` Right "-z+1/2,-x+1/2,-y+1/2"
        prettyXYZ <$> fromSeitzSymbolS "{ m 100 | 0 0 0 }"
          `shouldBe`  Right "-x,y,z"
        ((liftError . fromSeitzSymbolS) "{ 2 010 | 1/2 1/2 1/2 }" >>= fromMatrix)
          `shouldBe` Right " 2 (0,1/2,0) 1/4,y,1/4"
        ((liftError . fromSeitzSymbolS) "{ 3+ 111 | 1/2 1/2 1/2 }" >>= fromMatrix)
          `shouldBe` Right " 3+(1/2,1/2,1/2) x,x,x"
        ((liftError . fromSeitzSymbolS) "{ -3+ 111 | 1/2 1/2 1/2 }" >>= fromMatrix)
          `shouldBe` Right "-3+ x,x,x; 1/4,1/4,1/4"
        ((liftError . fromSeitzSymbolS) "{ m 100 | 0 0 0 }" >>= fromMatrix)
          `shouldBe` Right " m  0,y,z"

      it "fromSeitzSymbolH" $ do
        prettyXYZ <$> fromSeitzSymbolHexS "{ m 100 | 0 0 0 }"
          `shouldBe` Right "y-x,y,z"
        prettyXYZ <$> fromSeitzSymbolHexS "{ m 120 | 0 0 0 }"
          `shouldBe` Right "x-y,-y,z"
        prettyXYZ <$> fromSeitzSymbolHexS "{ 2 100 | 0 0 0 }"
          `shouldBe` Right "x-y,-y,-z"
        ((liftError . fromSeitzSymbolHexS) "{ m 100 | 0 0 0 }" >>= fromMatrix)
          `shouldBe` Right " m  x,2x,z"
        ((liftError . fromSeitzSymbolHexS) "{ m 120 | 0 0 0 }" >>= fromMatrix)
          `shouldBe` Right " m  x,0,z"
        ((liftError . fromSeitzSymbolHexS) "{ 2 100 | 0 0 0 }" >>= fromMatrix)
          `shouldBe` Right " 2  x,0,0"

      it "toSeitzSymbol" $ do
        (toSeitzSymbolS . fromXYZ $ "x,y,z")
          `shouldBe` Just "{ 1 | 0 0 0 }"
        (toSeitzSymbolS . fromXYZ $ "-x+1/2,y+1/2,-z+1/2")
          `shouldBe` Just "{ 2 010 | 1/2 1/2 1/2 }"