macro stepper tests:

added regression test for PR 10000
  updated lifting tests for new variable name convention

svn: r12994

original commit: b6312ff3ca2765dcb132f5e740803e2dcdd6edfa
This commit is contained in:
Ryan Culpepper 2009-01-03 19:58:06 +00:00
parent 8baedfcf1d
commit ff83df9eb1
4 changed files with 97 additions and 71 deletions

View File

@ -101,15 +101,15 @@
(define (check-steps expected actual)
(check-pred list? actual)
(check-pred reduction-sequence? actual)
(compare-step-sequences expected actual))
(compare-step-sequences actual expected))
(define (reduction-sequence? rs)
(andmap protostep? rs))
(define (compare-step-sequences expected actual)
(define (compare-step-sequences actual expected)
(cond [(and (pair? expected) (pair? actual))
(begin (compare-steps (car expected) (car actual))
(compare-step-sequences (cdr expected) (cdr actual)))]
(begin (compare-steps (car actual) (car expected))
(compare-step-sequences (cdr actual) (cdr expected)))]
[(pair? expected)
(fail (format "missing expected steps:\n~s" expected))]
[(pair? actual)
@ -121,7 +121,7 @@
(stx->datum (step-term2 step)))))))]
[else 'ok]))
(define (compare-steps expected actual)
(define (compare-steps actual expected)
(cond [(eq? expected 'error)
(check-pred misstep? actual)]
[else
@ -140,14 +140,16 @@
e-local
"Context frame")))]))
(define-binary-check (check-equal-syntax? a b)
(equal-syntax? a b))
(define-binary-check (check-equal-syntax? a e)
(equal-syntax? a e))
(define (equal-syntax? a b)
(cond [(and (pair? a) (pair? b))
(and (equal-syntax? (car a) (car b))
(equal-syntax? (cdr a) (cdr b)))]
[(and (symbol? a) (symbol? b))
(equal? (string->symbol (symbol->string a))
b)]
[else (equal? a b)]))
(define (equal-syntax? a e)
(cond [(and (pair? a) (pair? e))
(and (equal-syntax? (car a) (car e))
(equal-syntax? (cdr a) (cdr e)))]
[(and (symbol? a) (symbol? e))
(equal? (symbol->string a)
(symbol->string e))]
[(and (symbol? a) (regexp? e))
(regexp-match? e (symbol->string a))]
[else (equal? a e)]))

View File

