{-# 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