⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 testing.scm

📁 A framework written in Java for implementing high-level and dynamic languages, compiling them into J
💻 SCM
📖 第 1 页 / 共 3 页
字号:
	     (let ((res (%test-evaluate-with-catch expr)))	       (test-result-set! r 'actual-value res)	       (%test-on-test-end r res))))       (%test-report-result)))))(cond-expand ((or kawa mzscheme)  ;; Should be made to work for any Scheme with syntax-case  ;; However, I haven't gotten the quoting working.  FIXME.  (define-syntax test-end    (lambda (x)      (syntax-case (list x (list 'quote (%test-source-line2 x))) ()	(((mac suite-name) line)	 (syntax	  (%test-end suite-name line)))	(((mac) line)	 (syntax	  (%test-end #f line))))))  (define-syntax test-assert    (lambda (x)      (syntax-case (list x (list 'quote (%test-source-line2 x))) ()	(((mac tname expr) line)	 (syntax	  (let* ((r (test-runner-get))		 (name tname))	    (test-result-alist! r (cons (cons 'test-name tname) line))	    (%test-comp1body r expr))))	(((mac expr) line)	 (syntax	  (let* ((r (test-runner-get)))	    (test-result-alist! r line)	    (%test-comp1body r expr)))))))  (define-for-syntax (%test-comp2 comp x)    (syntax-case (list x (list 'quote (%test-source-line2 x)) comp) ()      (((mac tname expected expr) line comp)       (syntax	(let* ((r (test-runner-get))	       (name tname))	  (test-result-alist! r (cons (cons 'test-name tname) line))	  (%test-comp2body r comp expected expr))))      (((mac expected expr) line comp)       (syntax	(let* ((r (test-runner-get)))	  (test-result-alist! r line)	  (%test-comp2body r comp expected expr))))))  (define-syntax test-eqv    (lambda (x) (%test-comp2 (syntax eqv?) x)))  (define-syntax test-eq    (lambda (x) (%test-comp2 (syntax eq?) x)))  (define-syntax test-equal    (lambda (x) (%test-comp2 (syntax equal?) x)))  (define-syntax test-approximate ;; FIXME - needed for non-Kawa    (lambda (x)      (syntax-case (list x (list 'quote (%test-source-line2 x))) ()      (((mac tname expected expr error) line)       (syntax	(let* ((r (test-runner-get))	       (name tname))	  (test-result-alist! r (cons (cons 'test-name tname) line))	  (%test-comp2body r (%test-approximimate= error) expected expr))))      (((mac expected expr error) line)       (syntax	(let* ((r (test-runner-get)))	  (test-result-alist! r line)	  (%test-comp2body r (%test-approximimate= error) expected expr)))))))) (else  (define-syntax test-end    (syntax-rules ()      ((test-end)       (%test-end #f '()))      ((test-end suite-name)       (%test-end suite-name '()))))  (define-syntax test-assert    (syntax-rules ()      ((test-assert tname test-expression)       (let* ((r (test-runner-get))	      (name tname))	 (test-result-alist! r '((test-name . tname)))	 (%test-comp1body r test-expression)))      ((test-assert test-expression)       (let* ((r (test-runner-get)))	 (test-result-alist! r '())	 (%test-comp1body r test-expression)))))  (define-syntax %test-comp2    (syntax-rules ()      ((%test-comp2 comp tname expected expr)       (let* ((r (test-runner-get))	      (name tname))	 (test-result-alist! r (list (cons 'test-name tname)))	 (%test-comp2body r comp expected expr)))      ((%test-comp2 comp expected expr)       (let* ((r (test-runner-get)))	 (test-result-alist! r '())	 (%test-comp2body r comp expected expr)))))  (define-syntax test-equal    (syntax-rules ()      ((test-equal . rest)       (%test-comp2 equal? . rest))))  (define-syntax test-eqv    (syntax-rules ()      ((test-eqv . rest)       (%test-comp2 eqv? . rest))))  (define-syntax test-eq    (syntax-rules ()      ((test-eq . rest)       (%test-comp2 eq? . rest))))  (define-syntax test-approximate    (syntax-rules ()      ((test-approximate tname expected expr error)       (%test-comp2 (%test-approximimate= error) tname expected expr))      ((test-approximate expected expr error)       (%test-comp2 (%test-approximimate= error) expected expr))))))(cond-expand (guile  (define-syntax %test-error    (syntax-rules ()      ((%test-error r etype expr)       (%test-comp1body r (catch #t (lambda () expr) (lambda (key . args) #t))))))) (mzscheme  (define-syntax %test-error    (syntax-rules ()      ((%test-error r etype expr)       (%test-comp1body r (with-handlers (((lambda (h) #t) (lambda (h) #t)))					 (let ()					   (test-result-set! r 'actual-value expr)					   #f))))))) (chicken  (define-syntax %test-error    (syntax-rules ()      ((%test-error r etype expr)        (%test-comp1body r (condition-case expr (ex () #t))))))) (kawa  (define-syntax %test-error    (syntax-rules ()      ((%test-error r etype expr)       (let ()	 (if (%test-on-test-begin r)	     (let ((et etype))	       (test-result-set! r 'expected-error et)	       (%test-on-test-end r				  (try-catch				   (let ()				     (test-result-set! r 'actual-value expr)				     #f)				   (ex <java.lang.Throwable>				       (test-result-set! r 'actual-error ex)				       (cond ((and (instance? et <gnu.bytecode.ClassType>)						   (gnu.bytecode.ClassType:isSubclass et <java.lang.Throwable>))					      (instance? ex et))					     (else #t)))))	       (%test-report-result)))))))) ((and srfi-34 srfi-35)  (define-syntax %test-error    (syntax-rules ()      ((%test-error r etype expr)       (%test-comp1body r (guard (ex ((condition-type? etype)		   (and (condition? ex) (condition-has-type? ex etype)))		  ((procedure? etype)		   (etype ex))		  ((equal? type #t)		   #t)		  (else #t))	      expr)))))) (srfi-34  (define-syntax %test-error    (syntax-rules ()      ((%test-error r etype expr)       (%test-comp1body r (guard (ex (else #t)) expr)))))) (else  (define-syntax %test-error    (syntax-rules ()      ((%test-error r etype expr)       (begin	 ((test-runner-on-test-begin r) r)	 (test-result-set! r 'result-kind 'skip)	 (%test-report-result)))))))(cond-expand ((or kawa mzscheme)  (define-syntax test-error    (lambda (x)      (syntax-case (list x (list 'quote (%test-source-line2 x))) ()	(((mac tname etype expr) line)	 (syntax	  (let* ((r (test-runner-get))		 (name tname))	    (test-result-alist! r (cons (cons 'test-name tname) line))	    (%test-error r etype expr))))	(((mac etype expr) line)	 (syntax	  (let* ((r (test-runner-get)))	    (test-result-alist! r line)	    (%test-error r etype expr))))	(((mac expr) line)	 (syntax	  (let* ((r (test-runner-get)))	    (test-result-alist! r line)	    (%test-error r #t expr)))))))) (else  (define-syntax test-error    (syntax-rules ()      ((test-error name etype expr)       (test-assert name (%test-error etype expr)))      ((test-error etype expr)       (test-assert (%test-error etype expr)))      ((test-error expr)       (test-assert (%test-error #t expr)))))))(define (test-apply first . rest)  (if (test-runner? first)      (test-with-runner first (apply test-apply rest))      (let ((r (test-runner-current)))	(if r	    (let ((run-list (%test-runner-run-list r)))	      (cond ((null? rest)		     (%test-runner-run-list! r (reverse! run-list))		     (first)) ;; actually apply procedure thunk		    (else		     (%test-runner-run-list!		      r		      (if (eq? run-list #t) (list first) (cons first run-list)))		     (apply test-apply rest)		     (%test-runner-run-list! r run-list))))	    (let ((r (test-runner-create)))	      (test-with-runner r (apply test-apply first rest))	      ((test-runner-on-final r) r))))))(define-syntax test-with-runner  (syntax-rules ()    ((test-with-runner runner form ...)     (let ((saved-runner (test-runner-current)))       (dynamic-wind           (lambda () (test-runner-current runner))           (lambda () form ...)           (lambda () (test-runner-current saved-runner)))))));;; Predicates(define (%test-match-nth n count)  (let ((i 0))    (lambda (runner)      (set! i (+ i 1))      (and (>= i n) (< i (+ n count))))))(define-syntax test-match-nth  (syntax-rules ()    ((test-match-nth n)     (test-match-nth n 1))    ((test-match-nth n count)     (%test-match-nth n count))))(define (%test-match-all . pred-list)  (lambda (runner)    (let ((result #t))      (let loop ((l pred-list))	(if (null? l)	    result	    (begin	      (if (not ((car l) runner))		  (set! result #f))	      (loop (cdr l))))))))  (define-syntax test-match-all  (syntax-rules ()    ((test-match-all pred ...)     (%test-match-all (%test-as-specifier pred) ...))))(define (%test-match-any . pred-list)  (lambda (runner)    (let ((result #f))      (let loop ((l pred-list))	(if (null? l)	    result	    (begin	      (if ((car l) runner)		  (set! result #t))	      (loop (cdr l))))))))  (define-syntax test-match-any  (syntax-rules ()    ((test-match-any pred ...)     (%test-match-any (%test-as-specifier pred) ...))));; Coerce to a predicate function:(define (%test-as-specifier specifier)  (cond ((procedure? specifier) specifier)	((integer? specifier) (test-match-nth 1 specifier))	((string? specifier) (test-match-name specifier))	(else	 (error "not a valid test specifier"))))(define-syntax test-skip  (syntax-rules ()    ((test-skip pred ...)     (let ((runner (test-runner-get)))       (%test-runner-skip-list! runner				  (cons (test-match-all (%test-as-specifier pred)  ...)					(%test-runner-skip-list runner)))))))(define-syntax test-expect-fail  (syntax-rules ()    ((test-expect-fail pred ...)     (let ((runner (test-runner-get)))       (%test-runner-fail-list! runner				  (cons (test-match-all (%test-as-specifier pred)  ...)					(%test-runner-fail-list runner)))))))(define (test-match-name name)  (lambda (runner)    (equal? name (test-runner-test-name runner))))(define (test-read-eval-string string)  (let* ((port (open-input-string string))	 (form (read port)))    (if (eof-object? (read-char port))	(eval form)	(cond-expand	 (srfi-23 (error "(not at eof)"))	 (else "error")))))

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -