From 3d400a47ab217a23295a0e9ec60a2e6a8be872f3 Mon Sep 17 00:00:00 2001 From: Gary Burgess Date: Mon, 5 Jun 2017 16:46:53 +0100 Subject: [PATCH 1/2] Vary the length of generated strings --- src/Data/String/Gen.purs | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/src/Data/String/Gen.purs b/src/Data/String/Gen.purs index 0521711..6d2a762 100644 --- a/src/Data/String/Gen.purs +++ b/src/Data/String/Gen.purs @@ -2,14 +2,16 @@ module Data.String.Gen where import Prelude -import Control.Monad.Gen (class MonadGen, unfoldable) +import Control.Monad.Gen (class MonadGen, chooseInt, unfoldable, sized, resize) import Control.Monad.Rec.Class (class MonadRec) import Data.Char.Gen as CG import Data.String as S -- | Generates a string using the specified character generator. genString :: forall m. MonadRec m => MonadGen m => m Char -> m String -genString = map S.fromCharArray <<< unfoldable +genString genChar = sized \size -> do + newSize <- chooseInt 1 size + resize (const newSize) $ S.fromCharArray <$> unfoldable genChar -- | Generates a string using characters from the Unicode basic multilingual -- | plain. From fd7ca545994b0391dd3fecf8693916d830c8b7c0 Mon Sep 17 00:00:00 2001 From: Gary Burgess Date: Mon, 5 Jun 2017 16:48:38 +0100 Subject: [PATCH 2/2] Add some additional common character generators --- src/Data/Char/Gen.purs | 15 ++++++++++++++- 1 file changed, 14 insertions(+), 1 deletion(-) diff --git a/src/Data/Char/Gen.purs b/src/Data/Char/Gen.purs index cab95a0..d06ddb0 100644 --- a/src/Data/Char/Gen.purs +++ b/src/Data/Char/Gen.purs @@ -2,8 +2,9 @@ module Data.Char.Gen where import Prelude -import Control.Monad.Gen (class MonadGen, chooseInt) +import Control.Monad.Gen (class MonadGen, chooseInt, oneOf) import Data.Char as C +import Data.NonEmpty ((:|)) -- | Generates a character of the Unicode basic multilingual plain. genUnicodeChar :: forall m. MonadGen m => m Char @@ -20,3 +21,15 @@ genAsciiChar' = C.fromCharCode <$> chooseInt 0 127 -- | Generates a character that is a numeric digit. genDigitChar :: forall m. MonadGen m => m Char genDigitChar = C.fromCharCode <$> chooseInt 48 57 + +-- | Generates a character from the basic latin alphabet. +genAlpha :: forall m. MonadGen m => m Char +genAlpha = oneOf (genAlphaLowercase :| [genAlphaUppercase]) + +-- | Generates a lowercase character from the basic latin alphabet. +genAlphaLowercase :: forall m. MonadGen m => m Char +genAlphaLowercase = C.fromCharCode <$> chooseInt 97 122 + +-- | Generates an uppercase character from the basic latin alphabet. +genAlphaUppercase :: forall m. MonadGen m => m Char +genAlphaUppercase = C.fromCharCode <$> chooseInt 65 90