hunk ./storablevector.cabal 2 -Version: 0.2.7 +Version: 0.2.7.1 hunk ./storablevector.cabal 54 - tag: 0.2.7 + tag: 0.2.7.1 addfile ./tests/Align.hs hunk ./tests/Align.hs 1 +{- | Test whether alignment of various malloc variants is correct. -} +module Main where + +import Foreign +import Control.Monad (liftM2, replicateM, ) + +data Vector = Vector Double Double + +instance Storable Vector where + sizeOf _ = 16 + alignment _ = 16 + peek p = + let q = castPtr p + in liftM2 Vector (peekElemOff q 0) (peekElemOff q 1) + poke p (Vector d0 d1) = + let q = castPtr p + in pokeElemOff q 0 d0 >> pokeElemOff q 1 d1 + + +testAlloc0, testAlloc1, testAlloc2 :: Storable a => IO (Ptr a) +testAlloc0 = alloca return +testAlloc1 = malloc -- incorrect on GHC-6.12.3 +testAlloc2 = mallocForeignPtrArray 1 >>= \fp -> withForeignPtr fp return + +main :: IO () +main = + mapM_ print =<< + fmap + (filter (\p -> mod (minusPtr (p :: Ptr Vector) nullPtr) 16 /= 0)) + (replicateM 30 testAlloc2)