~ chicken-core (chicken-5) 5176cac7f58c56dc9636ada7b1dc8364d8b06545
commit 5176cac7f58c56dc9636ada7b1dc8364d8b06545
Author: megane <meganeka@gmail.com>
AuthorDate: Tue Sep 18 11:30:45 2018 +0300
Commit: felix <felix@call-with-current-continuation.org>
CommitDate: Tue Oct 2 12:21:17 2018 +0200
* tests/scrutinizer-tests.scm (test): Add more information to failure messages
Signed-off-by: Peter Bex <peter@more-magic.net>
Signed-off-by: felix <felix@call-with-current-continuation.org>
diff --git a/tests/scrutinizer-tests.scm b/tests/scrutinizer-tests.scm
index ed313a49..94ce66bd 100644
--- a/tests/scrutinizer-tests.scm
+++ b/tests/scrutinizer-tests.scm
@@ -9,6 +9,10 @@
(define-syntax test
(er-macro-transformer
(lambda (expr rename _)
+ (define extra-fail-info '())
+ (define (add-fail-info msg)
+ (set! extra-fail-info (cons (string-append " " msg) extra-fail-info))
+ #f)
(define pass
(let loop ((e (cadr expr)))
(case (car e)
@@ -18,25 +22,36 @@
((<=) (and (type<=? (cadr e) (caddr e))
(match-types (caddr e) (cadr e))))
;; subtype
- ((<) (and (type<=? (cadr e) (caddr e))
- (match-types (caddr e) (cadr e))
- (not (type<=? (caddr e) (cadr e)))))
+ ((<) (and (or (type<=? (cadr e) (caddr e))
+ (add-fail-info "<= returned #f"))
+ (or (match-types (caddr e) (cadr e))
+ (add-fail-info ">= returned #f"))
+ (or (not (type<=? (caddr e) (cadr e)))
+ (add-fail-info "not >= returned #f"))))
;; type equality
- ((=) (and (type<=? (cadr e) (caddr e))
- (type<=? (caddr e) (cadr e))))
+ ((=) (and (or (type<=? (cadr e) (caddr e))
+ (add-fail-info "<= failed"))
+ (or (type<=? (caddr e) (cadr e))
+ (add-fail-info ">= failed"))))
;; fuzzy match (both directions)
((?) (and (match-types (cadr e) (caddr e))
(match-types (caddr e) (cadr e))))
;; fuzzy non-match (both directions)
- ((!) (and (not (match-types (cadr e) (caddr e)))
- (not (match-types (caddr e) (cadr e)))))
+ ((!) (and (or (not (match-types (cadr e) (caddr e)))
+ (add-fail-info ">= was true"))
+ (or (not (match-types (caddr e) (cadr e)))
+ (add-fail-info "<= was true"))))
;; strict non-match (both directions)
((><) (and (not (type<=? (cadr e) (caddr e)))
(not (type<=? (caddr e) (cadr e)))))
;; A refined with B gives C
- ((~>) (equal? (refine-types (cadr e) (caddr e))
- (cadddr e))))))
+ ((~>) (let ((t (refine-types (cadr e) (caddr e))))
+ (or (equal? t (cadddr e))
+ (add-fail-info
+ (format "Refined to `~a', but expected `~a'" t (cadddr e)) )))))))
(printf "[~a] ~a~n" (if pass " OK " "FAIL") (cadr expr))
+ (unless pass
+ (for-each print extra-fail-info))
(when (not pass) (set! success #f))
(rename '(void)))))
Trap