packages feed

kempe-0.1.1.0: test/Abi.hs

-- | This is to ensure consistency in the ABI.
module Abi ( backendGolden
           ) where

import           Control.Composition       ((.*))
import qualified Data.Text.Lazy            as TL
import           Data.Text.Lazy.Encoding   (encodeUtf8)
import           Data.Typeable             (Typeable)
import           Kempe.AST
import           Kempe.File
import           Kempe.Module
import           Prettyprinter             (defaultLayoutOptions, layoutPretty)
import           Prettyprinter.Render.Text (renderLazy)
import           Test.Tasty
import           Test.Tasty.Golden         (goldenVsString)

backendGolden :: TestTree
backendGolden =
    testGroup "IR goldens"
        [ goldenIR "test/data/abi.kmp" "test/golden/abi.ir"
        , goldenIR "lib/gaussian.kmp" "test/golden/gaussian.ir"
        -- not for ABI, to test it imports the right thing (transitively)
        , goldenIR "test/data/diamond/a.kmp" "test/golden/a.ir"
        ]

dumpIRLazyText :: Typeable a => Int -> Declarations a c b -> TL.Text
dumpIRLazyText = renderLazy . layoutPretty defaultLayoutOptions .* dumpIR

goldenIR :: FilePath
         -> FilePath
         -> TestTree
goldenIR fp out =
    goldenVsString fp out $
        do
            res <- parseProcess fp
            pure $ encodeUtf8 $ uncurry dumpIRLazyText res