2
;;;; Author: Paul Dietz
3
;;;; Contains: Code to randomly intern and unintern random strings
4
;;;; in a package. Exercises package and hash table routines
8
(defconstant +max-len-random-symbol+ 63)
10
(defun make-random-symbol (package)
11
(declare (optimize (speed 3) (safety 3)))
13
(let* ((len (random (1+ +max-len-random-symbol+)))
14
(str (make-string len)))
15
(declare (type (integer 0 #.+max-len-random-symbol+) len))
17
for i from 0 to (1- len) do
20
(random +num-base-chars+))))
23
(intern (copy-seq str) package)
24
(unless (equal str (symbol-name symbol))
25
(error "Intern gave bad symbol: ~A, ~A~%" str symbol))
26
(unless status (return symbol))))))
28
(defun queue-insert (q x)
29
(declare (type cons q))
32
(defun queue-remove (q)
33
(declare (type cons q))
36
(error "Attempty to remove from empty queue.~%"))
37
(setf (car q) (nreverse (cdr q)))
41
(defun queue-empty (q)
45
(defun random-intern (n)
48
(xp (defpackage "X" (:use))))
49
(declare (type cons q))
54
(not (queue-empty q)))
55
(unintern (queue-remove q) xp)
56
(queue-insert q (make-random-symbol xp))))))
58
(defun fill-intern (n)
60
(let ((xp (defpackage "X" (:use))))
63
(make-random-symbol xp))))