more JIT arithmetic tests
svn: r2123
This commit is contained in:
parent
e548f0effc
commit
436c032bed
|
@ -7,8 +7,22 @@
|
||||||
(parameterize ([current-namespace (make-namespace)]
|
(parameterize ([current-namespace (make-namespace)]
|
||||||
[eval-jit-enabled #t])
|
[eval-jit-enabled #t])
|
||||||
(namespace-require 'mzscheme)
|
(namespace-require 'mzscheme)
|
||||||
(let* ([un0 (lambda (v op arg)
|
(let* ([check-error-message (lambda (name proc)
|
||||||
;; (printf "Trying ~a ~a\n" op arg);
|
(unless (memq name '(eq? not null? pair?))
|
||||||
|
(let ([s (with-handlers ([exn? exn-message])
|
||||||
|
(proc 'bad))]
|
||||||
|
[name (symbol->string name)])
|
||||||
|
(test name
|
||||||
|
(lambda (v)
|
||||||
|
(and (string? v)
|
||||||
|
(let ([v (regexp-match
|
||||||
|
(format "^~a"
|
||||||
|
(regexp-replace* #rx"[*?+]" name "\\\\\\0"))
|
||||||
|
v)])
|
||||||
|
(and v (car v)))))
|
||||||
|
s))))]
|
||||||
|
[un0 (lambda (v op arg)
|
||||||
|
;; (printf "Trying ~a ~a\n" op arg)
|
||||||
(let ([name `(,op ,arg)])
|
(let ([name `(,op ,arg)])
|
||||||
(test v name ((eval `(lambda (x) (,op x))) arg))
|
(test v name ((eval `(lambda (x) (,op x))) arg))
|
||||||
(when (boolean? v)
|
(when (boolean? v)
|
||||||
|
@ -16,6 +30,7 @@
|
||||||
name
|
name
|
||||||
((eval `(lambda (x) (if (,op x) 'yes 'no))) arg)))))]
|
((eval `(lambda (x) (if (,op x) 'yes 'no))) arg)))))]
|
||||||
[un (lambda (v op arg)
|
[un (lambda (v op arg)
|
||||||
|
(check-error-message op (eval `(lambda (x) (,op x))))
|
||||||
(un0 v op arg)
|
(un0 v op arg)
|
||||||
(when (number? arg)
|
(when (number? arg)
|
||||||
(let ([iv (if (number? v)
|
(let ([iv (if (number? v)
|
||||||
|
@ -33,6 +48,7 @@
|
||||||
(test (if v 'yes 'no) name ((eval `(lambda (x) (if (,op x ,arg2) 'yes 'no))) arg1))
|
(test (if v 'yes 'no) name ((eval `(lambda (x) (if (,op x ,arg2) 'yes 'no))) arg1))
|
||||||
(test (if v 'yes 'no) name ((eval `(lambda (x) (if (,op ,arg1 x) 'yes 'no))) arg2)))))]
|
(test (if v 'yes 'no) name ((eval `(lambda (x) (if (,op ,arg1 x) 'yes 'no))) arg2)))))]
|
||||||
[bin (lambda (v op arg1 arg2)
|
[bin (lambda (v op arg1 arg2)
|
||||||
|
(check-error-message op (eval `(lambda (x) (,op x ,arg2))))
|
||||||
(bin0 v op arg1 arg2)
|
(bin0 v op arg1 arg2)
|
||||||
(let ([iv (if (number? v)
|
(let ([iv (if (number? v)
|
||||||
(exact->inexact v)
|
(exact->inexact v)
|
||||||
|
@ -44,7 +60,7 @@
|
||||||
(un #f 'null? 0)
|
(un #f 'null? 0)
|
||||||
(un #f 'pair? 0)
|
(un #f 'pair? 0)
|
||||||
|
|
||||||
(bin #f eq? 0 10)
|
(bin #f 'eq? 0 10)
|
||||||
|
|
||||||
(un #t 'zero? 0)
|
(un #t 'zero? 0)
|
||||||
(un #f 'zero? 1)
|
(un #f 'zero? 1)
|
||||||
|
@ -84,9 +100,23 @@
|
||||||
|
|
||||||
(un 3 'add1 2)
|
(un 3 'add1 2)
|
||||||
(un -3 'add1 -4)
|
(un -3 'add1 -4)
|
||||||
|
(un (expt 2 30) 'add1 (sub1 (expt 2 30)))
|
||||||
|
|
||||||
(un 1 'sub1 2)
|
(un 1 'sub1 2)
|
||||||
(un -5 'sub1 -4)
|
(un -5 'sub1 -4)
|
||||||
|
(un (- (expt 2 30)) 'sub1 (- 1 (expt 2 30)))
|
||||||
|
|
||||||
|
(bin 11 '+ 4 7)
|
||||||
|
(bin -3 '+ 4 -7)
|
||||||
|
(bin (expt 2 30) '+ (expt 2 29) (expt 2 29))
|
||||||
|
(bin (- (expt 2 31) 2) '+ (sub1 (expt 2 30)) (sub1 (expt 2 30)))
|
||||||
|
|
||||||
|
(bin 3 '- 7 4)
|
||||||
|
(bin 11 '- 7 -4)
|
||||||
|
(bin 0 '- (expt 2 29) (expt 2 29))
|
||||||
|
(bin (expt 2 30) '- (expt 2 29) (- (expt 2 29)))
|
||||||
|
(bin (- (expt 2 30)) '- (- (expt 2 29)) (expt 2 29))
|
||||||
|
(bin (- 2 (expt 2 31)) '- (- 1 (expt 2 30)) (sub1 (expt 2 30)))
|
||||||
|
|
||||||
))
|
))
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue
Block a user