You cannot select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
37 lines
1.1 KiB
Lua
37 lines
1.1 KiB
Lua
--- Module for generating a random (ASCII) char (no 'special' characters such as NUL, NAK, ...)
|
|
-- @lqc.generators.char
|
|
-- @alias char
|
|
local Gen = require 'lqc.generator'
|
|
local int = require 'lqc.generators.int'
|
|
|
|
local lowest_ascii_value = 32 -- 'space'
|
|
local highest_ascii_value = 126 -- '~'
|
|
local int_gen = int(lowest_ascii_value, highest_ascii_value)
|
|
local space = string.char(lowest_ascii_value)
|
|
|
|
-- Generates a random character (ASCII value between 'space' and '~'
|
|
-- @return randomly chosen char (string of length 1)
|
|
local function char_pick()
|
|
return string.char(int_gen:pick_func())
|
|
end
|
|
|
|
--- Shrinks down a previously generated char to a simpler value. Shrinks
|
|
-- towards the 'space' ASCII character.
|
|
-- @param prev previously generated char value
|
|
-- @return shrunk down char value
|
|
local function char_shrink(prev)
|
|
if string.byte(prev) <= lowest_ascii_value then
|
|
return space
|
|
end
|
|
return string.char(string.byte(prev) - 1)
|
|
end
|
|
|
|
--- Creates a generator for ASCII-chars
|
|
-- @return generator that can randomly create ASCII values
|
|
local function char()
|
|
return Gen.new(char_pick, char_shrink)
|
|
end
|
|
|
|
return char
|
|
|