aboutsummaryrefslogtreecommitdiff
path: root/src/clojure/contrib/test_clojure/sequences.clj
diff options
context:
space:
mode:
Diffstat (limited to 'src/clojure/contrib/test_clojure/sequences.clj')
-rw-r--r--src/clojure/contrib/test_clojure/sequences.clj982
1 files changed, 0 insertions, 982 deletions
diff --git a/src/clojure/contrib/test_clojure/sequences.clj b/src/clojure/contrib/test_clojure/sequences.clj
deleted file mode 100644
index 762e157a..00000000
--- a/src/clojure/contrib/test_clojure/sequences.clj
+++ /dev/null
@@ -1,982 +0,0 @@
-;; Copyright (c) Frantisek Sodomka. All rights reserved. The use and
-;; distribution terms for this software are covered by the Eclipse Public
-;; License 1.0 (http://opensource.org/licenses/eclipse-1.0.php) which can
-;; be found in the file epl-v10.html at the root of this distribution. By
-;; using this software in any fashion, you are agreeing to be bound by the
-;; terms of this license. You must not remove this notice, or any other,
-;; from this software.
-;;
-
-(ns clojure.contrib.test-clojure.sequences
- (:use clojure.contrib.test-is))
-
-
-;; *** Tests ***
-
-; TODO:
-; apply, map, reduce, filter, remove
-; and more...
-
-
-(deftest test-equality
- ; lazy sequences
- (are [x y] (= x y)
- ; fixed SVN 1288 - LazySeq and EmptyList equals/equiv
- ; http://groups.google.com/group/clojure/browse_frm/thread/286d807be9cae2a5#
- (map inc nil) ()
- (map inc ()) ()
- (map inc []) ()
- (map inc #{}) ()
- (map inc {}) () ))
-
-
-(deftest test-lazy-seq
- (are [x] (seq? x)
- (lazy-seq nil)
- (lazy-seq [])
- (lazy-seq [1 2]))
-
- (are [x y] (= x y)
- (lazy-seq nil) ()
- (lazy-seq [nil]) '(nil)
-
- (lazy-seq ()) ()
- (lazy-seq []) ()
- (lazy-seq #{}) ()
- (lazy-seq {}) ()
- (lazy-seq "") ()
- (lazy-seq (into-array [])) ()
-
- (lazy-seq (list 1 2)) '(1 2)
- (lazy-seq [1 2]) '(1 2)
- (lazy-seq (sorted-set 1 2)) '(1 2)
- (lazy-seq (sorted-map :a 1 :b 2)) '([:a 1] [:b 2])
- (lazy-seq "abc") '(\a \b \c)
- (lazy-seq (into-array [1 2])) '(1 2) ))
-
-
-(deftest test-seq
- (is (not (seq? (seq []))))
- (is (seq? (seq [1 2])))
-
- (are [x y] (= x y)
- (seq nil) nil
- (seq [nil]) '(nil)
-
- (seq ()) nil
- (seq []) nil
- (seq #{}) nil
- (seq {}) nil
- (seq "") nil
- (seq (into-array [])) nil
-
- (seq (list 1 2)) '(1 2)
- (seq [1 2]) '(1 2)
- (seq (sorted-set 1 2)) '(1 2)
- (seq (sorted-map :a 1 :b 2)) '([:a 1] [:b 2])
- (seq "abc") '(\a \b \c)
- (seq (into-array [1 2])) '(1 2) ))
-
-
-(deftest test-cons
- (is (thrown? IllegalArgumentException (cons 1 2)))
- (are [x y] (= x y)
- (cons 1 nil) '(1)
- (cons nil nil) '(nil)
-
- (cons \a nil) '(\a)
- (cons \a "") '(\a)
- (cons \a "bc") '(\a \b \c)
-
- (cons 1 ()) '(1)
- (cons 1 '(2 3)) '(1 2 3)
-
- (cons 1 []) [1]
- (cons 1 [2 3]) [1 2 3]
-
- (cons 1 #{}) '(1)
- (cons 1 (sorted-set 2 3)) '(1 2 3)
-
- (cons 1 (into-array [])) '(1)
- (cons 1 (into-array [2 3])) '(1 2 3) ))
-
-
-(deftest test-empty
- (are [x y] (and (= (empty x) y)
- (= (class (empty x)) (class y)))
- nil nil
-
- () ()
- '(1 2) ()
-
- [] []
- [1 2] []
-
- {} {}
- {:a 1 :b 2} {}
-
- #{} #{}
- #{1 2} #{}
-
- (seq ()) nil ; (seq ()) => nil
- (seq '(1 2)) ()
-
- (seq []) nil ; (seq []) => nil
- (seq [1 2]) ()
-
- (seq "") nil ; (seq "") => nil
- (seq "ab") ()
-
- (lazy-seq ()) ()
- (lazy-seq '(1 2)) ()
-
- (lazy-seq []) ()
- (lazy-seq [1 2]) ()
-
- ; non-coll, non-seq => nil
- 42 nil
- 1.2 nil
- "abc" nil ))
-
-
-(deftest test-not-empty
- ; empty coll/seq => nil
- (are [x] (= (not-empty x) nil)
- ()
- []
- {}
- #{}
- (seq ())
- (seq [])
- (lazy-seq ())
- (lazy-seq []) )
-
- ; non-empty coll/seq => identity
- (are [x] (and (= (not-empty x) x)
- (= (class (not-empty x)) (class x)))
- '(1 2)
- [1 2]
- {:a 1}
- #{1 2}
- (seq '(1 2))
- (seq [1 2])
- (lazy-seq '(1 2))
- (lazy-seq [1 2]) ))
-
-
-(deftest test-first
- (is (thrown? IllegalArgumentException (first)))
- (is (thrown? IllegalArgumentException (first true)))
- (is (thrown? IllegalArgumentException (first false)))
- (is (thrown? IllegalArgumentException (first 1)))
- (is (thrown? IllegalArgumentException (first 1 2)))
- (is (thrown? IllegalArgumentException (first \a)))
- (is (thrown? IllegalArgumentException (first 's)))
- (is (thrown? IllegalArgumentException (first :k)))
- (are [x y] (= x y)
- (first nil) nil
-
- ; string
- (first "") nil
- (first "a") \a
- (first "abc") \a
-
- ; list
- (first ()) nil
- (first '(1)) 1
- (first '(1 2 3)) 1
-
- (first '(nil)) nil
- (first '(1 nil)) 1
- (first '(nil 2)) nil
- (first '(())) ()
- (first '(() nil)) ()
- (first '(() 2 nil)) ()
-
- ; vector
- (first []) nil
- (first [1]) 1
- (first [1 2 3]) 1
-
- (first [nil]) nil
- (first [1 nil]) 1
- (first [nil 2]) nil
- (first [[]]) []
- (first [[] nil]) []
- (first [[] 2 nil]) []
-
- ; set
- (first #{}) nil
- (first #{1}) 1
- (first (sorted-set 1 2 3)) 1
-
- (first #{nil}) nil
- (first (sorted-set 1 nil)) nil
- (first (sorted-set nil 2)) nil
- (first #{#{}}) #{}
- (first (sorted-set #{} nil)) nil
- ;(first (sorted-set #{} 2 nil)) nil
-
- ; map
- (first {}) nil
- (first (sorted-map :a 1)) '(:a 1)
- (first (sorted-map :a 1 :b 2 :c 3)) '(:a 1)
-
- ; array
- (first (into-array [])) nil
- (first (into-array [1])) 1
- (first (into-array [1 2 3])) 1
- (first (to-array [nil])) nil
- (first (to-array [1 nil])) 1
- (first (to-array [nil 2])) nil ))
-
-
-(deftest test-next
- (is (thrown? IllegalArgumentException (next)))
- (is (thrown? IllegalArgumentException (next true)))
- (is (thrown? IllegalArgumentException (next false)))
- (is (thrown? IllegalArgumentException (next 1)))
- (is (thrown? IllegalArgumentException (next 1 2)))
- (is (thrown? IllegalArgumentException (next \a)))
- (is (thrown? IllegalArgumentException (next 's)))
- (is (thrown? IllegalArgumentException (next :k)))
- (are [x y] (= x y)
- (next nil) nil
-
- ; string
- (next "") nil
- (next "a") nil
- (next "abc") '(\b \c)
-
- ; list
- (next ()) nil
- (next '(1)) nil
- (next '(1 2 3)) '(2 3)
-
- (next '(nil)) nil
- (next '(1 nil)) '(nil)
- (next '(1 ())) '(())
- (next '(nil 2)) '(2)
- (next '(())) nil
- (next '(() nil)) '(nil)
- (next '(() 2 nil)) '(2 nil)
-
- ; vector
- (next []) nil
- (next [1]) nil
- (next [1 2 3]) [2 3]
-
- (next [nil]) nil
- (next [1 nil]) [nil]
- (next [1 []]) [[]]
- (next [nil 2]) [2]
- (next [[]]) nil
- (next [[] nil]) [nil]
- (next [[] 2 nil]) [2 nil]
-
- ; set
- (next #{}) nil
- (next #{1}) nil
- (next (sorted-set 1 2 3)) '(2 3)
-
- (next #{nil}) nil
- (next (sorted-set 1 nil)) '(1)
- (next (sorted-set nil 2)) '(2)
- (next #{#{}}) nil
- (next (sorted-set #{} nil)) '(#{})
- ;(next (sorted-set #{} 2 nil)) #{}
-
- ; map
- (next {}) nil
- (next (sorted-map :a 1)) nil
- (next (sorted-map :a 1 :b 2 :c 3)) '((:b 2) (:c 3))
-
- ; array
- (next (into-array [])) nil
- (next (into-array [1])) nil
- (next (into-array [1 2 3])) '(2 3)
-
- (next (to-array [nil])) nil
- (next (to-array [1 nil])) '(nil)
- ;(next (to-array [1 (into-array [])])) (list (into-array []))
- (next (to-array [nil 2])) '(2)
- (next (to-array [(into-array [])])) nil
- (next (to-array [(into-array []) nil])) '(nil)
- (next (to-array [(into-array []) 2 nil])) '(2 nil) ))
-
-
-(deftest test-last
- (are [x y] (= x y)
- (last nil) nil
-
- ; list
- (last ()) nil
- (last '(1)) 1
- (last '(1 2 3)) 3
-
- (last '(nil)) nil
- (last '(1 nil)) nil
- (last '(nil 2)) 2
- (last '(())) ()
- (last '(() nil)) nil
- (last '(() 2 nil)) nil
-
- ; vector
- (last []) nil
- (last [1]) 1
- (last [1 2 3]) 3
-
- (last [nil]) nil
- (last [1 nil]) nil
- (last [nil 2]) 2
- (last [[]]) []
- (last [[] nil]) nil
- (last [[] 2 nil]) nil
-
- ; set
- (last #{}) nil
- (last #{1}) 1
- (last (sorted-set 1 2 3)) 3
-
- (last #{nil}) nil
- (last (sorted-set 1 nil)) 1
- (last (sorted-set nil 2)) 2
- (last #{#{}}) #{}
- (last (sorted-set #{} nil)) #{}
- ;(last (sorted-set #{} 2 nil)) nil
-
- ; map
- (last {}) nil
- (last (sorted-map :a 1)) [:a 1]
- (last (sorted-map :a 1 :b 2 :c 3)) [:c 3]
-
- ; string
- (last "") nil
- (last "a") \a
- (last "abc") \c
-
- ; array
- (last (into-array [])) nil
- (last (into-array [1])) 1
- (last (into-array [1 2 3])) 3
- (last (to-array [nil])) nil
- (last (to-array [1 nil])) nil
- (last (to-array [nil 2])) 2 ))
-
-
-;; (ffirst coll) = (first (first coll))
-;;
-(deftest test-ffirst
- (is (thrown? IllegalArgumentException (ffirst)))
- (are [x y] (= x y)
- (ffirst nil) nil
-
- (ffirst ()) nil
- (ffirst '((1 2) (3 4))) 1
-
- (ffirst []) nil
- (ffirst [[1 2] [3 4]]) 1
-
- (ffirst {}) nil
- (ffirst {:a 1}) :a
-
- (ffirst #{}) nil
- (ffirst #{[1 2]}) 1 ))
-
-
-;; (fnext coll) = (first (next coll)) = (second coll)
-;;
-(deftest test-fnext
- (is (thrown? IllegalArgumentException (fnext)))
- (are [x y] (= x y)
- (fnext nil) nil
-
- (fnext ()) nil
- (fnext '(1)) nil
- (fnext '(1 2 3 4)) 2
-
- (fnext []) nil
- (fnext [1]) nil
- (fnext [1 2 3 4]) 2
-
- (fnext {}) nil
- (fnext (sorted-map :a 1)) nil
- (fnext (sorted-map :a 1 :b 2)) [:b 2]
-
- (fnext #{}) nil
- (fnext #{1}) nil
- (fnext (sorted-set 1 2 3 4)) 2 ))
-
-
-;; (nfirst coll) = (next (first coll))
-;;
-(deftest test-nfirst
- (is (thrown? IllegalArgumentException (nfirst)))
- (are [x y] (= x y)
- (nfirst nil) nil
-
- (nfirst ()) nil
- (nfirst '((1 2 3) (4 5 6))) '(2 3)
-
- (nfirst []) nil
- (nfirst [[1 2 3] [4 5 6]]) '(2 3)
-
- (nfirst {}) nil
- (nfirst {:a 1}) '(1)
-
- (nfirst #{}) nil
- (nfirst #{[1 2]}) '(2) ))
-
-
-;; (nnext coll) = (next (next coll))
-;;
-(deftest test-nnext
- (is (thrown? IllegalArgumentException (nnext)))
- (are [x y] (= x y)
- (nnext nil) nil
-
- (nnext ()) nil
- (nnext '(1)) nil
- (nnext '(1 2)) nil
- (nnext '(1 2 3 4)) '(3 4)
-
- (nnext []) nil
- (nnext [1]) nil
- (nnext [1 2]) nil
- (nnext [1 2 3 4]) '(3 4)
-
- (nnext {}) nil
- (nnext (sorted-map :a 1)) nil
- (nnext (sorted-map :a 1 :b 2)) nil
- (nnext (sorted-map :a 1 :b 2 :c 3 :d 4)) '([:c 3] [:d 4])
-
- (nnext #{}) nil
- (nnext #{1}) nil
- (nnext (sorted-set 1 2)) nil
- (nnext (sorted-set 1 2 3 4)) '(3 4) ))
-
-
-(deftest test-nth
- ; maps, sets are not supported
- (is (thrown? UnsupportedOperationException (nth {} 0)))
- (is (thrown? UnsupportedOperationException (nth {:a 1 :b 2} 0)))
- (is (thrown? UnsupportedOperationException (nth #{} 0)))
- (is (thrown? UnsupportedOperationException (nth #{1 2 3} 0)))
-
- ; out of bounds
- (is (thrown? IndexOutOfBoundsException (nth '() 0)))
- (is (thrown? IndexOutOfBoundsException (nth '(1 2 3) 5)))
- (is (thrown? IndexOutOfBoundsException (nth '() -1)))
- (is (thrown? IndexOutOfBoundsException (nth '(1 2 3) -1)))
-
- (is (thrown? IndexOutOfBoundsException (nth [] 0)))
- (is (thrown? IndexOutOfBoundsException (nth [1 2 3] 5)))
- (is (thrown? IndexOutOfBoundsException (nth [] -1)))
- (is (thrown? ArrayIndexOutOfBoundsException (nth [1 2 3] -1))) ; ???
-
- (is (thrown? ArrayIndexOutOfBoundsException (nth (into-array []) 0)))
- (is (thrown? ArrayIndexOutOfBoundsException (nth (into-array [1 2 3]) 5)))
- (is (thrown? ArrayIndexOutOfBoundsException (nth (into-array []) -1)))
- (is (thrown? ArrayIndexOutOfBoundsException (nth (into-array [1 2 3]) -1)))
-
- (is (thrown? StringIndexOutOfBoundsException (nth "" 0)))
- (is (thrown? StringIndexOutOfBoundsException (nth "abc" 5)))
- (is (thrown? StringIndexOutOfBoundsException (nth "" -1)))
- (is (thrown? StringIndexOutOfBoundsException (nth "abc" -1)))
-
- (is (thrown? IndexOutOfBoundsException (nth (java.util.ArrayList. []) 0)))
- (is (thrown? IndexOutOfBoundsException (nth (java.util.ArrayList. [1 2 3]) 5)))
- (is (thrown? ArrayIndexOutOfBoundsException (nth (java.util.ArrayList. []) -1))) ; ???
- (is (thrown? ArrayIndexOutOfBoundsException (nth (java.util.ArrayList. [1 2 3]) -1))) ; ???
-
- (are [x y] (= x y)
- (nth '(1) 0) 1
- (nth '(1 2 3) 0) 1
- (nth '(1 2 3 4 5) 1) 2
- (nth '(1 2 3 4 5) 4) 5
- (nth '(1 2 3) 5 :not-found) :not-found
-
- (nth [1] 0) 1
- (nth [1 2 3] 0) 1
- (nth [1 2 3 4 5] 1) 2
- (nth [1 2 3 4 5] 4) 5
- (nth [1 2 3] 5 :not-found) :not-found
-
- (nth (into-array [1]) 0) 1
- (nth (into-array [1 2 3]) 0) 1
- (nth (into-array [1 2 3 4 5]) 1) 2
- (nth (into-array [1 2 3 4 5]) 4) 5
- (nth (into-array [1 2 3]) 5 :not-found) :not-found
-
- (nth "a" 0) \a
- (nth "abc" 0) \a
- (nth "abcde" 1) \b
- (nth "abcde" 4) \e
- (nth "abc" 5 :not-found) :not-found
-
- (nth (java.util.ArrayList. [1]) 0) 1
- (nth (java.util.ArrayList. [1 2 3]) 0) 1
- (nth (java.util.ArrayList. [1 2 3 4 5]) 1) 2
- (nth (java.util.ArrayList. [1 2 3 4 5]) 4) 5
- (nth (java.util.ArrayList. [1 2 3]) 5 :not-found) :not-found )
-
- ; regex Matchers
- (let [m (re-matcher #"(a)(b)" "ababaa")]
- (re-find m) ; => ["ab" "a" "b"]
- (are [x y] (= x y)
- (nth m 0) "ab"
- (nth m 1) "a"
- (nth m 2) "b"
- (nth m 3 :not-found) :not-found
- (nth m -1 :not-found) :not-found )
- (is (thrown? IndexOutOfBoundsException (nth m 3)))
- (is (thrown? IndexOutOfBoundsException (nth m -1))))
-
- (let [m (re-matcher #"c" "ababaa")]
- (re-find m) ; => nil
- (are [x y] (= x y)
- (nth m 0 :not-found) :not-found
- (nth m 2 :not-found) :not-found
- (nth m -1 :not-found) :not-found )
- (is (thrown? IllegalStateException (nth m 0)))
- (is (thrown? IllegalStateException (nth m 2)))
- (is (thrown? IllegalStateException (nth m -1)))))
-
-
-; distinct was broken for nil & false:
-; fixed in rev 1278:
-; http://code.google.com/p/clojure/source/detail?r=1278
-;
-(deftest test-distinct
- (are [x y] (= x y)
- (distinct ()) ()
- (distinct '(1)) '(1)
- (distinct '(1 2 3)) '(1 2 3)
- (distinct '(1 2 3 1 1 1)) '(1 2 3)
- (distinct '(1 1 1 2)) '(1 2)
- (distinct '(1 2 1 2)) '(1 2)
-
- (distinct []) ()
- (distinct [1]) '(1)
- (distinct [1 2 3]) '(1 2 3)
- (distinct [1 2 3 1 2 2 1 1]) '(1 2 3)
- (distinct [1 1 1 2]) '(1 2)
- (distinct [1 2 1 2]) '(1 2)
-
- (distinct "") ()
- (distinct "a") '(\a)
- (distinct "abc") '(\a \b \c)
- (distinct "abcabab") '(\a \b \c)
- (distinct "aaab") '(\a \b)
- (distinct "abab") '(\a \b) )
-
- (are [x] (= (distinct [x x]) [x])
- nil
- false true
- 0 42
- 0.0 3.14
- 2/3
- 0M 1M
- \c
- "" "abc"
- 'sym
- :kw
- () '(1 2)
- [] [1 2]
- {} {:a 1 :b 2}
- #{} #{1 2} ))
-
-
-(deftest test-interpose
- (are [x y] (= x y)
- (interpose 0 []) ()
- (interpose 0 [1]) '(1)
- (interpose 0 [1 2]) '(1 0 2)
- (interpose 0 [1 2 3]) '(1 0 2 0 3) ))
-
-
-(deftest test-interleave
- (are [x y] (= x y)
- (interleave [1 2] [3 4]) '(1 3 2 4)
-
- (interleave [1] [3 4]) '(1 3)
- (interleave [1 2] [3]) '(1 3)
-
- (interleave [] [3 4]) ()
- (interleave [1 2] []) ()
- (interleave [] []) () ))
-
-
-(deftest test-zipmap
- (are [x y] (= x y)
- (zipmap [:a :b] [1 2]) {:a 1 :b 2}
-
- (zipmap [:a] [1 2]) {:a 1}
- (zipmap [:a :b] [1]) {:a 1}
-
- (zipmap [] [1 2]) {}
- (zipmap [:a :b] []) {}
- (zipmap [] []) {} ))
-
-
-(deftest test-concat
- (are [x y] (= x y)
- (concat) ()
-
- (concat []) ()
- (concat [1 2]) '(1 2)
-
- (concat [1 2] [3 4]) '(1 2 3 4)
- (concat [] [3 4]) '(3 4)
- (concat [1 2] []) '(1 2)
- (concat [] []) ()
-
- (concat [1 2] [3 4] [5 6]) '(1 2 3 4 5 6) ))
-
-
-(deftest test-cycle
- (are [x y] (= x y)
- (cycle []) ()
-
- (take 3 (cycle [1])) '(1 1 1)
- (take 5 (cycle [1 2 3])) '(1 2 3 1 2)
-
- (take 3 (cycle [nil])) '(nil nil nil) ))
-
-
-(deftest test-partition
- (are [x y] (= x y)
- (partition 2 [1 2 3]) '((1 2))
- (partition 2 [1 2 3 4]) '((1 2) (3 4))
- (partition 2 []) ()
-
- (partition 2 3 [1 2 3 4 5 6 7]) '((1 2) (4 5))
- (partition 2 3 [1 2 3 4 5 6 7 8]) '((1 2) (4 5) (7 8))
- (partition 2 3 []) ()
-
- (partition 1 []) ()
- (partition 1 [1 2 3]) '((1) (2) (3))
-
- (partition 5 [1 2 3]) ()
-
-; (partition 0 [1 2 3]) (repeat nil) ; infinite sequence of nil
- (partition -1 [1 2 3]) ()
- (partition -2 [1 2 3]) () ))
-
-
-(deftest test-reverse
- (are [x y] (= x y)
- (reverse nil) () ; since SVN 1294
- (reverse []) ()
- (reverse [1]) '(1)
- (reverse [1 2 3]) '(3 2 1) ))
-
-
-(deftest test-take
- (are [x y] (= x y)
- (take 1 [1 2 3 4 5]) '(1)
- (take 3 [1 2 3 4 5]) '(1 2 3)
- (take 5 [1 2 3 4 5]) '(1 2 3 4 5)
- (take 9 [1 2 3 4 5]) '(1 2 3 4 5)
-
- (take 0 [1 2 3 4 5]) ()
- (take -1 [1 2 3 4 5]) ()
- (take -2 [1 2 3 4 5]) () ))
-
-
-(deftest test-drop
- (are [x y] (= x y)
- (drop 1 [1 2 3 4 5]) '(2 3 4 5)
- (drop 3 [1 2 3 4 5]) '(4 5)
- (drop 5 [1 2 3 4 5]) ()
- (drop 9 [1 2 3 4 5]) ()
-
- (drop 0 [1 2 3 4 5]) '(1 2 3 4 5)
- (drop -1 [1 2 3 4 5]) '(1 2 3 4 5)
- (drop -2 [1 2 3 4 5]) '(1 2 3 4 5) ))
-
-
-(deftest test-take-nth
- (are [x y] (= x y)
- (take-nth 1 [1 2 3 4 5]) '(1 2 3 4 5)
- (take-nth 2 [1 2 3 4 5]) '(1 3 5)
- (take-nth 3 [1 2 3 4 5]) '(1 4)
- (take-nth 4 [1 2 3 4 5]) '(1 5)
- (take-nth 5 [1 2 3 4 5]) '(1)
- (take-nth 9 [1 2 3 4 5]) '(1)
-
- ; infinite seq of 1s = (repeat 1)
- ;(take-nth 0 [1 2 3 4 5])
- ;(take-nth -1 [1 2 3 4 5])
- ;(take-nth -2 [1 2 3 4 5])
- ))
-
-
-(deftest test-take-while
- (are [x y] (= x y)
- (take-while pos? []) ()
- (take-while pos? [1 2 3 4]) '(1 2 3 4)
- (take-while pos? [1 2 3 -1]) '(1 2 3)
- (take-while pos? [1 -1 2 3]) '(1)
- (take-while pos? [-1 1 2 3]) ()
- (take-while pos? [-1 -2 -3]) () ))
-
-
-(deftest test-drop-while
- (are [x y] (= x y)
- (drop-while pos? []) ()
- (drop-while pos? [1 2 3 4]) ()
- (drop-while pos? [1 2 3 -1]) '(-1)
- (drop-while pos? [1 -1 2 3]) '(-1 2 3)
- (drop-while pos? [-1 1 2 3]) '(-1 1 2 3)
- (drop-while pos? [-1 -2 -3]) '(-1 -2 -3) ))
-
-
-(deftest test-butlast
- (are [x y] (= x y)
- (butlast []) nil
- (butlast [1]) nil
- (butlast [1 2 3]) '(1 2) ))
-
-
-(deftest test-drop-last
- (are [x y] (= x y)
- ; as butlast
- (drop-last []) ()
- (drop-last [1]) ()
- (drop-last [1 2 3]) '(1 2)
-
- ; as butlast, but lazy
- (drop-last 1 []) ()
- (drop-last 1 [1]) ()
- (drop-last 1 [1 2 3]) '(1 2)
-
- (drop-last 2 []) ()
- (drop-last 2 [1]) ()
- (drop-last 2 [1 2 3]) '(1)
-
- (drop-last 5 []) ()
- (drop-last 5 [1]) ()
- (drop-last 5 [1 2 3]) ()
-
- (drop-last 0 []) ()
- (drop-last 0 [1]) '(1)
- (drop-last 0 [1 2 3]) '(1 2 3)
-
- (drop-last -1 []) ()
- (drop-last -1 [1]) '(1)
- (drop-last -1 [1 2 3]) '(1 2 3)
-
- (drop-last -2 []) ()
- (drop-last -2 [1]) '(1)
- (drop-last -2 [1 2 3]) '(1 2 3) ))
-
-
-(deftest test-split-at
- (is (vector? (split-at 2 [])))
- (is (vector? (split-at 2 [1 2 3])))
-
- (are [x y] (= x y)
- (split-at 2 []) [() ()]
- (split-at 2 [1 2 3 4 5]) [(list 1 2) (list 3 4 5)]
-
- (split-at 5 [1 2 3]) [(list 1 2 3) ()]
- (split-at 0 [1 2 3]) [() (list 1 2 3)]
- (split-at -1 [1 2 3]) [() (list 1 2 3)]
- (split-at -5 [1 2 3]) [() (list 1 2 3)] ))
-
-
-(deftest test-split-with
- (is (vector? (split-with pos? [])))
- (is (vector? (split-with pos? [1 2 -1 0 3 4])))
-
- (are [x y] (= x y)
- (split-with pos? []) [() ()]
- (split-with pos? [1 2 -1 0 3 4]) [(list 1 2) (list -1 0 3 4)]
-
- (split-with pos? [-1 2 3 4 5]) [() (list -1 2 3 4 5)]
- (split-with number? [1 -2 "abc" \x]) [(list 1 -2) (list "abc" \x)] ))
-
-
-(deftest test-repeat
- (is (thrown? IllegalArgumentException (repeat)))
-
- ; infinite sequence => use take
- (are [x y] (= x y)
- (take 0 (repeat 7)) ()
- (take 1 (repeat 7)) '(7)
- (take 2 (repeat 7)) '(7 7)
- (take 5 (repeat 7)) '(7 7 7 7 7) )
-
- ; limited sequence
- (are [x y] (= x y)
- (repeat 0 7) ()
- (repeat 1 7) '(7)
- (repeat 2 7) '(7 7)
- (repeat 5 7) '(7 7 7 7 7)
-
- (repeat -1 7) ()
- (repeat -3 7) () )
-
- ; test different data types
- (are [x] (= (repeat 3 x) (list x x x))
- nil
- false true
- 0 42
- 0.0 3.14
- 2/3
- 0M 1M
- \c
- "" "abc"
- 'sym
- :kw
- () '(1 2)
- [] [1 2]
- {} {:a 1 :b 2}
- #{} #{1 2} ))
-
-
-(deftest test-range
- (are [x y] (= x y)
- (range 0) () ; exclusive end!
- (range 1) '(0)
- (range 5) '(0 1 2 3 4)
-
- (range -1) ()
- (range -3) ()
-
- (range 2.5) '(0 1)
- (range 7/3) '(0 1)
-
- (range 0 3) '(0 1 2)
- (range 0 1) '(0)
- (range 0 0) ()
- (range 0 -3) ()
-
- (range 3 6) '(3 4 5)
- (range 3 4) '(3)
- (range 3 3) ()
- (range 3 1) ()
- (range 3 0) ()
- (range 3 -2) ()
-
- (range -2 5) '(-2 -1 0 1 2 3 4)
- (range -2 0) '(-2 -1)
- (range -2 -1) '(-2)
- (range -2 -2) ()
- (range -2 -5) ()
-
- (range 3 9 0) ()
- (range 3 9 1) '(3 4 5 6 7 8)
- (range 3 9 2) '(3 5 7)
- (range 3 9 3) '(3 6)
- (range 3 9 10) '(3)
- (range 3 9 -1) () ))
-
-
-(deftest test-empty?
- (are [x] (empty? x)
- nil
- ()
- (lazy-seq nil) ; => ()
- []
- {}
- #{}
- ""
- (into-array []) )
-
- (are [x] (not (empty? x))
- '(1 2)
- (lazy-seq [1 2])
- [1 2]
- {:a 1 :b 2}
- #{1 2}
- "abc"
- (into-array [1 2]) ))
-
-
-(deftest test-every?
- ; always true for nil or empty coll/seq
- (are [x] (= (every? pos? x) true)
- nil
- () [] {} #{}
- (lazy-seq [])
- (into-array []) )
-
- (are [x y] (= x y)
- true (every? pos? [1])
- true (every? pos? [1 2])
- true (every? pos? [1 2 3 4 5])
-
- false (every? pos? [-1])
- false (every? pos? [-1 -2])
- false (every? pos? [-1 -2 3])
- false (every? pos? [-1 2])
- false (every? pos? [1 -2])
- false (every? pos? [1 2 -3])
- false (every? pos? [1 2 -3 4]) )
-
- (are [x y] (= x y)
- true (every? #{:a} [:a :a])
-;! false (every? #{:a} [:a :b]) ; Issue 68: every? returns nil instead of false
-;! false (every? #{:a} [:b :b]) ; http://code.google.com/p/clojure/issues/detail?id=68
- ))
-
-
-(deftest test-not-every?
- ; always false for nil or empty coll/seq
- (are [x] (= (not-every? pos? x) false)
- nil
- () [] {} #{}
- (lazy-seq [])
- (into-array []) )
-
- (are [x y] (= x y)
- false (not-every? pos? [1])
- false (not-every? pos? [1 2])
- false (not-every? pos? [1 2 3 4 5])
-
- true (not-every? pos? [-1])
- true (not-every? pos? [-1 -2])
- true (not-every? pos? [-1 -2 3])
- true (not-every? pos? [-1 2])
- true (not-every? pos? [1 -2])
- true (not-every? pos? [1 2 -3])
- true (not-every? pos? [1 2 -3 4]) )
-
- (are [x y] (= x y)
- false (not-every? #{:a} [:a :a])
- true (not-every? #{:a} [:a :b])
- true (not-every? #{:a} [:b :b]) ))
-
-
-(deftest test-not-any?
- ; always true for nil or empty coll/seq
- (are [x] (= (not-any? pos? x) true)
- nil
- () [] {} #{}
- (lazy-seq [])
- (into-array []) )
-
- (are [x y] (= x y)
- false (not-any? pos? [1])
- false (not-any? pos? [1 2])
- false (not-any? pos? [1 2 3 4 5])
-
- true (not-any? pos? [-1])
- true (not-any? pos? [-1 -2])
-
- false (not-any? pos? [-1 -2 3])
- false (not-any? pos? [-1 2])
- false (not-any? pos? [1 -2])
- false (not-any? pos? [1 2 -3])
- false (not-any? pos? [1 2 -3 4]) )
-
- (are [x y] (= x y)
- false (not-any? #{:a} [:a :a])
- false (not-any? #{:a} [:a :b])
- true (not-any? #{:a} [:b :b]) ))
-
-
-; TODO: some
-