Wrote a test harness and a couple of tests for Typed Scheme's optimizer.

This commit is contained in:
Vincent St-Amour 2010-06-23 16:58:18 -04:00
parent d47221c55d
commit fd987546b3
37 changed files with 158 additions and 0 deletions

View File

@ -0,0 +1,4 @@
(module begin-float typed/scheme #:optimize
(require racket/unsafe/ops)
(begin (- 2.0 3.0)
(* 2.0 3.0)))

View File

@ -0,0 +1,4 @@
(module define-begin-float typed/scheme #:optimize
(require racket/unsafe/ops)
(define a (begin (display (- 2.0 3.0))
(* 2.0 3.0))))

View File

@ -0,0 +1,3 @@
(module define-call-float typed/scheme #:optimize
(require racket/unsafe/ops)
(define x (cons (+ 1.0 2.0) 3.0)))

View File

@ -0,0 +1,3 @@
(module define-float typed/scheme #:optimize
(require racket/unsafe/ops)
(define x (+ 1.0 2.0)))

View File

@ -0,0 +1,3 @@
(module define-pair typed/scheme #:optimize
(require racket/unsafe/ops)
(define x (car '(1 3))))

View File

@ -0,0 +1,3 @@
(module double-float typed/scheme #:optimize
(require racket/unsafe/ops)
(+ 2.0 2.0 2.0))

View File

@ -0,0 +1,5 @@
(module float-fun typed/scheme #:optimize
(require racket/unsafe/ops)
(: f (Float -> Float))
(define (f x)
(+ x 1.0)))

View File

@ -0,0 +1,3 @@
(module float-promotion typed/scheme #:optimize
(require racket/unsafe/ops racket/flonum)
(+ 1 2.0))

View File

@ -0,0 +1,3 @@
(module float-promotion typed/scheme #:optimize
(require racket/unsafe/ops)
(/ 1 2.0))

View File

@ -0,0 +1,4 @@
(module let-float typed/scheme #:optimize
(require racket/unsafe/ops)
(let ((x (+ 3.0 2.0)))
(* 9.0 x)))

View File

@ -0,0 +1,3 @@
(module nested-float typed/scheme #:optimize
(require racket/unsafe/ops)
(+ 2.0 (+ 3.0 4.0)))

View File

@ -0,0 +1,3 @@
(module nested-float typed/scheme #:optimize
(require racket/unsafe/ops)
(+ 2.0 (* 3.0 4.0)))

View File

@ -0,0 +1,3 @@
(module nested-pair typed/scheme #:optimize
(require racket/unsafe/ops)
(car (cdr '(1 2))))

View File

@ -0,0 +1,3 @@
(module nested-pair2 typed/scheme #:optimize
(require racket/unsafe/ops)
(car (cdr (cons 3 (cons (cons 2 '()) 1)))))

View File

@ -0,0 +1,7 @@
(module pair-fun typed/scheme #:optimize
(require racket/unsafe/ops)
(: f ((Listof Integer) -> Integer))
(define (f x)
(if (null? x)
1
(car x))))

View File

@ -0,0 +1,3 @@
(module simple-float typed/scheme #:optimize
(require racket/unsafe/ops)
(+ 2.0 3.0))

View File

@ -0,0 +1,3 @@
(module simple-pair typed/scheme #:optimize
(require racket/unsafe/ops)
(car (cons 1 2)))

View File

@ -0,0 +1,3 @@
(module float-unary typed/scheme #:optimize
(require racket/unsafe/ops)
(sin 2.0))

View File

@ -0,0 +1,4 @@
(module begin-float typed/scheme #:optimize
(require racket/unsafe/ops)
(begin (unsafe-fl- 2.0 3.0)
(unsafe-fl* 2.0 3.0)))

View File

@ -0,0 +1,4 @@
(module define-begin-float typed/scheme #:optimize
(require racket/unsafe/ops)
(define a (begin (display (unsafe-fl- 2.0 3.0))
(unsafe-fl* 2.0 3.0))))

View File

@ -0,0 +1,3 @@
(module define-call-float typed/scheme #:optimize
(require racket/unsafe/ops)
(define x (cons (unsafe-fl+ 1.0 2.0) 3.0)))

View File

@ -0,0 +1,3 @@
(module define-float typed/scheme #:optimize
(require racket/unsafe/ops)
(define x (unsafe-fl+ 1.0 2.0)))

View File

@ -0,0 +1,3 @@
(module define-pair typed/scheme #:optimize
(require racket/unsafe/ops)
(define x (unsafe-car '(1 3))))

View File

@ -0,0 +1,3 @@
(module double-float typed/scheme #:optimize
(require racket/unsafe/ops)
(unsafe-fl+ (unsafe-fl+ 2.0 2.0) 2.0))

View File

@ -0,0 +1,5 @@
(module float-fun typed/scheme #:optimize
(require racket/unsafe/ops)
(: f (Float -> Float))
(define (f x)
(unsafe-fl+ x 1.0)))

View File

@ -0,0 +1,3 @@
(module float-promotion typed/scheme #:optimize
(require racket/unsafe/ops racket/flonum)
(unsafe-fl+ (->fl 1) 2.0))

View File

@ -0,0 +1,3 @@
(module float-promotion typed/scheme #:optimize
(require racket/unsafe/ops)
(/ 1 2.0))

View File

@ -0,0 +1,4 @@
(module let-float typed/scheme #:optimize
(require racket/unsafe/ops)
(let ((x (unsafe-fl+ 3.0 2.0)))
(unsafe-fl* 9.0 x)))

View File

@ -0,0 +1,3 @@
(module nested-float typed/scheme #:optimize
(require racket/unsafe/ops)
(unsafe-fl+ 2.0 (unsafe-fl+ 3.0 4.0)))

View File

@ -0,0 +1,3 @@
(module nested-float typed/scheme #:optimize
(require racket/unsafe/ops)
(unsafe-fl+ 2.0 (unsafe-fl* 3.0 4.0)))

View File

@ -0,0 +1,3 @@
(module nested-pair typed/scheme #:optimize
(require racket/unsafe/ops)
(unsafe-car (unsafe-cdr '(1 2))))

View File

@ -0,0 +1,3 @@
(module nested-pair2 typed/scheme #:optimize
(require racket/unsafe/ops)
(unsafe-car (unsafe-cdr (cons 3 (cons (cons 2 '()) 1)))))

View File

@ -0,0 +1,7 @@
(module pair-fun typed/scheme #:optimize
(require racket/unsafe/ops)
(: f ((Listof Integer) -> Integer))
(define (f x)
(if (null? x)
1
(unsafe-car x))))

View File

@ -0,0 +1,3 @@
(module simple-float typed/scheme #:optimize
(require racket/unsafe/ops)
(unsafe-fl+ 2.0 3.0))

View File

@ -0,0 +1,3 @@
(module simple-pair typed/scheme #:optimize
(require racket/unsafe/ops)
(unsafe-car (cons 1 2)))

View File

@ -0,0 +1,3 @@
(module float-unary typed/scheme #:optimize
(require racket/unsafe/ops)
(unsafe-flsin 2.0))

View File

@ -0,0 +1,32 @@
#lang racket
;; since Typed Scheme's optimizer does source to source transformations,
;; we compare the expansion of automatically optimized and hand optimized
;; modules
(define (read-and-expand file)
(syntax->datum
(parameterize ([current-namespace (make-base-namespace)])
(with-handlers
([exn:fail? (lambda (exn)
(printf "~a\n" (exn-message exn))
#'#f)])
(expand (with-input-from-file file read-syntax))))))
(define (test gen)
(let-values (((base name _) (split-path gen)))
(or (regexp-match ".*~" name) ; we ignore backup files
(equal? (read-and-expand gen)
(read-and-expand (build-path base "../hand-optimized/" name)))
(begin (printf "~a failed\n\n" name)
#f))))
(let ((n-failures
(if (> (vector-length (current-command-line-arguments)) 0)
(if (test (format "generic/~a.rkt"
(vector-ref (current-command-line-arguments) 0)))
0 1)
(for/fold ((n-failures 0))
((gen (in-directory "generic")))
(+ n-failures (if (test gen) 0 1))))))
(unless (= n-failures 0)
(error (format "~a tests failed." n-failures))))