on master help sign in
unit tests for V1 UUIDs
a12d7bdMark Lentczner
Data/UUID/V1.hs+4−4
@@ -55,9 +55,9 @@ nextUUID = do
55word64ToTimePieces :: Word64 -> (Word32, Word16, Word16)
55word64ToTimePieces :: Word64 -> (Word32, Word16, Word16)
56word64ToTimePieces w = (lo, mi, hi)
56word64ToTimePieces w = (lo, mi, hi)
57 where
57 where
58− lo = fromIntegral $ (w `shiftL` 32) `shiftR` 32
58+ lo = fromIntegral $ (w)
59− mi = fromIntegral $ (w `shiftL` 16) `shiftR` 48
59+ mi = fromIntegral $ (w `shiftR` 32)
60− hi = (fromIntegral $ w `shiftR` 48) `setBit` 15
60+ hi = fromIntegral $ (w `shiftR` 48 .&. 0x0fff .|. 0x1000)
61
61
62
62
63stepTime = do
63stepTime = do
@@ -66,7 +66,7 @@ stepTime = do
66 if h1 > h0
66 if h1 > h0
67 then do
67 then do
68 writeIORef state $ State 0 h1
68 writeIORef state $ State 0 h1
69− return $ Just (0, h1)
69+ return $ Just (c0, h1)
70 else do
70 else do
71 let
71 let
72 c1 = succ c0
72 c1 = succ c0
tests/TestUUID.hs+13
@@ -1,9 +1,12 @@
1+import Control.Monad (replicateM)
1import Data.Bits
2import Data.Bits
2import qualified Data.ByteString.Lazy as B
3import qualified Data.ByteString.Lazy as B
3import Data.Char (ord)
4import Data.Char (ord)
5+import Data.List (nub, (\\))
4import Data.Maybe
6import Data.Maybe
5import Data.Word
7import Data.Word
6import qualified Data.UUID as U
8import qualified Data.UUID as U
9+import qualified Data.UUID.V1 as U
7import qualified Data.UUID.V5 as U
10import qualified Data.UUID.V5 as U
8import Test.HUnit
11import Test.HUnit
9import Test.QuickCheck
12import Test.QuickCheck
@@ -47,6 +50,14 @@ test_conv = TestList [
47 where b16 = B.pack [1..16]
50 where b16 = B.pack [1..16]
48 s16 = "01020304-0506-0708-090a-0b0c0d0e0f10"
51 s16 = "01020304-0506-0708-090a-0b0c0d0e0f10"
49
52
53+test_v1 v1s = TestList [
54+ "V1 unique" ~: nub (v1s \\ nub v1s) @?= [],
55+ "V1 not null" ~: TestList $ map (testUUID (not . U.null)) v1s,
56+ "V1 valid" ~: TestList $ map (testUUID (isValidVersion 1)) v1s
57+ ]
58+ where testUUID :: (U.UUID -> Bool) -> Maybe U.UUID -> Test
59+ testUUID p u = maybe False p u ~? show u
60+
50test_v5 = TestList [
61test_v5 = TestList [
51 "V5 computation" ~:
62 "V5 computation" ~:
52 U.generateNamed U.namespaceDNS name @?= uV5
63 U.generateNamed U.namespaceDNS name @?= uV5
@@ -100,10 +111,12 @@ prop_v5Valid = label "V5 valid" v5Valid
100
111
101main :: IO ()
112main :: IO ()
102main = do
113main = do
114+ v1s <- replicateM 100 U.nextUUID
103 runTestText (putTextToHandle stderr False) (TestList [
115 runTestText (putTextToHandle stderr False) (TestList [
104 test_null,
116 test_null,
105 test_nil,
117 test_nil,
106 test_conv,
118 test_conv,
119+ test_v1 v1s,
107 test_v5
120 test_v5
108 ])
121 ])
109 mapM_ quickCheck $ [
122 mapM_ quickCheck $ [