Skip to content

Commit c4158c1

Browse files
authored
Merge pull request #82 from purescript/more-gen
Enhance string & char generation
2 parents e69a22c + fd7ca54 commit c4158c1

File tree

2 files changed

+18
-3
lines changed

2 files changed

+18
-3
lines changed

src/Data/Char/Gen.purs

Lines changed: 14 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,8 +2,9 @@ module Data.Char.Gen where
22

33
import Prelude
44

5-
import Control.Monad.Gen (class MonadGen, chooseInt)
5+
import Control.Monad.Gen (class MonadGen, chooseInt, oneOf)
66
import Data.Char as C
7+
import Data.NonEmpty ((:|))
78

89
-- | Generates a character of the Unicode basic multilingual plain.
910
genUnicodeChar :: forall m. MonadGen m => m Char
@@ -20,3 +21,15 @@ genAsciiChar' = C.fromCharCode <$> chooseInt 0 127
2021
-- | Generates a character that is a numeric digit.
2122
genDigitChar :: forall m. MonadGen m => m Char
2223
genDigitChar = C.fromCharCode <$> chooseInt 48 57
24+
25+
-- | Generates a character from the basic latin alphabet.
26+
genAlpha :: forall m. MonadGen m => m Char
27+
genAlpha = oneOf (genAlphaLowercase :| [genAlphaUppercase])
28+
29+
-- | Generates a lowercase character from the basic latin alphabet.
30+
genAlphaLowercase :: forall m. MonadGen m => m Char
31+
genAlphaLowercase = C.fromCharCode <$> chooseInt 97 122
32+
33+
-- | Generates an uppercase character from the basic latin alphabet.
34+
genAlphaUppercase :: forall m. MonadGen m => m Char
35+
genAlphaUppercase = C.fromCharCode <$> chooseInt 65 90

src/Data/String/Gen.purs

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2,14 +2,16 @@ module Data.String.Gen where
22

33
import Prelude
44

5-
import Control.Monad.Gen (class MonadGen, unfoldable)
5+
import Control.Monad.Gen (class MonadGen, chooseInt, unfoldable, sized, resize)
66
import Control.Monad.Rec.Class (class MonadRec)
77
import Data.Char.Gen as CG
88
import Data.String as S
99

1010
-- | Generates a string using the specified character generator.
1111
genString :: forall m. MonadRec m => MonadGen m => m Char -> m String
12-
genString = map S.fromCharArray <<< unfoldable
12+
genString genChar = sized \size -> do
13+
newSize <- chooseInt 1 size
14+
resize (const newSize) $ S.fromCharArray <$> unfoldable genChar
1315

1416
-- | Generates a string using characters from the Unicode basic multilingual
1517
-- | plain.

0 commit comments

Comments
 (0)