X-Git-Url: http://repo.macrolet.net/gitweb/?a=blobdiff_plain;f=src%2Frandom.lisp;h=f91ca4671535a10dbfd11c021ee75c5ff061ecf0;hb=b82a10a08a56c17d920e8a1aa42979f57ef675f1;hp=f2d8a0ae15543f25482f9e6620f3989d5ef8404d;hpb=5614b2edd67e522764ebe063a751e5eedeb7ee5d;p=fiveam.git diff --git a/src/random.lisp b/src/random.lisp index f2d8a0a..f91ca46 100644 --- a/src/random.lisp +++ b/src/random.lisp @@ -191,7 +191,8 @@ BOUND)." (- (random (min (- most-negative) bound))))) type)))) -(defun gen-character (&key (code (gen-integer :min 0 :max (1- char-code-limit))) +(defun gen-character (&key (code-limit char-code-limit) + (code (gen-integer :min 0 :max (1- code-limit))) (alphanumericp nil)) "Returns a generator of characters. @@ -234,5 +235,16 @@ producs objects." repeat (funcall length) collect (funcall elements)))) +(defun gen-buffer (&key (length (gen-integer :min 0 :max 50)) + (element-type '(unsigned-byte 8)) + (elements (gen-integer :min 0 :max (1- (expt 2 8))))) + (lambda () + (let ((buffer (make-array (funcall length) :element-type element-type))) + (map-into buffer elements)))) + +(defun gen-one-element (&rest elements) + (lambda () + (nth (random (length elements)) elements))) + ;;;; The trivial always-produce-the-same-thing generator is done using ;;;; cl:constantly.