bind-marshal-0.1: test/verify_seraction_static_fixed_buffer.hs
-- Copyright : (C) 2009 Corey O'Connor
-- License : BSD-style (see the file LICENSE)
-- If I am not careful the generated constraints can take a *really* long time to discharge.
#define ONLY_SMALL_CASES 0
#define NO_LARGE_CASES 0
#define DISABLE_FLV_CASE 0
import Bind.Marshal.Prelude
import Bind.Marshal.Verify
import Bind.Marshal.Action.Base
import Bind.Marshal.Action.Monad.Static
import Bind.Marshal.Action.Static
import Bind.Marshal.Action.Verify
import Bind.Marshal.SerAction.Base
import Bind.Marshal.SerAction.Static
import Bind.Marshal.StdLib.Ser
import "monads-tf" Control.Monad.Trans
#if !DISABLE_FLV_CASE
import FLVHeader.Data
import FLVHeader.Ser
#endif
import Foreign.Marshal.Array
import Foreign.Marshal.Alloc
import Foreign.Ptr
import Foreign.Storable
import System.IO
t_0 = do
static_return ()
t_1 = do
ser (0 :: Int32)
static_return ()
t_2 (y :: Int32) = do
ser y
static_return ()
t_3 (x :: Int32) (y :: Int32) = do
ser x
ser y
static_return ()
t_4 = do
ser (0 :: Int32)
ser (1 :: Int32)
ser (2 :: Int32)
ser (3 :: Int32)
ser (4 :: Int32)
ser (5 :: Word32)
ser (6 :: Word32)
static_return ()
main = run_test $ do
storable_buffer <- liftIO $ mallocBytes 2048 :: Test ( Ptr Word8 )
ser_buffer <- liftIO $ mallocBytes 2048 :: Test ( Ptr Word8 )
let compare_buffer_bytes byte_size = do
assert_buffers_equal byte_size storable_buffer ser_buffer :: IO ()
returnM succeeded :: IO PropertyResult
verify "Serializes an Int32" $ \ ( i :: Int32 ) -> liftIOResult $ do
let storable_ptr = castPtr storable_buffer
poke storable_ptr i
let ser_buf = BufferRegion (ser_buffer)
(sizeOf i)
_ <- apply_ser_to_fixed_buffer (t_2 i) ser_buf
compare_buffer_bytes 4
verify "Serializes two Int32s" $ \ (i_0 :: Int32) (i_1 :: Int32) -> liftIOResult $ do
let b = castPtr storable_buffer
poke b i_0
let b' = b `plusPtr` sizeOf i_0
poke b' i_1
let ser_buf = BufferRegion (ser_buffer)
( sizeOf i_0 + sizeOf i_1 )
_ <- apply_ser_to_fixed_buffer (t_3 i_0 i_1) ser_buf
compare_buffer_bytes 8
#if !DISABLE_FLV_CASE
verify "Serializes FLVHeader" $ \ (h :: FLVHeader) -> liftIOResult $ do
let b = castPtr storable_buffer
poke b h
let ser_buf = BufferRegion ( ser_buffer )
( sizeOf h )
_ <- apply_ser_to_fixed_buffer (ser_flv_header h) ser_buf
compare_buffer_bytes $ sizeOf h
#endif
liftIO $ free storable_buffer :: Test()
liftIO $ free ser_buffer :: Test()
returnM () :: Test ()