genvalidity-text 0.1.0.0 → 0.1.0.1
raw patch · 3 files changed
+35/−19 lines, 3 filesdep +arraydep +validity-textPVP: major bump suggested
API removals or changes: PVP suggests a major version bump
Dependencies added: array, validity-text
API changes (from Hackage documentation)
- Data.GenValidity.Text: genUncheckedText :: Gen Text
+ Data.GenValidity.Text: instance Data.GenValidity.GenValidity Data.Text.Internal.Text
- Data.GenValidity.Text: textWithoutAnyOf :: [Char] -> Gen Text
+ Data.GenValidity.Text: textWithoutAnyOf :: String -> Gen Text
Files
- genvalidity-text.cabal +6/−4
- src/Data/GenValidity/Text.hs +26/−12
- test/Data/GenValidity/TextSpec.hs +3/−3
genvalidity-text.cabal view
@@ -1,5 +1,5 @@ name: genvalidity-text-version: 0.1.0.0+version: 0.1.0.1 synopsis: GenValidity support for Text description: Please see README.md homepage: https://github.com/NorfairKing/validity#readme@@ -16,10 +16,12 @@ hs-source-dirs: src exposed-modules: Data.GenValidity.Text build-depends: base < 5- , validity + , validity+ , validity-text , genvalidity- , text - , QuickCheck + , text+ , array+ , QuickCheck default-language: Haskell2010 test-suite genvalidity-text-test
src/Data/GenValidity/Text.hs view
@@ -1,34 +1,48 @@ module Data.GenValidity.Text where import Data.GenValidity+import Data.Validity.Text () import Test.QuickCheck -import Data.Text (Text)-import qualified Data.Text as T+import Control.Monad +import qualified Data.Text.Array as A+import Data.Text.Internal (Text(..))+import qualified Data.Text as T -genUncheckedText :: Gen Text-genUncheckedText = sized $ \n -> do- size <- upTo n- chars <- resize size $ genListOf arbitrary- return $ T.pack chars +instance GenValidity Text where+ genUnchecked = Text <$> uncheckedArray <*> arbitrary <*> arbitrary+ where+ uncheckedArray = sized $ \n -> do+ size <- upTo n+ ins <- replicateM size arbitrary+ return $ A.run $ do+ arr <- A.new size+ forM_ (zip [0..] ins) $ uncurry $ A.unsafeWrite arr+ return arr++ genValid = sized $ \n -> do+ size <- upTo n+ chars <- resize size $ genListOf arbitrary+ return $ T.pack chars+ textStartingWith :: Char -> Gen Text textStartingWith c = sized $ \n -> case n of 0 -> pure $ T.singleton c 1 -> pure $ T.singleton c _ -> do- rest <- resize (n - 1) genUncheckedText+ rest <- resize (n - 1) genValid return $ T.cons c rest textWith :: Gen Text -> Gen Text textWith gen = sized $ \n -> do (b, m, a) <- genSplit3 n- before <- resize b genUncheckedText+ before <- resize b genValid middle <- resize m gen- after <- resize a genUncheckedText+ after <- resize a genValid return $ T.concat [before, middle, after] textWithA :: Char -> Gen Text@@ -37,11 +51,11 @@ textWithoutAny :: Char -> Gen Text textWithoutAny c = textWithoutAnyOf [c] -textWithoutAnyOf :: [Char] -> Gen Text+textWithoutAnyOf :: String -> Gen Text textWithoutAnyOf cs = T.pack <$> genListOf (arbitrary `suchThat` (`notElem` cs)) textAllCaps :: Gen Text-textAllCaps = T.toUpper <$> genUncheckedText+textAllCaps = T.toUpper <$> genValid
test/Data/GenValidity/TextSpec.hs view
@@ -3,16 +3,16 @@ import Test.Hspec import Test.QuickCheck -import Data.GenValidity ()+import Data.GenValidity import Data.GenValidity.Text import qualified Data.Text as T spec :: Spec spec = do- describe "genUncheckedText" $ do+ describe "genValid" $ do it "is always empty when resized to 0" $ do- forAll (resize 0 genUncheckedText) (`shouldSatisfy` T.null)+ forAll (resize 0 genValid) (`shouldSatisfy` T.null) describe "textStartingWith" $ do it "is never empty" $ do