stan-0.0.0.0: test/Test/Stan/Analysis/Infinite.hs
module Test.Stan.Analysis.Infinite
( analysisInfiniteSpec
) where
import Test.Hspec (Arg, Expectation, Spec, SpecWith, describe, it)
import Stan.Analysis (Analysis)
import Stan.Inspection (Inspection (..), sortById)
import Stan.Inspection.Infinite (infiniteInspectionsMap)
import Stan.NameMeta (NameMeta (..))
import Test.Stan.Analysis.Common (itShouldStr, observationAssert, unsafeNameMeta)
import qualified Data.Text as T
import qualified Stan.Inspection.Infinite as Stan
analysisInfiniteSpec :: Analysis -> Spec
analysisInfiniteSpec analysis = describe "Infinite functions" $ do
forM_ (zip (sortById infiniteInspectionsMap) [11, 14 ..]) checkObservationAuto
checkObservation Stan.stan0103 29 23 38
where
checkObservation :: Inspection -> Int -> Int -> Int -> SpecWith (Arg Expectation)
checkObservation ins l st = it (itShouldStr ins) .
observationAssert ["Infinite"] analysis ins l st
checkObservationAuto :: (Inspection, Int) -> SpecWith (Arg Expectation)
checkObservationAuto (ins@Inspection{..}, line) = checkObservation ins line start end
where
nameMeta :: NameMeta
nameMeta = unsafeNameMeta inspectionAnalysis
funLen, start, end :: Int
funLen = T.length $ nameMetaName nameMeta
start = funLen + 8
end = start + funLen