module Language.Fortran.AnalysisSpec where import Test.Hspec import TestUtil import Language.Fortran.Parser.Fortran77 import Language.Fortran.Lexer.FixedForm (initParseState) import Language.Fortran.ParserMonad (FortranVersion(..), evalParse, fromParseResultUnsafe) import Language.Fortran.AST import Language.Fortran.Analysis import Data.Graph.Inductive import Data.Graph.Inductive.PatriciaTree (Gr) import Data.List import Data.Maybe import qualified Data.ByteString.Char8 as B pParser :: String -> ProgramFile (Analysis ()) pParser source = initAnalysis . fromParseResultUnsafe $ extended77Parser (B.pack source) "" spec :: Spec spec = describe "Analysis" $ do describe "anal1" $ do it "lhsExprs" $ do let pf = stripAnalysis $ pParser programAnal1 lhsExprs pf `shouldMatchList'` programAnal1LhsExprs 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 = 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: