d-/test.scm

57 lines
1.3 KiB
Scheme

(use-modules (d-)
(rnrs base))
(define-syntax-rule (define-unit-test (test-name body ...))
(let () body ...))
(define-syntax-rule (define-test module-name tests ...)
(begin (define-unit-test tests) ...))
(define-test ~>
(unwrapped
(define value (~> 1 1+ 1+))
(assert (= value 3)))
(wrapped
(define value (~> 1 (/ 2) (/ 2)))
(assert (= value 1/4))))
(define-test ~>>
(unwrapped
(define value (~>> 1 1+ 1+))
(assert (= value 3)))
(wrapped
(define value (~>> 1 (/ 2) (/ 2)))
(assert (= value 1))))
(define-test if-not
(assert (eq? (if-not #f 'a 'b) 'a)))
(define-test when-not
(positive-case
(assert (eq? (when-not #f 'do-some-stuff 'return) 'return)))
(negative-case
(assert (unspecified? (when-not #t 'do-some-stuff 'return)))))
(define-test for
(permutation
(define value (for ([i (iota 2)]
[j (iota 2)])
(cons i j)))
(assert (equal? value '((0 . 0) (0 . 1) (1 . 0) (1 . 1))))))
(define-test if-let
(positive-case
(assert (= (if-let ([v (or #f 1)]) (+ v 1)) 2)))
(negative-case
(assert (not (if-let ([v (and #f 1)]) (+ v 1))))))
(define-test partial
(test
(define value (partial / 2))
(assert (= (value 4) 1/2))
(assert (= (value 1) 2))))
(define-test argmin
(test
(assert (equal? (argmin cdr < '(a . 5) '(b . 2) '(c . 3)) '(b . 2)))))