loopbreaker-0.1.1.0: test/PragmaDetectionSpec.hs
{-# OPTIONS_GHC -O2 #-}
{-# LANGUAGE TemplateHaskell #-}
module PragmaDetectionSpec (spec) where
import TestUtils
------------------------------------------------------------------------------
spec :: Spec
spec = describe "plugin" $ do
it "should respect INLINE pragma" $ do
shouldFail $(inspectTest $ 'recursiveDefault === 'mutual)
shouldSucceed $(inspectTest $ 'recursiveOn === 'mutual)
------------------------------------------------------------------------------
recursiveDefault :: Int -> Int
recursiveDefault 0 = 1
recursiveDefault n = n * recursiveDefault (n - 1)
recursiveOn :: Int -> Int
recursiveOn 0 = 1
recursiveOn n = n * recursiveOn (n - 1)
{-# INLINE recursiveOn #-}
mutual :: Int -> Int
mutual 0 = 1
mutual n = n * mutual' (n - 1)
{-# INLINE mutual #-}
mutual' :: Int -> Int
mutual' = mutual
{-# NOINLINE mutual' #-}