Add (anything) to tests that match... anything

This commit is contained in:
Dane Johnson 2025-09-11 12:16:13 -05:00
parent 96d406d98b
commit c6332cd371
2 changed files with 22 additions and 6 deletions

View File

@ -1,21 +1,33 @@
(define-module (d- test) (define-module (d- test)
#:use-module (srfi srfi-1)
#:use-module (ice-9 format) #:use-module (ice-9 format)
#:use-module (ice-9 control) #:use-module (ice-9 control)
#:export (define-test-suite)) #:export (define-test-suite anything))
(define *anysym* (gensym))
(define (anything) *anysym*)
(define (assert expected actual eq? fail) (define (assert expected actual eq? fail)
(when (not (eq? expected actual)) (when (and (not (eq? expected actual)))
(format #t "fail - expected ~a but got ~a" expected actual) (format #t "fail - expected ~a but got ~a" expected actual)
(newline) (newline)
(fail))) (fail)))
(define (equal-or-any? expected actual)
(cond
[(eq? *anysym* expected) #t]
[(or (not (list? expected))
(not (list? actual)))
(equal? expected actual)]
[else (every equal-or-any? expected actual)]))
(define-syntax define-test-suite (define-syntax define-test-suite
(lambda (stx) (lambda (stx)
(with-syntax ([fail (datum->syntax stx 'fail)]) (with-syntax ([fail (datum->syntax stx 'fail)])
(define (assert-stx expr) (define (assert-stx expr)
(syntax-case expr (assert-equal assert-not-equal assert-unspecified) (syntax-case expr (assert-equal assert-not-equal assert-unspecified)
[(assert-equal e a) #'(assert e a equal? fail)] [(assert-equal e a) #'(assert e a equal-or-any? fail)]
[(assert-not-equal e a) #'(assert e a (compose not equal?) fail)] [(assert-not-equal e a) #'(assert e a (compose not equal-or-any?) fail)]
[(assert-unspecified v) #'(assert (when #f 'a) v eq? fail)] [(assert-unspecified v) #'(assert (when #f 'a) v eq? fail)]
[else #'else])) [else #'else]))
(define (define-test-stx test) (define (define-test-stx test)

View File

@ -1,7 +1,7 @@
(use-modules (d-) (use-modules (d-)
(d- test)
(d- json) (d- json)
(srfi srfi-1)) (srfi srfi-1)
(d- test))
(define-test-suite "~>" (define-test-suite "~>"
(define-test "unwrapped" (define-test "unwrapped"
@ -116,6 +116,10 @@
(list betty ethel joan kitty mary))) (list betty ethel joan kitty mary)))
(assert-equal '(3 5 2 1 4) (liars)))) (assert-equal '(3 5 2 1 4) (liars))))
(define-test-suite "test"
(define-test "anything"
(assert-equal `(dog ,(anything)) '(dog cat))))
(define-test-suite "json" (define-test-suite "json"
(define-test "boolean" (define-test "boolean"
(assert-equal #t (json "true")) (assert-equal #t (json "true"))