@ -10,11 +10,13 @@
(eval '(require (prefix-in base: scheme/base)) ns)
(eval '(require (prefix-in scheme: scheme)) ns)
(define (make-test-id sym)
(parameterize ((current-namespace ns))
(namespace-symbol->identifier sym)))
(define-syntax-rule (test-policy policy name show?)
(test-case (format "~s" 'name)
(check-eq? (policy
(parameterize ((current-namespace ns))
(namespace-symbol->identifier 'name)))
(check-eq? (policy (make-test-id 'name))
show?)))
(define-syntax-rule (test-standard name show?)
(test-policy standard-policy name show?))

View File

@ -167,4 +167,25 @@
(add1 (g 2))))))])
(check-pred list? rs)
(check-true (ormap misstep? rs))))
;; Added 1/3/2008
;; Based on PR 10000
(test-case "eval within module expansion"
(let ([freshname (gensym)])
(eval `(module ,freshname scheme
(provide meval)
(define-syntax (meval stx)
(syntax-case stx ()
[(meval e)
(parameterize ((current-namespace (make-base-namespace)))
(eval `(define one '1))
(let ([v (eval `(+ 1 ,#'e))])
#`(quote #,v)))]))))
(eval `(require ',freshname))
(check-pred deriv?
(trace `(meval (+ 1 2))))
(check-pred deriv?
(trace `(module m mzscheme
(require ',freshname)
(meval (+ 1 2)))))))
))

View File

@ -44,76 +44,77 @@
(test "lift"
(lift 'a)
[#:steps (local-lift lifted (lift 'a))
(macro (#%expression lifted))
(tag-top (#%expression (#%top . lifted)))
(capture-lifts (begin (define-values (lifted) 'a)
(#%expression (#%top . lifted))))]
[#:steps (local-lift #rx"^lifted" (lift 'a))
(macro (#%expression #rx"^lifted"))
(tag-top (#%expression (#%top . #rx"^lifted")))
(capture-lifts (begin (define-values (#rx"^lifted") 'a)
(#%expression
(#%top . #rx"^lifted"))))]
#:no-hidden-steps)
(test "lift with id"
(lift (id 'a))
[#:steps (local-lift lifted (lift (id 'a)))
(macro (#%expression lifted))
(tag-top (#%expression (#%top . lifted)))
(capture-lifts (begin (define-values (lifted) (id 'a))
(#%expression (#%top . lifted))))
(macro (begin (define-values (lifted) 'a)
(#%expression (#%top . lifted))))]
[#:steps (local-lift #rx"^lifted" (lift (id 'a)))
(macro (#%expression #rx"^lifted"))
(tag-top (#%expression (#%top . #rx"^lifted")))
(capture-lifts (begin (define-values (#rx"^lifted") (id 'a))
(#%expression (#%top . #rx"^lifted"))))
(macro (begin (define-values (#rx"^lifted") 'a)
(#%expression (#%top . #rx"^lifted"))))]
#:no-hidden-steps)
(test "lift with Tid"
(lift (Tid 'a))
[#:steps (local-lift lifted (lift (Tid 'a)))
(macro (#%expression lifted))
(tag-top (#%expression (#%top . lifted)))
(capture-lifts (begin (define-values (lifted) (Tid 'a))
(#%expression (#%top . lifted))))
(macro (begin (define-values (lifted) 'a)
(#%expression (#%top . lifted))))]
[#:steps (local-lift #rx"^lifted" (lift (Tid 'a)))
(macro (#%expression #rx"^lifted"))
(tag-top (#%expression (#%top . #rx"^lifted")))
(capture-lifts (begin (define-values (#rx"^lifted") (Tid 'a))
(#%expression (#%top . #rx"^lifted"))))
(macro (begin (define-values (#rx"^lifted") 'a)
(#%expression (#%top . #rx"^lifted"))))]
;; Don't show lifts, but do find (Tid 'a), show in orig ctx
[#:hidden-steps (macro (lift 'a))])
(test "Tlift"
(Tlift 'a)
[#:steps (local-lift lifted (Tlift 'a))
(macro (#%expression lifted))
(tag-top (#%expression (#%top . lifted)))
(capture-lifts (begin (define-values (lifted) 'a)
(#%expression (#%top . lifted))))]
[#:hidden-steps (local-lift lifted (Tlift 'a))
(macro (#%expression lifted))
(capture-lifts (begin (define-values (lifted) 'a)
(#%expression lifted)))])
[#:steps (local-lift #rx"^lifted" (Tlift 'a))
(macro (#%expression #rx"^lifted"))
(tag-top (#%expression (#%top . #rx"^lifted")))
(capture-lifts (begin (define-values (#rx"^lifted") 'a)
(#%expression (#%top . #rx"^lifted"))))]
[#:hidden-steps (local-lift #rx"^lifted" (Tlift 'a))
(macro (#%expression #rx"^lifted"))
(capture-lifts (begin (define-values (#rx"^lifted") 'a)
(#%expression #rx"^lifted")))])
(test "Tlift with id"
(Tlift (id 'a))
[#:steps (local-lift lifted (Tlift (id 'a)))
(macro (#%expression lifted))
(tag-top (#%expression (#%top . lifted)))
(capture-lifts (begin (define-values (lifted) (id 'a))
(#%expression (#%top . lifted))))
(macro (begin (define-values (lifted) 'a)
(#%expression (#%top . lifted))))]
[#:hidden-steps (local-lift lifted (Tlift (id 'a)))
(macro (#%expression lifted))
(capture-lifts (begin (define-values (lifted) (id 'a))
(#%expression lifted)))])
[#:steps (local-lift #rx"^lifted" (Tlift (id 'a)))
(macro (#%expression #rx"^lifted"))
(tag-top (#%expression (#%top . #rx"^lifted")))
(capture-lifts (begin (define-values (#rx"^lifted") (id 'a))
(#%expression (#%top . #rx"^lifted"))))
(macro (begin (define-values (#rx"^lifted") 'a)
(#%expression (#%top . #rx"^lifted"))))]
[#:hidden-steps (local-lift #rx"^lifted" (Tlift (id 'a)))
(macro (#%expression #rx"^lifted"))
(capture-lifts (begin (define-values (#rx"^lifted") (id 'a))
(#%expression #rx"^lifted")))])
(test "Tlift with Tid"
(Tlift (Tid 'a))
[#:steps (local-lift lifted (Tlift (Tid 'a)))
(macro (#%expression lifted))
(tag-top (#%expression (#%top . lifted)))
(capture-lifts (begin (define-values (lifted) (Tid 'a))
(#%expression (#%top . lifted))))
(macro (begin (define-values (lifted) 'a)
(#%expression (#%top . lifted))))]
[#:steps (local-lift lifted (Tlift (Tid 'a)))
(macro (#%expression lifted))
(capture-lifts (begin (define-values (lifted) (Tid 'a))
(#%expression lifted)))
(macro (begin (define-values (lifted) 'a)
(#%expression lifted)))])
[#:steps (local-lift #rx"^lifted" (Tlift (Tid 'a)))
(macro (#%expression #rx"^lifted"))
(tag-top (#%expression (#%top . #rx"^lifted")))
(capture-lifts (begin (define-values (#rx"^lifted") (Tid 'a))
(#%expression (#%top . #rx"^lifted"))))
(macro (begin (define-values (#rx"^lifted") 'a)
(#%expression (#%top . #rx"^lifted"))))]
[#:steps (local-lift #rx"^lifted" (Tlift (Tid 'a)))
(macro (#%expression #rx"^lifted"))
(capture-lifts (begin (define-values (#rx"^lifted") (Tid 'a))
(#%expression #rx"^lifted")))
(macro (begin (define-values (#rx"^lifted") 'a)
(#%expression #rx"^lifted")))])
[#:suite "set! macros"
(test "set! (macro)"