Coverage report: /home/ellis/comp/core/std/rand.lisp

KindCoveredAll%
expression3252 61.5
branch00nil
Key
Not instrumented
Conditionalized out
Executed
Not executed
 
Both branches taken
One branch taken
Neither branch taken
1
 ;;; rand.lisp --- Random Utils
2
 
3
 ;; 
4
 
5
 ;;; Code:
6
 (in-package :std/rand)
7
 
8
 ;;; random
9
 (defvar *simple-charset* "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789"
10
   "The simple ascii [a-zA-Z0-9] charset.")
11
 
12
 (defun random-elt (seq)
13
   "Return a random element from SEQ."
14
   (elt seq (random (length seq))))
15
 
16
 (defun random-ref (vec)
17
   "Return a random element from VEC."
18
   (aref vec (random (length vec))))
19
 
20
 (defun random-char ()
21
   "Return a random character."
22
   (random-ref *simple-charset*))
23
 
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)))))
29
 
30
 (defun random-byte () 
31
   "Return a random byte."
32
   (random 255))
33
 
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)))))
39
 
40
 (defun random-booleans (num &optional (probability 2))
41
   (loop for i from 1 to num
42
         collect (zerop (random probability))))
43
 
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)))))