86 lines
2.8 KiB
Haskell
86 lines
2.8 KiB
Haskell
{-# LANGUAGE QuasiQuotes #-}
|
|
|
|
module AsymptoticPerfTests
|
|
( asymptoticPerfTest
|
|
)
|
|
where
|
|
|
|
|
|
|
|
import Language.Haskell.Brittany.Internal.Prelude
|
|
import Language.Haskell.Brittany.Internal.PreludeUtils
|
|
import qualified Control.Monad.Reader.Class as Reader.Class
|
|
import qualified Control.Monad.RWS.Class as RWS.Class
|
|
import qualified Control.Monad.State.Class as State.Class
|
|
import qualified Control.Monad.Trans.Except as ExceptT
|
|
import qualified Control.Monad.Trans.MultiRWS.Lazy as MultiRWSL
|
|
import qualified Control.Monad.Trans.MultiRWS.Strict as MultiRWSS
|
|
import qualified Control.Monad.Trans.State as State
|
|
import qualified Control.Monad.Trans.State.Lazy as StateL
|
|
import qualified Control.Monad.Trans.State.Strict as StateS
|
|
import qualified Control.Monad.Writer.Class as Writer.Class
|
|
import qualified Data.Bool as Bool
|
|
import qualified Data.ByteString
|
|
import qualified Data.ByteString as ByteString
|
|
import qualified Data.ByteString.Char8
|
|
import qualified Data.ByteString.Lazy as ByteStringL
|
|
import qualified Data.Coerce
|
|
import qualified Data.Data
|
|
import qualified Data.Either
|
|
import qualified Data.Foldable
|
|
import qualified Data.Foldable as Foldable
|
|
import qualified Data.IntMap.Lazy as IntMapL
|
|
import qualified Data.IntMap.Strict as IntMapS
|
|
import qualified Data.List.Extra
|
|
import qualified Data.Map as Map
|
|
import qualified Data.Maybe
|
|
import qualified Data.Semigroup as Semigroup
|
|
import qualified Data.Sequence as Seq
|
|
import qualified Data.Set as Set
|
|
import qualified Data.Strict.Maybe as Strict
|
|
import qualified Data.Text as Text
|
|
import qualified Data.Text.Encoding as Text.Encoding
|
|
import qualified Data.Text.IO as Text.IO
|
|
import qualified Data.Text.Lazy as TextL
|
|
import qualified Data.Text.Lazy.Encoding as TextL.Encoding
|
|
import qualified Data.Text.Lazy.IO as TextL.IO
|
|
import qualified GHC.OldList as List
|
|
import qualified Safe as Safe
|
|
import qualified System.Directory
|
|
import qualified System.IO
|
|
import qualified Text.PrettyPrint
|
|
import qualified Text.PrettyPrint.Annotated
|
|
import qualified Text.PrettyPrint.Annotated.HughesPJ
|
|
import qualified Text.PrettyPrint.Annotated.HughesPJClass
|
|
|
|
import Test.Hspec
|
|
|
|
import Language.Haskell.Brittany.Internal
|
|
|
|
import TestUtils
|
|
|
|
|
|
|
|
asymptoticPerfTest :: Spec
|
|
asymptoticPerfTest = do
|
|
it "1000 do statements"
|
|
$ roundTripEqualWithTimeout 1500000
|
|
$ (Text.pack "func = do\n")
|
|
<> Text.replicate 1000 (Text.pack " statement\n")
|
|
it "1000 do nestings"
|
|
$ roundTripEqualWithTimeout 4000000
|
|
$ (Text.pack "func = ")
|
|
<> mconcat
|
|
( [0 .. 999]
|
|
<&> \(i :: Int) ->
|
|
(Text.replicate (2 * i) (Text.pack " ") <> Text.pack "do\n")
|
|
)
|
|
<> Text.replicate 2000 (Text.pack " ")
|
|
<> Text.pack "return\n"
|
|
<> Text.replicate 2002 (Text.pack " ")
|
|
<> Text.pack "()"
|
|
it "1000 AppOps"
|
|
$ roundTripEqualWithTimeout 1000000
|
|
$ (Text.pack "func = expr")
|
|
<> Text.replicate 200 (Text.pack "\n . expr") --TODO
|