diff options
Diffstat (limited to 'libraries/base/tests/perf/encodingAllocations.hs')
-rwxr-xr-x | libraries/base/tests/perf/encodingAllocations.hs | 30 |
1 files changed, 30 insertions, 0 deletions
diff --git a/libraries/base/tests/perf/encodingAllocations.hs b/libraries/base/tests/perf/encodingAllocations.hs new file mode 100755 index 0000000000..cd136963cb --- /dev/null +++ b/libraries/base/tests/perf/encodingAllocations.hs @@ -0,0 +1,30 @@ +{-# LANGUAGE MagicHash #-} +{-# LANGUAGE CPP #-} +{-# OPTIONS_GHC -dno-typeable-binds -O2 #-} + +module Main (main) where + +import System.IO +import Data.Bits +import GHC.Int +import GHC.Exts +import System.Environment +import Distribution.Simple.Utils + + +main :: IO () +main = withTempFile "." "encodingAllocations.tmp" (const $ loop 1000000) + +loop :: Int -> Handle -> IO () +loop 0 !_ = pure () +loop !n !h = do + hPutChar h $! dummy_char n + loop (n-1) h + +-- unsafe efficient version of `chr` +my_chr :: Int -> Char +my_chr (I# i) = C# (chr# i) + +-- return either a or b +dummy_char :: Int -> Char +dummy_char !i = my_chr ((i .&. 1) + 97) |