;-*- Mode:     Lisp -*-
;;;; Author:   Paul Dietz
;;;; Created:  Fri Jun 11 08:04:23 2004
;;;; Contains: Aux. functions associated with backquote tests



;;; Not yet finished


;;; Create random backquoted forms
(defun make-random-backquoted-form (size)
  (my-with-standard-io-syntax
   (let ((*print-readably* nil)
         (*package* (find-package "CL-TEST")))
     (read-from-string
      (concatenate 'string
                   "`"
                   (make-random-backquoted-sequence-string size))))))

(defun make-random-backquoted-sequence-string (size)
  (case size
    ((0 1) (make-random-backquoted-string size))
    (t
     (let* ((nelements (1+ (min (random (1- size)) (random (1- size)) 9)))
            (sizes (random-partition (1- size) nelements))
            (substrings (mapcar #'make-random-backquoted-string sizes)))
       (apply #'concatenate
              'string
              "("
              (car substrings)
              (if nil ; (and (> nelements 1) (coin))
                  (nconc
                   (loop for s in (cddr substrings) collect " " collect s)
                   (list " . " (cadr substrings) ")"))
                (nconc
                 (loop for s in (cdr substrings) collect " " collect s)
                 (list ")"))))))))

;;; Create a string that is a backquoted form
(defun make-random-backquoted-string (size)
  (if (<= size 1)
      (rcase
       (1 "()")
       (1 (string (random-from-seq #.(coerce *cl-symbol-names* 'vector))))
       (1 (write-to-string (- (random 2001) 1000)))
       (2 (concatenate 'string "," (string (random-from-seq "ABCDEFGHIJKLMNOPQRSTUVWXYZ"))))
       )
    ;; size > 1
    (make-random-backquoted-sequence-string size)))
