packages feed

bind-marshal-0.1: test/verify_seraction_static_fixed_buffer_perf.hs

-- Copyright   :  (C) 2009 Corey O'Connor
-- License     :  BSD-style (see the file LICENSE)

import Bind.Marshal.Prelude
import Bind.Marshal.Verify

import Bind.Marshal.Action.Base
import Bind.Marshal.SerAction.Base
import Bind.Marshal.SerAction.Static
import Bind.Marshal.StdLib.Ser

import FLVHeader.Data
import FLVHeader.Ser

import Control.DeepSeq
import "monads-tf" Control.Monad.Trans

import Foreign.Marshal.Alloc
import Foreign.Marshal.Array ( pokeArray, peekArray )
import Foreign.Ptr
import Foreign.Storable

import System.IO
import System.Random ( newStdGen, split )

import Test.QuickCheck.Gen ( Gen(..) )

{-# NOINLINE bench_ser #-}
bench_ser buffer flv_header = do
    let !b = BufferRegion buffer 9
    () <- apply_ser_to_fixed_buffer_unsafe_ (ser_flv_header flv_header) b
    returnM () :: IO ()

{-# NOINLINE bench_storable #-}
bench_storable buffer flv_header = do
    () <- poke (castPtr buffer) flv_header
    returnM () :: IO ()

main = run_test $ do
    buffer <- liftIO $ mallocBytes (50001 * 9 * 2) :: Test ( Ptr Word8 )
    verify_faster "SerAction.Static versus storable" perf_config
                  ( bench_ser buffer ) 
                  ( bench_storable buffer )
    liftIO $ free buffer :: Test()
    returnM () :: Test ()