--- Class for generating (custom) generators. -- @classmod lqc.generator -- @alias Gen local Gen = {} local Gen_mt = { __index = Gen, } --- Creates a new generator for generating random values. -- @param pick_func a function that randomly creates a certain datatype. -- @param shrink_func a function that shrinks (simplifies) a given input based -- on last input. -- @return a generator object -- @see pick -- @see shrink function Gen.new(pick_func, shrink_func) local Generator = { pick_func = pick_func, shrink_func = shrink_func, } return setmetatable(Generator, Gen_mt) end --- Generates a new random value based on this generator's pick value. -- -- @param numtests amount of times a property will be run, can be used to guide -- the choosing process. -- @return a new randomly chosen value function Gen:pick(numtests) return self.pick_func(numtests) end --- Shrinks a generated value to a simpler value. -- -- @param prev The previously generated value. -- @return A newly generated value, simplified from the previous value. function Gen:shrink(prev) return self.shrink_func(prev) end return Gen