#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))))))