;-*- Mode: Lisp -*- ;;;; Author: Paul Dietz ;;;; Created: Sun Jun 22 09:32:09 2003 ;;;; Contains: Tests of GENTEMP (in-package :cl-test) (deftest gentemp.1 (let* ((package-name "GENTEMP-TEST-PACKAGE")) (unwind-protect (let* ((pkg (make-package package-name :use nil)) (gcounter *gensym-counter*) (sym (let ((*package* pkg)) (gentemp))) (sym-name (symbol-name sym))) (values (=t gcounter *gensym-counter*) ;; wasn't changed (eqlt (aref sym-name 0) #\T) (notnot (every #'digit-char-p (subseq sym-name 1))) (eql (symbol-package sym) pkg) ;; Not external (do-external-symbols (s pkg t) (when (eql s sym) (return nil))) )) (delete-package package-name))) t t t t t) (deftest gentemp.2 (let* ((package-name "GENTEMP-TEST-PACKAGE")) (unwind-protect (let* ((pkg (make-package package-name :use nil)) (gcounter *gensym-counter*) (sym (let ((*package* pkg)) (gentemp "X"))) (sym-name (symbol-name sym))) (values (=t gcounter *gensym-counter*) ;; wasn't changed (eqlt (aref sym-name 0) #\X) (notnot (every #'digit-char-p (subseq sym-name 1))) (eql (symbol-package sym) pkg) ;; Not external (do-external-symbols (s pkg t) (when (eql s sym) (return nil))) )) (delete-package package-name))) t t t t t) (deftest gentemp.3 (let* ((package-name "GENTEMP-TEST-PACKAGE")) (unwind-protect (let* ((pkg (make-package package-name :use nil)) (gcounter *gensym-counter*) (sym (gentemp "X" package-name)) (sym-name (symbol-name sym))) (values (=t gcounter *gensym-counter*) ;; wasn't changed (eqlt (aref sym-name 0) #\X) (notnot (every #'digit-char-p (subseq sym-name 1))) (eql (symbol-package sym) pkg) ;; Not external (do-external-symbols (s pkg t) (when (eql s sym) (return nil))) )) (delete-package package-name))) t t t t t) (deftest gentemp.4 (let* ((package-name "GENTEMP-TEST-PACKAGE")) (unwind-protect (let* ((pkg (make-package package-name :use nil)) (gcounter *gensym-counter*) (sym (gentemp "" (make-symbol package-name))) (sym-name (symbol-name sym))) (values (=t gcounter *gensym-counter*) ;; wasn't changed (notnot (every #'digit-char-p sym-name)) (eql (symbol-package sym) pkg) ;; Not external (do-external-symbols (s pkg t) (when (eql s sym) (return nil))) )) (delete-package package-name))) t t t t) (deftest gentemp.5 (let* ((package-name "Z")) (safely-delete-package package-name) (unwind-protect (let* ((pkg (make-package package-name :use nil)) (gcounter *gensym-counter*) (sym (gentemp "Y" #\Z)) (sym-name (symbol-name sym))) (values (=t gcounter *gensym-counter*) ;; wasn't changed (eqlt (aref sym-name 0) #\Y) (notnot (every #'digit-char-p (subseq sym-name 1))) (eql (symbol-package sym) pkg) ;; Not external (do-external-symbols (s pkg t) (when (eql s sym) (return nil))) )) (delete-package package-name))) t t t t t) (deftest gentemp.6 (let* ((package-name "GENTEMP-TEST-PACKAGE")) (unwind-protect (let* ((*package* (make-package package-name :use nil)) (syms (loop repeat 100 collect (gentemp)))) (=t (length syms) (length (remove-duplicates syms)))) (delete-package package-name))) t) ;;; Error tests (deftest gentemp.error.1 (loop for x in *mini-universe* unless (or (stringp x) (eql (eval `(signals-type-error x ',x (gentemp x))) t)) collect x) nil) (deftest gentemp.error.2 (loop for x in *mini-universe* unless (or (typep x 'package) (string-designator-p x) (eql (eval `(signals-type-error x ',x (gentemp "T" x))) t)) collect x) nil) (deftest gentemp.error.3 (signals-error (gentemp "" *package* nil) program-error) t)