module Language.Fortran.AnalysisSpec where import Test.Hspec import TestUtil import Language.Fortran.Parser.Fortran77 import Language.Fortran.ParserMonad (fromParseResultUnsafe) import Language.Fortran.AST import Language.Fortran.Analysis import qualified Data.ByteString.Char8 as B pParser :: String -> ProgramFile (Analysis ()) pParser source = initAnalysis . fromParseResultUnsafe $ extended77Parser (B.pack source) "" spec :: Spec spec = describe "Analysis" $ describe "anal1" $ it "lhsExprs" $ do let pf = stripAnalysis $ pParser programAnal1 lhsExprs pf `shouldMatchList'` programAnal1LhsExprs programAnal1LhsExprs :: [Expression ()] programAnal1LhsExprs = [ ExpSubscript () u (ExpValue () u (ValVariable "a")) (AList () u [ ixSinGen 1 ]) , ExpSubscript () u (ExpValue () u (ValVariable "a")) (AList () u [ IxSingle () u Nothing $ ExpSubscript () u (varGen "a") (AList () u [ ixSinGen 2 ])]) , ExpSubscript () u (ExpValue () u (ValVariable "a")) (AList () u [ ixSinGen 4 ]) , ExpValue () u (ValVariable "f") , ExpSubscript () u (ExpValue () u (ValVariable "a")) (AList () u [ ixSinGen 6 ]) , ExpSubscript () u (ExpValue () u (ValVariable "a")) (AList () u [ ixSinGen 5 ]) ] programAnal1 :: String programAnal1 = unlines $ map (replicate 6 ' '++) [ "program anal1" , "integer a, f" , "dimension a(10)" , "a(1) = f(a(6))" , "a(a(2)) = a(10)" , "call s(1)" , "call s(a(4))" , "call s(f(a(5)))" , "end" , "subroutine s(x)" , "integer x" , "end" , "function f(x)" , "integer x, f" , "f = x" , "end" ] -- Local variables: -- mode: haskell -- haskell-program-name: "cabal repl test-suite:spec" -- End: