unit-test.rkt
#lang racket
(require rackunit)
(require "private/mpost-interface.rkt")
(provide (all-defined-out))

(define (file-name who name)
  (unless (or (path-string? name)
              (path-for-some-system? name))
    (raise-type-error who "path (for any platform) or string" name))
  (let-values ([(base file dir?) (split-path name)])
    (and (not dir?) (path-for-some-system? file) file)))
(define (filename-base name)
  (let* ([name (file-name 'filename-extension name)]
         [name (and name (path->string name))])
    (cond [(and name (regexp-match #rx"(.*)[.]([^.]+)$" name)) => cadr]
          [else #f])))
(define (file-readable file-name)
  (and (file-exists? file-name)
             (member 'read (file-or-directory-permissions file-name))))
(define developping? (make-parameter #f))
(define (compare-or-copy-it file ref-file)
  (cond 
   ((developping?) 
    (when (file-exists? ref-file) (delete-file ref-file))
    (copy-file file ref-file) #t)
   ((not (file-readable ref-file))
    (error "not in developping mode, ref mp not exits" file ref-file))
   (else (equal? (file->string file)
                 (file->string ref-file)))))
(define (test-it file-name)
    (let* ((f-main (dynamic-require file-name 'main))
           (job-name  (path->string (path-replace-suffix
                                     (build-path "results" file-name) "")))
           (test-results-mp (path-add-suffix job-name ".mp"))
           (ref-mp (path-replace-suffix file-name ".ref.mp")))
      (if (not (generate-figure job-name f-main))
          #f
          (compare-or-copy-it test-results-mp ref-mp))))
(define (make-result-dir)
  (when (not (file-exists? (build-path "examples" "results")))
    (make-directory* (build-path "examples" "results"))))
(define (main)
  (make-result-dir)
  (parameterize ((current-directory "examples"))
    (for ((i (in-range 1 400)))
         (let ((file-name (string-append "ex-" (number->string i) ".rkt")))
           (when (file-readable file-name)
             (check-equal? (test-it file-name) #t))))))