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 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.