penny-0.24.0.0: tests/Copper/Gen/Terminals.hs
module Copper.Gen.Terminals where
import qualified Test.QuickCheck.Gen as G
import Test.QuickCheck.Gen (Gen)
import qualified Penny.Copper.Terminals as T
invalid :: Gen Char
invalid = G.choose ('\xD800', '\xDFFF')
unicode :: Gen Char
unicode = G.suchThat (G.choose (minBound, maxBound)) (not . T.invalid)
newline :: Gen Char
newline = return '\x0A'
space :: Gen Char
space = return '\x20'
tab :: Gen Char
tab = return '\x09'
white :: Gen Char
white = G.oneof [space, tab]
nonNewline :: Gen Char
nonNewline = G.suchThat unicode (not . T.newline)
nonNewlineNonSpace :: Gen Char
nonNewlineNonSpace = G.suchThat nonNewline (not . T.white)
upperCaseAscii :: Gen Char
upperCaseAscii = G.choose ('A', 'Z')
lowerCaseAscii :: Gen Char
lowerCaseAscii = G.choose ('a', 'z')
digit :: Gen Char
digit = G.choose ('0', '9')
nonAscii :: Gen Char
nonAscii = G.suchThat nonNewline (> '\x7f')
letter :: Gen Char
letter = G.oneof [upperCaseAscii, lowerCaseAscii, nonAscii]
dollar :: Gen Char
dollar = return '$'
colon :: Gen Char
colon = return ':'
openCurly :: Gen Char
openCurly = return '{'
closeCurly :: Gen Char
closeCurly = return '}'
openSquare :: Gen Char
openSquare = return '['
closeSquare :: Gen Char
closeSquare = return ']'
doubleQuote :: Gen Char
doubleQuote = return '"'
period :: Gen Char
period = return '.'
hash :: Gen Char
hash = return '#'
thinSpace :: Gen Char
thinSpace = return '\x2009'
dateSep :: Gen Char
dateSep = G.elements "/-"
plus :: Gen Char
plus = return '+'
minus :: Gen Char
minus = return '-'
lessThan :: Gen Char
lessThan = return '<'
greaterThan :: Gen Char
greaterThan = return '>'
openParen :: Gen Char
openParen = return '('
closeParen :: Gen Char
closeParen = return ')'
semicolon :: Gen Char
semicolon = return ';'
apostrophe :: Gen Char
apostrophe = return '\x27'
tilde :: Gen Char
tilde = return '~'
underscore :: Gen Char
underscore = return '_'
asterisk :: Gen Char
asterisk = return '*'
atSign :: Gen Char
atSign = return '@'
lvl1AcctChar :: Gen Char
lvl1AcctChar = G.suchThat nonNewline
(\c -> (not . T.closeCurly $ c) && (not . T.colon $ c))
lvl2AcctOtherChar :: Gen Char
lvl2AcctOtherChar =
G.suchThat nonNewline
(\c -> (not . T.white $ c)
&& (not . T.colon $ c) && (not . T.asterisk $ c)
&& (not . T.greaterThan $ c) && (not . T.lessThan $ c))
lvl1CmdtyChar :: Gen Char
lvl1CmdtyChar = G.suchThat nonNewline (not . T.doubleQuote)
lvl2CmdtyFirstChar :: Gen Char
lvl2CmdtyFirstChar = G.oneof [letter, dollar]
lvl2CmdtyOtherChar :: Gen Char
lvl2CmdtyOtherChar = G.suchThat nonNewline (not . T.white)
lvl3CmdtyChar :: Gen Char
lvl3CmdtyChar = G.oneof [letter, dollar]
flagChar :: Gen Char
flagChar = G.suchThat nonNewline (not . T.closeSquare)
numberChar :: Gen Char
numberChar = G.suchThat nonNewline (not . T.closeParen)
quotedPayeeChar :: Gen Char
quotedPayeeChar = G.suchThat nonNewline (not . T.tilde)
tagChar :: Gen Char
tagChar = G.suchThat nonNewlineNonSpace
(\c -> (not . T.asterisk $ c) && (not . T.greaterThan $ c)
&& (not . T.lessThan $ c))