(use list :all)
(use test :all)
(run-tests
(define (test-drop)
(do
(assert-eq (drop 0 '(1 2 3)) '(1 2 3))
(assert-eq (drop 2 '(1 2 3)) '(3))
(assert-eq (drop 5 '(1 2 3)) '())))
(define (test-drop-while)
(do
(assert-eq (drop-while (lambda (a) (< a 3)) '(1 2 3 4 5)) '(3 4 5))
(assert-eq (drop-while (lambda (a) (< a 10)) '(1 2 3 4 5)) '())
(assert-eq (drop-while (lambda (a) (< a 0)) '(1 2 3 4 5)) '(1 2 3 4 5))))
(define (test-range)
(do
(assert-eq (range 5) '(0 1 2 3 4))
(assert-eq (range 0 5) '(0 1 2 3 4))
(assert-eq (range 0 10 2) '(0 2 4 6 8))
(assert-eq (range 0 -5 -1) '(0 -1 -2 -3 -4))
(assert-eq (range 0 -10 -2) '(0 -2 -4 -6 -8))
(assert-eq (range 0 0) ())))
(define (test-repeat)
(do
(assert-eq (repeat 0 'a) ())
(assert-eq (repeat 5 'a) '(a a a a a))))
(define (test-take)
(do
(assert-eq (take 0 '(1 2 3)) '())
(assert-eq (take 2 '(1 2 3)) '(1 2))
(assert-eq (take 5 '(1 2 3)) '(1 2 3))))
(define (test-take-while)
(do
(assert-eq (take-while (lambda (a) (< a 3)) '(1 2 3 4 5)) '(1 2))
(assert-eq (take-while (lambda (a) (< a 10)) '(1 2 3 4 5)) '(1 2 3 4 5))
(assert-eq (take-while (lambda (a) (< a 0)) '(1 2 3 4 5)) '())))
(define (test-zip)
(do
(assert-eq (zip '(1 2 3) '(4 5 6)) '((1 4) (2 5) (3 6)))
(assert-eq (zip '(1 2 3) '(4 5 6 7 8)) '((1 4) (2 5) (3 6)))
(assert-eq (zip '() '(4 5 6)) '())))
(define (test-zip-with)
(do
(assert-eq (zip-with + '(1 2 3) '(4 5 6)) '(5 7 9))
(assert-eq (zip-with + '(1 2 3) '(4 5 6 7 8)) '(5 7 9))
(assert-eq (zip-with + '() '(4 5 6)) '())))
(define (test-all)
(do
(assert (all id '()))
(assert (all id '(true true true)))
(assert-not (all id '(true true false)))))
(define (test-any)
(do
(assert-not (any id '()))
(assert (any id '(false true false)))
(assert-not (any id '(false false false)))))
(define (test-count)
(do
(assert-eq (count (lambda (a) (< a 3)) '(1 2 3 4 5)) 2)
(assert-eq (count (lambda (a) (< a 10)) '(1 2 3 4 5)) 5)
(assert-eq (count (lambda (a) (< a 0)) '(1 2 3 4 5)) 0)))
(define (test-each)
(do
(define counter 0)
(each (lambda (a) (define counter (+ counter a)))
'(1 2 3 4 5))
(assert-eq counter 15)))
(define (test-filter)
(do
(assert-eq (filter (lambda (a) (not (zero a))) '(1 0 2 0 3)) '(1 2 3))
(assert-eq (filter (lambda (a) (> a 10)) '(1 2 3)) '())))
(define (test-find)
(do
(assert-eq (find zero '(1 2 3 0)) 0)
(assert-eq (find zero '(1 2 3)) ())))
(define (test-foldl)
(do
(assert-eq (foldl + 0 '()) 0)
(assert-eq (foldl + 0 '(1 2 3)) 6)
(assert-eq (foldl list () '(a b c)) '(((() a) b) c))))
(define (test-foldr)
(do
(assert-eq (foldr + 0 '()) 0)
(assert-eq (foldr + 0 '(1 2 3)) 6)
(assert-eq (foldr list () '(a b c)) '(a (b (c ()))))))
(define (test-index)
(do
(assert-eq (index zero '(1 2 3 0)) 3)
(assert-eq (index zero '(1 2 3)) ())))
(define (test-map)
(do
(assert-eq (map - '(1 2 3)) '(-1 -2 -3))
(assert-eq (map id ()) ())))
)