summaryrefslogtreecommitdiff
path: root/Types/UUID.hs
diff options
context:
space:
mode:
authorJoey Hess <joeyh@joeyh.name>2019-02-21 12:22:50 -0400
committerJoey Hess <joeyh@joeyh.name>2019-02-21 13:17:43 -0400
commit936aee6a60e86b5caa35675f0a50a58c173b9bbb (patch)
treec0eda4b1931b5e4e60bc88cfc8f6d20d5c791b1d /Types/UUID.hs
parent7c25cc77157b5d7b9a41096329c9a7e27dd5eafc (diff)
quickcheck property for parsing of content identifier logs
Diffstat (limited to 'Types/UUID.hs')
-rw-r--r--Types/UUID.hs10
1 files changed, 10 insertions, 0 deletions
diff --git a/Types/UUID.hs b/Types/UUID.hs
index 3910f34481..61bfab06dd 100644
--- a/Types/UUID.hs
+++ b/Types/UUID.hs
@@ -14,10 +14,12 @@ import qualified Data.Map as M
import qualified Data.UUID as U
import Data.Maybe
import Data.String
+import Data.Char
import Data.ByteString.Builder
import qualified Data.Semigroup as Sem
import Utility.FileSystemEncoding
+import Utility.QuickCheck
import qualified Utility.SimpleProtocol as Proto
-- A UUID is either an arbitrary opaque string, or UUID info may be missing.
@@ -81,3 +83,11 @@ type UUIDDescMap = M.Map UUID UUIDDesc
instance Proto.Serializable UUID where
serialize = fromUUID
deserialize = Just . toUUID
+
+instance Arbitrary UUID where
+ arbitrary = frequency [(1, return NoUUID), (3, UUID <$> arb)]
+ where
+ -- Avoid non-ascii because fully arbitrary
+ -- strings may not be encoded using the filesystem
+ -- encoding, which is normally applied to all input.
+ arb = encodeBS <$> arbitrary `suchThat` all isAscii