@@ -7,7 +7,8 @@ import Data.Maybe
77import Data.Word
88import qualified Data.UUID as U
99import qualified Data.UUID.V1 as U
10−import qualified Data.UUID.V5 as U
10+import qualified Data.UUID.V3 as U3
11+import qualified Data.UUID.V5 as U5
1112import Test.HUnit
1213import Test.QuickCheck
1314import System.IO
@@ -34,7 +35,7 @@ instance Arbitrary Word8 where
3435test_null :: Test
3536test_null = TestList [
3637 "nil is null" ~: assertBool "" (U.null U.nil),
37− "namespaceDNS is not null" ~: assertBool "" (not $ U.null U.namespaceDNS)
38+ "namespaceDNS is not null" ~: assertBool "" (not $ U.null U3.namespaceDNS)
3839 ]
3940
4041test_nil :: Test
@@ -62,13 +63,20 @@ test_v1 v1s = TestList [
6263 where testUUID :: (U.UUID -> Bool) -> Maybe U.UUID -> Test
6364 testUUID p u = maybe False p u ~? show u
6465
66+test_v3 :: Test
67+test_v3 = TestList [
68+ "V3 computation" ~:
69+ U3.generateNamed U3.namespaceDNS name @?= uV3
70+ ]
71+ where name = map (fromIntegral . ord) "www.widgets.com" :: [Word8]
72+ uV3 = fromJust $ U.fromString "3d813cbb-47fb-32ba-91df-831e1593ac29"
73+
6574test_v5 :: Test
6675test_v5 = TestList [
6776 "V5 computation" ~:
68− U.generateNamed U.namespaceDNS name @?= uV5
77+ U5.generateNamed U5.namespaceDNS name @?= uV5
6978 ]
7079 where name = map (fromIntegral . ord) "www.widgets.com" :: [Word8]
71− -- uV3 = fromJust $ U.fromString "3d813cbb-47fb-32ba-91df-831e1593ac29"
7280 uV5 = fromJust $ U.fromString "21f7f8de-8051-5b89-8680-0195ef798b6a"
7381
7482prop_stringRoundTrip :: Property
@@ -107,15 +115,25 @@ prop_randomsValid = label "Random valid" randomsValid
107115 where randomsValid :: U.UUID -> Bool
108116 randomsValid = isValidVersion 4
109117
118+prop_v3NotNull :: Property
119+prop_v3NotNull = label "V3 not null" v3NotNull
120+ where v3NotNull :: [Word8] -> Bool
121+ v3NotNull = not . U.null . U3.generateNamed U3.namespaceDNS
122+
123+prop_v3Valid :: Property
124+prop_v3Valid = label "V3 valid" v3Valid
125+ where v3Valid :: [Word8] -> Bool
126+ v3Valid = isValidVersion 3 . U3.generateNamed U3.namespaceDNS
127+
110128prop_v5NotNull :: Property
111129prop_v5NotNull = label "V5 not null" v5NotNull
112130 where v5NotNull :: [Word8] -> Bool
113− v5NotNull = not . U.null . U.generateNamed U.namespaceDNS
131+ v5NotNull = not . U.null . U5.generateNamed U5.namespaceDNS
114132
115133prop_v5Valid :: Property
116134prop_v5Valid = label "V5 valid" v5Valid
117135 where v5Valid :: [Word8] -> Bool
118− v5Valid = isValidVersion 5 . U.generateNamed U.namespaceDNS
136+ v5Valid = isValidVersion 5 . U5.generateNamed U5.namespaceDNS
119137
120138
121139main :: IO ()
@@ -126,6 +144,7 @@ main = do
126144 test_nil,
127145 test_conv,
128146 test_v1 v1s,
147+ test_v3,
129148 test_v5
130149 ])
131150 mapM_ quickCheck $ [
@@ -136,6 +155,8 @@ main = do
136155 prop_randomsDiffer,
137156 prop_randomNotNull,
138157 prop_randomsValid,
158+ prop_v3NotNull,
159+ prop_v3Valid,
139160 prop_v5NotNull,
140161 prop_v5Valid
141162 ]