Integrate the TR and TR optimizer test suites.

This commit is contained in:
Vincent St-Amour 2011-05-03 11:07:10 -04:00
parent 4ea9b29d12
commit 4b03ecde2a
3 changed files with 55 additions and 89 deletions

View File

@ -1,13 +1,12 @@
#lang scheme/base
(provide go go/text)
(require rackunit rackunit/text-ui racket/file
mzlib/etc scheme/port
compiler/compiler
scheme/match mzlib/compile
"unit-tests/all-tests.ss"
"unit-tests/test-utils.ss")
"unit-tests/test-utils.ss"
"optimizer/run.rkt")
(define (scheme-file? s)
(regexp-match ".*[.](rkt|ss|scm)$" (path->string s)))
@ -85,38 +84,6 @@
(succ-tests)
(fail-tests)))
(define tests
(test-suite "Typed Scheme Tests"
unit-tests int-tests))
(provide tests int-tests unit-tests)
(define (go tests) (test/gui tests))
(define (go/text tests) (run-tests tests 'verbose))
(define (just-one p*)
(define-values (path p b) (split-path p*))
(define f
(if (equal? "fail/" (path->string path))
(lambda (p thnk)
(define-values (pred info) (exn-pred p))
(parameterize ([error-display-handler void])
(with-check-info
(['predicates info])
(check-exn pred thnk))))
(lambda (p thnk) (check-not-exn thnk))))
(test-suite
(path->string p)
(f
(build-path path p)
(lambda ()
(parameterize ([read-accept-reader #t]
[current-load-relative-directory
(path->complete-path path)]
[current-directory path]
[current-output-port (open-output-nowhere)])
(dr p))))))
(define (compile-benchmarks)
(define (find dir)
(for/list ([d (directory-list dir)]
@ -126,7 +93,7 @@
(define common (collection-path "tests" "racket" "benchmarks" "common" "typed"))
(define (mk path)
(make-test-suite (path->string path)
(for/list ([p (find path)])
(for/list ([p (find path)])
(parameterize ([current-load-relative-directory
(path->complete-path path)]
[current-directory path])
@ -138,7 +105,38 @@
(mk common)
(delete-directory/files (build-path common "compiled"))))
(provide go go/text just-one compile-benchmarks)
(define (just-one p*)
(define-values (path p b) (split-path p*))
(define f
(let ([dir (path->string path)])
(cond [(equal? dir "fail/")
(lambda (p thnk)
(define-values (pred info) (exn-pred p))
(parameterize ([error-display-handler void])
(with-check-info
(['predicates info])
(check-exn pred thnk))))]
[(equal? dir "succeed/")
(lambda (p thnk) (check-not-exn thnk))]
[(equal? dir "optimizer/tests/")
(lambda (p* thnk) (test-opt p))])))
(test-suite
(path->string p)
(f
(build-path path p)
(lambda ()
(parameterize ([read-accept-reader #t]
[current-load-relative-directory
(path->complete-path path)]
[current-directory path]
[current-output-port (open-output-nowhere)])
(dr p))))))
(define (go tests) (test/gui tests))
(define (go/text tests) (run-tests tests 'verbose))
(provide go go/text just-one
int-tests unit-tests compile-benchmarks
optimization-tests)

View File

@ -2,9 +2,7 @@
(require racket/runtime-path
rackunit rackunit/text-ui)
(provide optimization-tests)
(define show-names? (make-parameter #f))
(provide optimization-tests test-opt)
(define (generate-log name dir flags)
;; some tests require other tests, so some fiddling is required
@ -53,29 +51,7 @@
#:when (regexp-match ".*rkt$" name))
(make-test-suite
(path->string name)
(cons (test-suite
"Show Name"
(check-eq? (begin (when (show-names?) (displayln name)) #t) #t))
(proc name))))))
(proc name)))))
(define optimization-tests
(mk-suite "Optimization Tests" tests-dir test-opt))
(define single-test
(command-line
#:once-each
["--show-names" "show the names of tests as they are run" (show-names? #t)]
;; we optionally take a test name. if none is given, run everything (#f)
#:args maybe-test-to-run
(and (not (null? maybe-test-to-run))
(car maybe-test-to-run))))
(void ; to suppress output of the return value
(run-tests
(cond [single-test
(let-values ([(base name _) (split-path single-test)])
(make-test-suite "Single Test" (test-opt name)))]
[else ; default = run everything
optimization-tests])
'normal))

View File

@ -1,47 +1,39 @@
#lang racket
(require racket/vector racket/gui/dynamic)
(require racket/vector racket/gui/dynamic rackunit)
(require "main.ss")
(define exec (make-parameter go/text))
(define the-tests (make-parameter #f))
(define nightly? (make-parameter #f))
(define unit? (make-parameter #f))
(define int? (make-parameter #f))
(define opt? (make-parameter #f))
(define bench? (make-parameter #f))
(define single (make-parameter #f))
(current-namespace (make-base-namespace))
(command-line
#:once-each
["--unit" "run the unit tests" (unit? #t)]
["--int" "run the integration tests" (int? #t)]
["--nightly" "for the nightly builds" (begin (nightly? #t) (unit? #t) (int? #t))]
["--just" path "run only this test" (the-tests (just-one path))]
["--opt" "run the optimizer tests" (opt? #t)]
["--opt" "run the optimization tests" (opt? #t)]
["--benchmarks" "compile the typed benchmarks" (bench? #t)]
["--just" path "run only this test" (single (just-one path))]
["--nightly" "for the nightly builds" (begin (nightly? #t) (unit? #t) (int? #t) (opt? #t))]
["--all" "run all tests" (begin (unit? #t) (int? #t) (opt? #t) (bench? #t))]
["--gui" "run using the gui"
(if (gui-available?)
(begin (exec go))
(error "GUI not available"))]
)
(error "GUI not available"))])
(the-tests
(cond [(and (unit?) (int?)) tests]
[(unit?) unit-tests]
[(int?) int-tests]
[(or (the-tests) (bench?) (opt?)) (the-tests)]
[else
(error "You must specify which tests should be run. See --help for more info.\n")]))
(cond [(and (nightly?) (eq? 'cgc (system-type 'gc)))
(printf "Skipping Typed Racket tests.\n")]
[(when (the-tests)
(unless (= 0 ((exec) (the-tests)))
(eprintf "Typed Racket Tests did not pass.\n")))
(when (opt?)
(parameterize ([current-command-line-arguments #()])
(dynamic-require '(file "optimizer/run.rkt") #f)))
(when (bench?)
(unless (= 0 ((exec) (compile-benchmarks)))
(error "Typed Racket Tests did not pass.\n")))])
(if (and (nightly?) (eq? 'cgc (system-type 'gc)))
(printf "Skipping Typed Racket tests.\n")
(let ([to-run (cond [(single) (single)]
[else
(make-test-suite
"Typed Racket Tests"
(append (if (unit?) (list unit-tests) '())
(if (int?) (list int-tests) '())
(if (opt?) (list optimization-tests) '())
(if (bench?) (list (compile-benchmarks)) '())))])])
(unless (= 0 ((exec) to-run))
(eprintf "Typed Racket Tests did not pass.\n"))))