From f4759c68e4fd2a7f2814b71b58d3cbe46781f56c Mon Sep 17 00:00:00 2001 From: Gary Burgess Date: Thu, 27 Apr 2017 23:39:14 +0100 Subject: [PATCH] Add some generator functions --- bower.json | 1 + src/Data/Char/Gen.purs | 22 ++++++++++++++++++++++ src/Data/String/Gen.purs | 29 +++++++++++++++++++++++++++++ 3 files changed, 52 insertions(+) create mode 100644 src/Data/Char/Gen.purs create mode 100644 src/Data/String/Gen.purs diff --git a/bower.json b/bower.json index 10f0105..e92fb95 100644 --- a/bower.json +++ b/bower.json @@ -18,6 +18,7 @@ ], "dependencies": { "purescript-either": "^3.0.0", + "purescript-gen": "^1.1.0", "purescript-maybe": "^3.0.0", "purescript-partial": "^1.2.0" }, diff --git a/src/Data/Char/Gen.purs b/src/Data/Char/Gen.purs new file mode 100644 index 0000000..cab95a0 --- /dev/null +++ b/src/Data/Char/Gen.purs @@ -0,0 +1,22 @@ +module Data.Char.Gen where + +import Prelude + +import Control.Monad.Gen (class MonadGen, chooseInt) +import Data.Char as C + +-- | Generates a character of the Unicode basic multilingual plain. +genUnicodeChar :: forall m. MonadGen m => m Char +genUnicodeChar = C.fromCharCode <$> chooseInt 0 65536 + +-- | Generates a character in the ASCII character set, excluding control codes. +genAsciiChar :: forall m. MonadGen m => m Char +genAsciiChar = C.fromCharCode <$> chooseInt 32 127 + +-- | Generates a character in the ASCII character set. +genAsciiChar' :: forall m. MonadGen m => m Char +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 diff --git a/src/Data/String/Gen.purs b/src/Data/String/Gen.purs new file mode 100644 index 0000000..0521711 --- /dev/null +++ b/src/Data/String/Gen.purs @@ -0,0 +1,29 @@ +module Data.String.Gen where + +import Prelude + +import Control.Monad.Gen (class MonadGen, unfoldable) +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 + +-- | Generates a string using characters from the Unicode basic multilingual +-- | plain. +genUnicodeString :: forall m. MonadRec m => MonadGen m => m String +genUnicodeString = genString CG.genUnicodeChar + +-- | Generates a string using the ASCII character set, excluding control codes. +genAsciiString :: forall m. MonadRec m => MonadGen m => m String +genAsciiString = genString CG.genAsciiChar + +-- | Generates a string using the ASCII character set. +genAsciiString' :: forall m. MonadRec m => MonadGen m => m String +genAsciiString' = genString CG.genAsciiChar' + +-- | Generates a string made up of numeric digits. +genDigitString :: forall m. MonadRec m => MonadGen m => m String +genDigitString = genString CG.genDigitChar