fortran-src-0.2.1.1: test/Language/Fortran/AnalysisSpec.hs
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) "<unknown>"
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: