module AsXYSpec where import Control.Exception (evaluate) import Test.Hspec import Data.Ratio import Data.Matrix import Data.Matrix.AsXYZ readTest str mat = do it ("read " ++ str) $ do fromXY str `shouldBe` mat readData = [ ("x,y+1", {- shouldBe -} fromLists [ [1,0,0], [0,1,1], [0,0,1]]), ("+x+y+2,+x+y+3", {- shouldBe -} fromLists [ [1,1,2], [1,1,3], [0,0,1]]) ] curryM f (a,b) = do f a b spec :: Spec spec = do describe "Data.Matrix.AsXY.fromXY" $ do it "read empty throws exception" $ do evaluate (fromXY "") `shouldThrow` anyException it "read a,b throws exception" $ do evaluate (fromXY "a,b") `shouldThrow` anyException it "read x,y throws exception" $ do evaluate (fromAB "x,y") `shouldThrow` anyException it "read x,y" $ do fromXY "x,y" `shouldBe` (identity 3) it "read X,Y" $ do fromXY "X,Y" `shouldBe` (identity 3) mapM_ (curryM readTest) readData it "read a,b" $ do fromAB "a,b" `shouldBe` (identity 3) it "read A,B" $ do fromAB "A,B" `shouldBe` (identity 3) it "row size" $ do (nrows . fromXY $ "x,y") `shouldBe` 3 it "col size" $ do (ncols . fromXY $ "x,y") `shouldBe` 3 describe "Data.Matrix.AsXYZ.prettyXYZ" $ do it "show 0 (2x2)" $ do prettyXY (zero 2 2) `shouldBe` "0,0" it "show 0 (3x3)" $ do prettyXY (zero 3 3) `shouldBe` "0,0" it "show 0 (3x4)" $ do prettyXY (zero 2 3) `shouldBe` "0,0" it "show 1 (2x2)" $ do prettyXY (identity 2) `shouldBe` "x,y" it "show 1 (2x3)" $ do prettyXY (submatrix 1 2 1 3 $ identity 3) `shouldBe` "x,y" it "show 1 (3x3)" $ do prettyXY (identity 3) `shouldBe` "x,y" it "positive first" $ do prettyXY (fromLists [[1,-1,-1],[-1,1,-1]]) `shouldBe` "x-y-1,y-x-1" it "number last" $ do prettyXY (fromLists [[-1,-1,-1],[-1,-1,1]]) `shouldBe` "-x-y-1,-x-y+1" describe "Data.Matrix.AsXYZ.prettyABC" $ do it "show 0" $ do prettyAB (zero 4 4) `shouldBe` "0,0" it "show 1" $ do prettyAB (identity 4) `shouldBe` "a,b"