aboutsummaryrefslogtreecommitdiffstats
path: root/testing.csc
diff options
context:
space:
mode:
Diffstat (limited to 'testing.csc')
-rw-r--r--testing.csc101
1 files changed, 34 insertions, 67 deletions
diff --git a/testing.csc b/testing.csc
index f221388..aebc574 100644
--- a/testing.csc
+++ b/testing.csc
@@ -1,19 +1,13 @@
(define-library (csc testing)
(export
- define-test
- errorf
- fatalf
- test-main
- subtest)
+ assert
+ assert-equal
+ test
+ test-main)
(import (scheme base)
(only (csc format)
- printf
- sprintf)
- (only (csc vec)
- vec
- vec-append
- vec-length
- vec-ref))
+ printf
+ sprintf))
(begin
@@ -24,19 +18,9 @@
(define-record-type <test-handle>
- (make-test-handle test-name subtest-name succeeded subtests-succeeded)
+ (make-test-handle test-name)
test-handle?
- (test-name base-test-name)
- (subtest-name subtest-name)
- (succeeded test-succeeded? set-succeeded!)
- (subtests-succeeded subtests-succeeded set-subtests-succeeded!))
-
-
- (define (test-name t)
- (let ((sn (subtest-name t)))
- (if (equal? sn "")
- (base-test-name t)
- (sprintf "{}/{}" (base-test-name t) sn))))
+ (test-name test-name set-name!))
(define-record-type <test-error>
@@ -44,58 +28,41 @@
test-error?)
- (define-syntax define-test
+ (define *test-handle* (make-test-handle "global"))
+
+
+ (define-syntax test
(syntax-rules ()
- ((_ (name t) body ...)
- (let ((t (make-test-handle (symbol->string 'name) "" #t (vec))))
- (printf "=== RUN {}\n" 'name)
- (guard (e ((test-error? e))
- #;(else
- (errorf t "{}" e)))
- body ...)
- (if (test-succeeded? t)
- (printf "--- PASS: {}\n" 'name)
- (begin
- (printf "--- FAIL: {}\n" 'name)
- (set-all-succeeded! #f)))
- (do ((i 0 (+ 1 i)))
- ((>= i (vec-length (subtests-succeeded t))))
- (printf " --- {}: {}/{}\n"
- (if (cdr (vec-ref (subtests-succeeded t) i)) "PASS" "FAIL")
- 'name
- (car (vec-ref (subtests-succeeded t) i))))))))
+ ((test name body body* ...)
+ (begin
+ (set-name! *test-handle* (symbol->string 'name))
+ (printf "=== RUN {}\n" 'name)
+ (guard (e ((test-error? e)
+ (printf "--- FAIL: {}\n" 'name)
+ (set-all-succeeded! #f)))
+ body body* ...
+ (printf "--- PASS: {}\n" 'name))))))
- (define-syntax subtest
- (syntax-rules ()
- ((_ t name body ...)
- (let ((old-t t)
- (t (make-test-handle (test-name t) name #t (vec))))
- (printf "=== RUN {}\n" (test-name t))
- (guard (e ((test-error? e))
- #;(else
- (errorf t "{}" e)))
- body ...)
- (let ((succ (test-succeeded? t)))
- (set-subtests-succeeded! old-t (vec-append (subtests-succeeded old-t) (cons name succ)))
- (unless succ
- (set-succeeded! old-t #f)))))))
+ (define (fatalf format-string . format-args)
+ (printf "{}: {}\n" (test-name *test-handle*) (apply sprintf format-string format-args))
+ (raise (make-test-error)))
- (define-syntax errorf
+ (define-syntax assert
(syntax-rules ()
- ((_ t format-string format-args ...)
- (begin
- (set-succeeded! t #f)
- (printf "{}: {}\n" (test-name t) (sprintf format-string format-args ...))))))
+ ((assert expr)
+ (unless expr
+ (fatalf "Assertion {} failed." 'expr)))))
- (define-syntax fatalf
+ (define-syntax assert-equal
(syntax-rules ()
- ((_ t format-string format-args ...)
- (begin
- (errorf t format-string format-args ...)
- (raise (make-test-error))))))
+ ((assert-equal left right)
+ (let ((x left)
+ (y right))
+ (unless (equal? x y)
+ (fatalf "Fatal: {} is not equal to {}.\nleft is {}\nright is {}" 'left 'right x y))))))
(define (test-main)