;;; Test routines
;;; ,open re-posix-parsers sre-parser-package re-simp-package pp

(define (test-string)
  (let lp ()
    (write-char #\newline)
    (let ((re-s (read-line)))
      (if (not (eof-object? re-s))
	  (let ((re (posix-string->regexp re-s)))
	    (print-re re)
	    (lp))))))

(define (test-sre)
  (let lp ()
    (write-char #\newline)
    (let ((sre (read)))
      (if (not (eof-object? sre))
	  (let ((re (sre->regexp sre)))
	    (print-re re)
	    (lp))))))


(define (print-re re)
  (let ((simp-re (simplify-regexp re)))
    (cond ((static-regexp? re)
	   (receive (s lev pcount tvec) (regexp->posix-string re)
	     (format #t "plain: ~a\n       lev=~a pcount=~a tvec=~a\n"
		     s lev pcount tvec))
	   (receive (s lev pcount tvec) (regexp->posix-string simp-re)
	     (format #t "simp: ~a\n      lev=~a pcount=~a tvec=~a\n"
		     s lev pcount tvec))))
    (p (regexp->sre re))
    (p (regexp->sre simp-re))))

(define (test-match)
  (let lp ()
    (write-string "sre: ")
    (let ((sre (read)))
      (if (not (eof-object? sre))
	  (let ((re (sre->regexp sre)))
	    (let lp2 ()
	      (let ((line (read-line)))
		(cond ((not (eof-object? line))
		       (cond ((regexp-search re line) =>
			      (lambda (m)
				(format #t "Hit at [~a,~a).\n"
					(match:start m)
					(match:end m)))))
		       (lp2))
		      (else (lp))))))))))