@@ -12,6 +12,8 @@ import qualified Data.UUID as U
1212import qualified Data.UUID.V1 as U
1313import qualified Data.UUID.V3 as U3
1414import qualified Data.UUID.V5 as U5
15+import Foreign (alloca, peek, poke)
16+import System.IO.Unsafe (unsafePerformIO)
1517import qualified Test.HUnit as H
1618import Test.HUnit hiding (Test)
1719import Test.QuickCheck hiding ((.&.))
@@ -166,6 +168,17 @@ toASCIIBytes_fromASCIIBytes :: U.UUID -> Bool
166168toASCIIBytes_fromASCIIBytes uuid =
167169 Just uuid == U.fromASCIIBytes (U.toASCIIBytes uuid)
168170
171+prop_storableRoundTrip :: Test
172+prop_storableRoundTrip =
173+ testProperty "Storeable round-trip" $ unsafePerformIO . prop
174+ where
175+ prop :: U.UUID -> IO Bool
176+ prop uuid =
177+ alloca $ \ptr -> do
178+ poke ptr uuid
179+ uuid2 <- peek ptr
180+ return $ uuid == uuid2
181+
169182main :: IO ()
170183main = do
171184 v1s <- replicateM 100 U.nextUUID
@@ -182,6 +195,7 @@ main = do
182195 , [ prop_stringRoundTrip,
183196 prop_readShowRoundTrip,
184197 prop_byteStringRoundTrip,
198+ prop_storableRoundTrip,
185199 prop_stringLength,
186200 prop_byteStringLength,
187201 prop_randomsDiffer,