(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)))))