@@ -7,7 +7,8 @@ import Data.Maybe
7import Data.Word
7import Data.Word
8import qualified Data.UUID as U
8import qualified Data.UUID as U
9import qualified Data.UUID.V1 as U
9import 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
11import Test.HUnit
12import Test.HUnit
12import Test.QuickCheck
13import Test.QuickCheck
13import System.IO
14import System.IO
@@ -34,7 +35,7 @@ instance Arbitrary Word8 where
34test_null :: Test
35test_null :: Test
35test_null = TestList [
36test_null = TestList [
36 "nil is null" ~: assertBool "" (U.null U.nil),
37 "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)
40test_nil :: Test
41test_nil :: Test
@@ -62,13 +63,20 @@ test_v1 v1s = TestList [
62 where testUUID :: (U.UUID -> Bool) -> Maybe U.UUID -> Test
63 where testUUID :: (U.UUID -> Bool) -> Maybe U.UUID -> Test
63 testUUID p u = maybe False p u ~? show u
64 testUUID p u = maybe False p u ~? show u
69+ U3.generateNamed U3.namespaceDNS name @?= uV3
71+ where name = map (fromIntegral . ord) "www.widgets.com" :: [Word8]
72+ uV3 = fromJust $ U.fromString "3d813cbb-47fb-32ba-91df-831e1593ac29"
65test_v5 :: Test
74test_v5 :: Test
66test_v5 = TestList [
75test_v5 = TestList [
67 "V5 computation" ~:
76 "V5 computation" ~:
68− U.generateNamed U.namespaceDNS name @?= uV5
77+ U5.generateNamed U5.namespaceDNS name @?= uV5
70 where name = map (fromIntegral . ord) "www.widgets.com" :: [Word8]
79 where name = map (fromIntegral . ord) "www.widgets.com" :: [Word8]
71− -- uV3 = fromJust $ U.fromString "3d813cbb-47fb-32ba-91df-831e1593ac29"
72 uV5 = fromJust $ U.fromString "21f7f8de-8051-5b89-8680-0195ef798b6a"
80 uV5 = fromJust $ U.fromString "21f7f8de-8051-5b89-8680-0195ef798b6a"
74prop_stringRoundTrip :: Property
82prop_stringRoundTrip :: Property
@@ -107,15 +115,25 @@ prop_randomsValid = label "Random valid" randomsValid
107 where randomsValid :: U.UUID -> Bool
115 where randomsValid :: U.UUID -> Bool
108 randomsValid = isValidVersion 4
116 randomsValid = isValidVersion 4
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
123+prop_v3Valid :: Property
124+prop_v3Valid = label "V3 valid" v3Valid
125+ where v3Valid :: [Word8] -> Bool
126+ v3Valid = isValidVersion 3 . U3.generateNamed U3.namespaceDNS
110prop_v5NotNull :: Property
128prop_v5NotNull :: Property
111prop_v5NotNull = label "V5 not null" v5NotNull
129prop_v5NotNull = label "V5 not null" v5NotNull
112 where v5NotNull :: [Word8] -> Bool
130 where v5NotNull :: [Word8] -> Bool
113− v5NotNull = not . U.null . U.generateNamed U.namespaceDNS
131+ v5NotNull = not . U.null . U5.generateNamed U5.namespaceDNS
115prop_v5Valid :: Property
133prop_v5Valid :: Property
116prop_v5Valid = label "V5 valid" v5Valid
134prop_v5Valid = label "V5 valid" v5Valid
117 where v5Valid :: [Word8] -> Bool
135 where v5Valid :: [Word8] -> Bool
118− v5Valid = isValidVersion 5 . U.generateNamed U.namespaceDNS
136+ v5Valid = isValidVersion 5 . U5.generateNamed U5.namespaceDNS
121main :: IO ()
139main :: IO ()
@@ -126,6 +144,7 @@ main = do
126 test_nil,
144 test_nil,
127 test_conv,
145 test_conv,
128 test_v1 v1s,
146 test_v1 v1s,
131 mapM_ quickCheck $ [
150 mapM_ quickCheck $ [
@@ -136,6 +155,8 @@ main = do
136 prop_randomsDiffer,
155 prop_randomsDiffer,
137 prop_randomNotNull,
156 prop_randomNotNull,
138 prop_randomsValid,
157 prop_randomsValid,
139 prop_v5NotNull,
160 prop_v5NotNull,
140 prop_v5Valid
161 prop_v5Valid