sunterlib/s48/krims/onebol.scm

55 lines
1.5 KiB
Scheme

(define-condition-type 'failure '(error))
(define failure? (condition-predicate 'failure))
(define (fail msg . irritants)
(apply signal 'failure msg irritants))
(define (with-failure-handler* handler thunk)
(with-handler
(lambda (condition decline)
(if (failure? condition)
(handler (condition-stuff condition))
(decline))
thunk)))
(define-syntax assert
(syntax-rules ()
((assert ?x ?y0 ...)
(if (not ?x) (fail "Assertion failed" '?x ?y0 ...))) ))
(define-syntax deny
(syntax-rules ()
((deny ?x ?y0 ...)
(assert (not ?x) ?y0 ...))))
(define (should-raise* condition-predicate? thunk)
(with-handler (lambda (condition decline)
(assert (condition-predicate? condition)))
thunk))
(define (shouldnt-raise* condition-predicate? thunk)
(with-handler (lambda (condition decline)
(deny (condition-predicate? condition))
(decline))
thunk))
(define-syntax should-raise
(syntax-rules ()
((should-raise condition-predicate? e0 e1 ...)
(should-raise* condition-predicate?
(lambda () e0 e1 ...)))))
(define-syntax shouldnt-raise
(syntax-rules ()
((shouldnt-raise condition-predicate? e0 e1 ...)
(shouldnt-raise* condition-predicate?
(lambda () e0 e1 ...)))))
(define-record-type :testcase
(make-testcase description thunk)
testcase?
(description testcase-description)
(thunk testcase-thunk))