Coverage report: /home/ellis/comp/core/std/rand.lisp
Kind | Covered | All | % |
expression | 32 | 52 | 61.5 |
branch | 0 | 0 | nil |
Key
Not instrumented
Conditionalized out
Executed
Not executed
Both branches taken
One branch taken
Neither branch taken
1
;;; rand.lisp --- Random Utils
9
(defvar *simple-charset* "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789"
10
"The simple ascii [a-zA-Z0-9] charset.")
12
(defun random-elt (seq)
13
"Return a random element from SEQ."
14
(elt seq (random (length seq))))
16
(defun random-ref (vec)
17
"Return a random element from VEC."
18
(aref vec (random (length vec))))
21
"Return a random character."
22
(random-ref *simple-charset*))
24
(defun random-chars (dim)
25
"Return an array of random characters with dimensions DIM."
26
(let ((r (make-array dim :element-type 'character)))
27
(dotimes (i (array-total-size r) r)
28
(setf (row-major-aref r i) (random-char)))))
31
"Return a random byte."
34
(defun random-bytes (dim)
35
"Return an array of random bytes with dimensions DIM."
36
(let ((r (make-array dim :element-type 'octet)))
37
(dotimes (i (array-total-size r) r)
38
(setf (row-major-aref r i) (random-byte)))))
40
(defun random-booleans (num &optional (probability 2))
41
(loop for i from 1 to num
42
collect (zerop (random probability))))
44
(defmacro random-do (&rest statements)
45
(let ((length (length statements)))
46
`(case (random ,length)
47
,@(loop for x from 0 to length
48
for statement in statements
49
collect `(,x ,statement)))))