From 80eba4e572e5b5936bfca97b9f4b9dfb47bb0e70 Mon Sep 17 00:00:00 2001 From: Kevin Ryde Date: Fri, 11 Feb 2005 21:40:32 +0000 Subject: [PATCH] (reduce, reduce-right): New tests. --- test-suite/tests/srfi-1.test | 108 +++++++++++++++++++++++++++++++++++ 1 file changed, 108 insertions(+) diff --git a/test-suite/tests/srfi-1.test b/test-suite/tests/srfi-1.test index 17f51c1f1..065e8a977 100644 --- a/test-suite/tests/srfi-1.test +++ b/test-suite/tests/srfi-1.test @@ -1082,6 +1082,114 @@ (and (= (length odd) 10000) (= (length even) 0)))))) +;; +;; reduce +;; + +(with-test-prefix "reduce" + + (pass-if "empty" + (let* ((calls '()) + (ret (reduce (lambda (x prev) + (set! calls (cons (list x prev) calls)) + x) + 1 '()))) + (and (equal? calls '()) + (equal? ret 1)))) + + (pass-if "one elem" + (let* ((calls '()) + (ret (reduce (lambda (x prev) + (set! calls (cons (list x prev) calls)) + x) + 1 '(2)))) + (and (equal? calls '()) + (equal? ret 2)))) + + (pass-if "two elems" + (let* ((calls '()) + (ret (reduce (lambda (x prev) + (set! calls (cons (list x prev) calls)) + x) + 1 '(2 3)))) + (and (equal? calls '((3 2))) + (equal? ret 3)))) + + (pass-if "three elems" + (let* ((calls '()) + (ret (reduce (lambda (x prev) + (set! calls (cons (list x prev) calls)) + x) + 1 '(2 3 4)))) + (and (equal? calls '((4 3) + (3 2))) + (equal? ret 4)))) + + (pass-if "four elems" + (let* ((calls '()) + (ret (reduce (lambda (x prev) + (set! calls (cons (list x prev) calls)) + x) + 1 '(2 3 4 5)))) + (and (equal? calls '((5 4) + (4 3) + (3 2))) + (equal? ret 5))))) + +;; +;; reduce-right +;; + +(with-test-prefix "reduce-right" + + (pass-if "empty" + (let* ((calls '()) + (ret (reduce-right (lambda (x prev) + (set! calls (cons (list x prev) calls)) + x) + 1 '()))) + (and (equal? calls '()) + (equal? ret 1)))) + + (pass-if "one elem" + (let* ((calls '()) + (ret (reduce-right (lambda (x prev) + (set! calls (cons (list x prev) calls)) + x) + 1 '(2)))) + (and (equal? calls '()) + (equal? ret 2)))) + + (pass-if "two elems" + (let* ((calls '()) + (ret (reduce-right (lambda (x prev) + (set! calls (cons (list x prev) calls)) + x) + 1 '(2 3)))) + (and (equal? calls '((2 3))) + (equal? ret 2)))) + + (pass-if "three elems" + (let* ((calls '()) + (ret (reduce-right (lambda (x prev) + (set! calls (cons (list x prev) calls)) + x) + 1 '(2 3 4)))) + (and (equal? calls '((2 3) + (3 4))) + (equal? ret 2)))) + + (pass-if "four elems" + (let* ((calls '()) + (ret (reduce-right (lambda (x prev) + (set! calls (cons (list x prev) calls)) + x) + 1 '(2 3 4 5)))) + (and (equal? calls '((2 3) + (3 4) + (4 5))) + (equal? ret 2))))) + ;; ;; remove ;;