@@ -1,9 +1,12 @@
1+import Control.Monad (replicateM)
12import Data.Bits
23import qualified Data.ByteString.Lazy as B
34import Data.Char (ord)
5+import Data.List (nub, (\\))
46import Data.Maybe
57import Data.Word
68import qualified Data.UUID as U
9+import qualified Data.UUID.V1 as U
710import qualified Data.UUID.V5 as U
811import Test.HUnit
912import Test.QuickCheck
@@ -47,6 +50,14 @@ test_conv = TestList [
4750 where b16 = B.pack [1..16]
4851 s16 = "01020304-0506-0708-090a-0b0c0d0e0f10"
4952
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+
5061test_v5 = TestList [
5162 "V5 computation" ~:
5263 U.generateNamed U.namespaceDNS name @?= uV5
@@ -100,10 +111,12 @@ prop_v5Valid = label "V5 valid" v5Valid
100111
101112main :: IO ()
102113main = do
114+ v1s <- replicateM 100 U.nextUUID
103115 runTestText (putTextToHandle stderr False) (TestList [
104116 test_null,
105117 test_nil,
106118 test_conv,
119+ test_v1 v1s,
107120 test_v5
108121 ])
109122 mapM_ quickCheck $ [