Use sandboxes instead of duplicate files to test results when optimizing.

original commit: 46b2a2113af3e6f8174379880620f7add5b0f079
This commit is contained in:
Vincent St-Amour 2010-08-26 17:44:21 -04:00
parent e291319f96
commit 7b0682b8d0
94 changed files with 348 additions and 233 deletions

View File

@ -1,4 +1,5 @@
#lang typed/racket #:optimize
#lang typed/racket
#:optimize
(require racket/unsafe/ops)
(apply + (map add1 (list 1 2 3)))
(apply * (map add1 (list 1 2 3)))

View File

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

View File

@ -1,5 +1,6 @@
(module binary-fixnum typed/scheme #:optimize
(require racket/unsafe/ops)
(: f (All (X) ((Vectorof X) -> Natural)))
(define (f v)
(bitwise-and (vector-length v) 1)))
#lang typed/scheme
#:optimize
(require racket/unsafe/ops)
(: f (All (X) ((Vectorof X) -> Natural)))
(define (f v)
(bitwise-and (vector-length v) 1))

View File

@ -1,3 +1,4 @@
(module binary-nonzero-fixnum typed/scheme #:optimize
(require racket/unsafe/ops)
(quotient (vector-length '#(1 2 3)) 2))
#lang typed/scheme
#:optimize
(require racket/unsafe/ops)
(quotient (vector-length '#(1 2 3)) 2)

View File

@ -1,4 +1,5 @@
#lang typed/scheme #:optimize
#lang typed/scheme
#:optimize
(require racket/unsafe/ops)

View File

@ -1,4 +1,5 @@
#lang typed/scheme #:optimize
#lang typed/scheme
#:optimize
(require racket/unsafe/ops)
(display (if (number? 3)
(+ 2.0 3.0)

View File

@ -1,4 +1,5 @@
#lang typed/scheme #:optimize
#lang typed/scheme
#:optimize
;; originally from nucleic3
;; cond on substructs, branches were considered dead

View File

@ -1,4 +1,5 @@
#lang typed/scheme #:optimize
#lang typed/scheme
#:optimize
(require racket/unsafe/ops)
(display (if (number? "eh")
(+ 2.0 3.0)

View File

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

View File

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

View File

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

View File

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

View File

@ -1,4 +1,5 @@
#lang typed/scheme
#:optimize
;; to see if the harness supports having the 2 versions of a test being
;; written in different languages
(module different-langs typed/scheme #:optimize
(+ 1 2))
(+ 1 2)

View File

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

View File

@ -1,3 +1,4 @@
(module exact-inexact typed/scheme #:optimize
(require racket/flonum)
(exact->inexact (expt 10 100))) ; must not be a fixnum
#lang typed/scheme
#:optimize
(require racket/flonum)
(exact->inexact (expt 10 100)) ; must not be a fixnum

View File

@ -1,3 +1,4 @@
(module fixnum-comparison typed/scheme #:optimize
(require racket/unsafe/ops)
(< (vector-length '#(1 2 3)) (string-length "asdf")))
#lang typed/scheme
#:optimize
(require racket/unsafe/ops)
(< (vector-length '#(1 2 3)) (string-length "asdf"))

View File

@ -1,3 +1,4 @@
(module float-comp typed/scheme #:optimize
(require racket/unsafe/ops)
(< 1.0 2.0))
#lang typed/scheme
#:optimize
(require racket/unsafe/ops)
(< 1.0 2.0)

View File

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

View File

@ -1,4 +1,5 @@
(module float-promotion typed/scheme #:optimize
(require racket/unsafe/ops racket/flonum)
(+ (quotient 1 1) 2.0)
(+ (expt 100 100) 2.0))
#lang typed/scheme
#:optimize
(require racket/unsafe/ops racket/flonum)
(+ (quotient 1 1) 2.0)
(+ (expt 100 100) 2.0)

View File

@ -1,3 +1,4 @@
(module flvector-length typed/scheme #:optimize
(require racket/unsafe/ops racket/flonum)
(flvector-length (flvector 0.0 1.2)))
#lang typed/scheme
#:optimize
(require racket/unsafe/ops racket/flonum)
(flvector-length (flvector 0.0 1.2))

View File

@ -1,3 +1,4 @@
(module fx-fl typed/scheme #:optimize
(require racket/unsafe/ops)
(exact->inexact 1))
#lang typed/scheme
#:optimize
(require racket/unsafe/ops)
(exact->inexact 1)

View File

@ -1,4 +1,5 @@
#lang typed/scheme #:optimize
#lang typed/scheme
#:optimize
(require racket/unsafe/ops)
(for: ((i : Integer #"123"))
(display i))

View File

@ -1,4 +1,5 @@
(module in-list typed/scheme #:optimize
(require racket/unsafe/ops)
(for: ((i : Natural '(1 2 3)))
(display i)))
#lang typed/scheme
#:optimize
(require racket/unsafe/ops)
(for: ((i : Natural '(1 2 3)))
(display i))

View File

@ -1,4 +1,5 @@
#lang typed/scheme #:optimize
#lang typed/scheme
#:optimize
(require racket/unsafe/ops)
(for: ((i : Char "123"))
(display i))

View File

@ -1,4 +1,5 @@
#lang typed/scheme #:optimize
#lang typed/scheme
#:optimize
(require racket/unsafe/ops)
(for: ((i : Integer (vector 1 2 3)))
(display i))

View File

@ -1,3 +1,4 @@
#lang typed/scheme #:optimize
#lang typed/scheme
#:optimize
(require racket/unsafe/ops)
(conjugate (+ 1.0+2.0i 2.0+4.0i))

View File

@ -1,3 +1,4 @@
#lang typed/scheme #:optimize
#lang typed/scheme
#:optimize
(require racket/unsafe/ops)
(+ (quotient 2 1) 1.0+2.0i 3.0+6.0i)

View File

@ -1,4 +1,5 @@
(module invalid-binary-nonzero-fixnum typed/scheme #:optimize
(: f ( -> Void))
(define (f) ; in a function, to prevent evaluation
(display (quotient 4 0)))) ; 2 fixnums, but the second is 0, cannot optimize
#lang typed/scheme
#:optimize
(: f ( -> Void))
(define (f) ; in a function, to prevent evaluation
(display (quotient 4 0))) ; 2 fixnums, but the second is 0, cannot optimize

View File

@ -1,2 +1,3 @@
(module exact-inexact typed/scheme #:optimize
(exact->inexact 1.0)) ; not an integer, can't optimize
#lang typed/scheme
#:optimize
(exact->inexact 1.0) ; not an integer, can't optimize

View File

@ -1,3 +1,4 @@
(module float-comp typed/scheme #:optimize
(require racket/unsafe/ops)
(< 1.0 2))
#lang typed/scheme
#:optimize
(require racket/unsafe/ops)
(< 1.0 2)

View File

@ -1,2 +1,3 @@
(module float-promotion typed/scheme #:optimize
(/ 1 2.0)) ; result is not a float, can't optimize
#lang typed/scheme
#:optimize
(/ 1 2.0) ; result is not a float, can't optimize

View File

@ -1,2 +1,3 @@
(module invalid-inexact-complex-parts.rkt typed/scheme #:optimize
(real-part 1+2i))
#lang typed/scheme
#:optimize
(real-part 1+2i)

View File

@ -1,2 +1,3 @@
(module invalid-make-flrectangular typed/scheme #:optimize
(make-rectangular 1 2))
#lang typed/scheme
#:optimize
(make-rectangular 1 2)

View File

@ -1,3 +1,4 @@
#lang typed/scheme #:optimize
#lang typed/scheme
#:optimize
(make-polar 0 0)

View File

@ -1,4 +1,5 @@
#lang typed/scheme #:optimize
#lang typed/scheme
#:optimize
(: f ((MListof Integer) -> Integer))
(define (f x)
(mcar x))

View File

@ -1,2 +1,3 @@
(module invalid-sqrt typed/scheme #:optimize
(sqrt -2.0)) ; not a nonnegative flonum, can't optimize
#lang typed/scheme
#:optimize
(sqrt -2.0) ; not a nonnegative flonum, can't optimize

View File

@ -1,4 +1,5 @@
#lang typed/scheme #:optimize
#lang typed/scheme
#:optimize
(require racket/unsafe/ops)

View File

@ -1,4 +1,5 @@
#lang typed/scheme #:optimize
#lang typed/scheme
#:optimize
(require racket/unsafe/ops)

View File

@ -1,4 +1,5 @@
(module invalid-vector-ref typed/scheme #:optimize
(: f ((Vectorof Integer) -> Integer))
(define (f x)
(vector-ref x 0))) ; type is (Vectorof Integer), length is unknown, can't optimize
#lang typed/scheme
#:optimize
(: f ((Vectorof Integer) -> Integer))
(define (f x)
(vector-ref x 0)) ; type is (Vectorof Integer), length is unknown, can't optimize

View File

@ -1,4 +1,5 @@
(module invalid-vector-set typed/scheme #:optimize
(: f ((Vectorof Integer) -> Void))
(define (f x)
(vector-set! x 0 2))) ; type is (Vectorof Integer), length is ot known, can't optimize
#lang typed/scheme
#:optimize
(: f ((Vectorof Integer) -> Void))
(define (f x)
(vector-set! x 0 2)) ; type is (Vectorof Integer), length is ot known, can't optimize

View File

@ -1,3 +1,4 @@
(module known-vector-length typed/scheme #:optimize
(require racket/unsafe/ops)
(+ 2 (vector-length (ann (vector 1 2) (Vector Integer Integer)))))
#lang typed/scheme
#:optimize
(require racket/unsafe/ops)
(+ 2 (vector-length (ann (vector 1 2) (Vector Integer Integer))))

View File

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

View File

@ -1,4 +1,5 @@
#lang typed/scheme #:optimize
#lang typed/scheme
#:optimize
(require racket/unsafe/ops)

View File

@ -1,4 +1,5 @@
#lang typed/scheme #:optimize
#lang typed/scheme
#:optimize
(require racket/unsafe/ops)

View File

@ -1,4 +1,5 @@
#lang typed/racket/base #:optimize
#lang typed/racket/base
#:optimize
(require racket/unsafe/ops)

View File

@ -1,4 +1,5 @@
(module make-flrectangular typed/scheme #:optimize
(require racket/unsafe/ops racket/flonum)
(make-rectangular 1.0 2.2)
(make-flrectangular 1.0 2.2))
#lang typed/scheme
#:optimize
(require racket/unsafe/ops racket/flonum)
(make-rectangular 1.0 2.2)
(make-flrectangular 1.0 2.2)

View File

@ -1,4 +1,5 @@
#lang typed/scheme #:optimize
#lang typed/scheme
#:optimize
(require racket/unsafe/ops)

View File

@ -1,4 +1,5 @@
#lang typed/scheme #:optimize
#lang typed/scheme
#:optimize
(require racket/unsafe/ops)

View File

@ -1,4 +1,5 @@
#lang typed/scheme #:optimize
#lang typed/scheme
#:optimize
(require racket/unsafe/ops)
(: x (MPairof Integer Float))
(define x (mcons 1 1.0))

View File

@ -1,3 +1,4 @@
(module n-ary-float typed/scheme #:optimize
(require racket/unsafe/ops)
(+ 1.0 2.0 3.0))
#lang typed/scheme
#:optimize
(require racket/unsafe/ops)
(+ 1.0 2.0 3.0)

View File

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

View File

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

View File

@ -1,4 +1,5 @@
#lang typed/scheme #:optimize
#lang typed/scheme
#:optimize
(require racket/unsafe/ops)

View File

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

View File

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

View File

@ -1,4 +1,5 @@
#lang typed/scheme #:optimize
#lang typed/scheme
#:optimize
(require racket/unsafe/ops)

View File

@ -1,4 +1,5 @@
#lang typed/scheme #:optimize
#lang typed/scheme
#:optimize
(require racket/unsafe/ops)

View File

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

View File

@ -1,2 +1,3 @@
(module quote typed/scheme #:optimize
'(+ 1.0 2.0))
#lang typed/scheme
#:optimize
'(+ 1.0 2.0)

View File

@ -1,4 +1,5 @@
#lang typed/racket/base #:optimize
#lang typed/racket/base
#:optimize
(require racket/unsafe/ops)

View File

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

View File

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

View File

@ -1,4 +1,5 @@
#lang typed/scheme #:optimize
#lang typed/scheme
#:optimize
(require racket/unsafe/ops)

View File

@ -1,5 +1,6 @@
(module sqrt typed/scheme #:optimize
(require racket/unsafe/ops)
(: f (Nonnegative-Float -> Nonnegative-Float))
(define (f x)
(sqrt x)))
#lang typed/scheme
#:optimize
(require racket/unsafe/ops)
(: f (Nonnegative-Float -> Nonnegative-Float))
(define (f x)
(sqrt x))

View File

@ -1,4 +1,5 @@
#lang typed/scheme #:optimize
#lang typed/scheme
#:optimize
(require racket/unsafe/ops)

View File

@ -1,6 +1,7 @@
(module structs typed/scheme #:optimize
(require racket/unsafe/ops)
(define-struct: pt ((x : Integer) (y : Integer)) #:mutable)
(define a (pt 3 4))
(pt-x a)
(set-pt-y! a 5))
#lang typed/scheme
#:optimize
(require racket/unsafe/ops)
(define-struct: pt ((x : Integer) (y : Integer)) #:mutable)
(define a (pt 3 4))
(pt-x a)
(set-pt-y! a 5)

View File

@ -1,3 +1,4 @@
(module unary-fixnum-nested typed/scheme #:optimize
(require racket/unsafe/ops racket/fixnum)
(abs (bitwise-not (length '(1 2 3)))))
#lang typed/scheme
#:optimize
(require racket/unsafe/ops racket/fixnum)
(abs (bitwise-not (length '(1 2 3))))

View File

@ -1,3 +1,4 @@
(module unary-fixnum typed/scheme #:optimize
(require racket/unsafe/ops)
(bitwise-not 4))
#lang typed/scheme
#:optimize
(require racket/unsafe/ops)
(bitwise-not 4)

View File

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

View File

@ -1,4 +1,5 @@
#lang typed/scheme #:optimize
#lang typed/scheme
#:optimize
(require racket/unsafe/ops)

View File

@ -1,4 +1,5 @@
#lang typed/scheme #:optimize
#lang typed/scheme
#:optimize
(require racket/unsafe/ops)

View File

@ -1,4 +1,5 @@
#lang typed/scheme #:optimize
#lang typed/scheme
#:optimize
(require racket/unsafe/ops)

View File

@ -1,4 +1,5 @@
#lang typed/scheme #:optimize
#lang typed/scheme
#:optimize
(require racket/unsafe/ops)

View File

@ -1,4 +1,5 @@
#lang typed/scheme #:optimize
#lang typed/scheme
#:optimize
(require racket/unsafe/ops)

View File

@ -1,4 +1,5 @@
#lang typed/scheme #:optimize
#lang typed/scheme
#:optimize
(require racket/unsafe/ops)

View File

@ -1,4 +1,5 @@
#lang typed/scheme #:optimize
#lang typed/scheme
#:optimize
(require racket/unsafe/ops racket/flonum)

View File

@ -1,4 +1,5 @@
#lang typed/scheme #:optimize
#lang typed/scheme
#:optimize
(require racket/unsafe/ops racket/flonum)

View File

@ -1,4 +1,5 @@
#lang typed/scheme #:optimize
#lang typed/scheme
#:optimize
(require racket/unsafe/ops)

View File

@ -1,4 +1,5 @@
#lang typed/scheme #:optimize
#lang typed/scheme
#:optimize
(require racket/unsafe/ops)

View File

@ -1,4 +1,5 @@
#lang typed/scheme #:optimize
#lang typed/scheme
#:optimize
(require racket/unsafe/ops)

View File

@ -1,4 +1,5 @@
#lang typed/scheme #:optimize
#lang typed/scheme
#:optimize
(require racket/unsafe/ops)

View File

@ -1,4 +1,5 @@
#lang typed/scheme #:optimize
#lang typed/scheme
#:optimize
(require racket/unsafe/ops)

View File

@ -1,8 +1,9 @@
#lang typed/scheme #:optimize
#lang typed/scheme
#:optimize
(require racket/unsafe/ops)
(letrec ((#{f : (Any -> Any)} (lambda: ((x : Any)) (f x)))
(#{x : Inexact-Complex} 1.0+2.0i)
(#{y : Inexact-Complex} (+ 2.0+4.0i 3.0+6.0i)))
(letrec: ((f : (Any -> Any) (lambda: ((x : Any)) (f x)))
(x : Inexact-Complex 1.0+2.0i)
(y : Inexact-Complex (+ 2.0+4.0i 3.0+6.0i)))
(+ x y))

View File

@ -1,4 +1,5 @@
#lang typed/scheme #:optimize
#lang typed/scheme
#:optimize
(require racket/unsafe/ops)

View File

@ -1,7 +1,8 @@
(module vector-length typed/scheme #:optimize
(require racket/unsafe/ops)
(vector-length
(vector-ref
(ann (vector (vector 1 2) 2 3)
(Vector (Vectorof Integer) Integer Integer))
0)))
#lang typed/scheme
#:optimize
(require racket/unsafe/ops)
(vector-length
(vector-ref
(ann (vector (vector 1 2) 2 3)
(Vector (Vectorof Integer) Integer Integer))
0))

View File

@ -1,3 +1,4 @@
(module vector-length typed/scheme #:optimize
(require racket/unsafe/ops)
(vector-length (vector 1 2 3)))
#lang typed/scheme
#:optimize
(require racket/unsafe/ops)
(vector-length (vector 1 2 3))

View File

@ -1,7 +1,8 @@
(module vector-ref-set-ref typed/scheme #:optimize
(require racket/unsafe/ops)
(: x (Vector Integer String))
(define x (vector 1 "1"))
(vector-ref x 0)
(vector-set! x 1 "2")
(vector-ref x 1))
#lang typed/scheme
#:optimize
(require racket/unsafe/ops)
(: x (Vector Integer String))
(define x (vector 1 "1"))
(vector-ref x 0)
(vector-set! x 1 "2")
(vector-ref x 1)

View File

@ -1,3 +1,4 @@
(module vector-ref typed/scheme #:optimize
(require racket/unsafe/ops)
(vector-ref (ann (vector 1 2) (Vector Integer Integer)) 0))
#lang typed/scheme
#:optimize
(require racket/unsafe/ops)
(vector-ref (ann (vector 1 2) (Vector Integer Integer)) 0)

View File

@ -1,3 +1,4 @@
(module vector-ref2 typed/scheme #:optimize
(require racket/unsafe/ops)
(vector-ref (vector 1 2 3) 0))
#lang typed/scheme
#:optimize
(require racket/unsafe/ops)
(vector-ref (vector 1 2 3) 0)

View File

@ -1,5 +1,6 @@
(module vector-set-quote typed/scheme #:optimize
(require racket/unsafe/ops)
(vector-set! (ann (vector '(1 2)) (Vector Any))
0
'(+ 1.0 2.0))) ; we should not optimize under quote
#lang typed/scheme
#:optimize
(require racket/unsafe/ops)
(vector-set! (ann (vector '(1 2)) (Vector Any))
0
'(+ 1.0 2.0)) ; we should not optimize under quote

View File

@ -1,5 +1,6 @@
(module vector-set typed/scheme #:optimize
(require racket/unsafe/ops)
(vector-set! (ann (vector 1 2) (Vector Integer Integer))
0
1))
#lang typed/scheme
#:optimize
(require racket/unsafe/ops)
(vector-set! (ann (vector 1 2) (Vector Integer Integer))
0
1)

View File

@ -1,3 +1,4 @@
(module invalid-vector-set typed/scheme #:optimize
(require racket/unsafe/ops)
(vector-set! (vector 1 2) 0 2)) ; type is (Vectorof Integer), length is ot known, can't optimize
#lang typed/scheme
#:optimize
(require racket/unsafe/ops)
(vector-set! (vector 1 2) 0 2) ; type is (Vectorof Integer), length is ot known, can't optimize

View File

@ -1,4 +1,5 @@
#lang typed/scheme #:optimize
#lang typed/scheme
#:optimize
(require racket/unsafe/ops)
(zero? 1)
(zero? (sqrt 3.0))

View File

@ -1,5 +1,5 @@
#lang racket
(require racket/runtime-path)
(require racket/runtime-path racket/sandbox)
;; since Typed Scheme's optimizer does source to source transformations,
;; we compare the expansion of automatically optimized and hand optimized
@ -23,6 +23,33 @@
#'(#f #f #f (#f)))]) ; for cadddr
(expand (with-input-from-file file read-syntax))))))))
;; the first line must be the #lang line
;; the second line must be #:optimize
(define (evaluator file #:optimize [optimize? #f])
(call-with-trusted-sandbox-configuration
(lambda ()
(parameterize ([current-load-relative-directory
(build-path here "generic")]
[sandbox-memory-limit #f] ; TR needs memory
[sandbox-output 'string]
[sandbox-namespace-specs
(list (car (sandbox-namespace-specs))
'typed/racket
'typed/scheme)])
(let* ((lines (cdr (file->lines file))) ;; drop the #lang line
(in (if optimize?
lines
(cdr lines))) ;; drop the #:optimize
(evaluator
(make-evaluator 'typed/racket
(foldl (lambda (acc new)
(string-append new "\n" acc))
"" in)))
(out (get-output evaluator)))
(kill-evaluator evaluator)
out)))))
(define (test gen)
(let-values (((base name _) (split-path gen)))
(or (regexp-match ".*~" name) ; we ignore backup files
@ -39,13 +66,7 @@
#f))
;; optimized and non-optimized versions must evaluate to the
;; same thing
(or (equal? (with-output-to-string
(lambda ()
(dynamic-require gen #f)))
(with-output-to-string
(lambda ()
(let ((non-opt-dir (build-path here "non-optimized")))
(dynamic-require (build-path non-opt-dir name) #f)))))
(or (equal? (evaluator gen) (evaluator gen #:optimize #t))
(begin (printf "~a failed: result mismatch\n\n" name)
#f))))))