Skip to content

Commit 95a01f5

Browse files
committed
Add tests for reduce
1 parent 10d05be commit 95a01f5

File tree

1 file changed

+73
-0
lines changed

1 file changed

+73
-0
lines changed

test/clojure/core_test/reduce.cljc

+73
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,73 @@
1+
(ns clojure.core-test.reduce
2+
(:require
3+
[clojure.test :as t :refer [deftest testing is are]]
4+
[clojure.core-test.portability #?(:cljs :refer-macros :default :refer) [when-var-exists]])
5+
#?(:clj (:import (clojure.lang IReduce))))
6+
7+
(def interop
8+
{:int-new (fn [x]
9+
(#?(:clj Integer.
10+
:cljs js/Number.) x))
11+
12+
:Integer #?(:clj Integer/TYPE
13+
:cljs js/Number)
14+
15+
:Long #?(:clj Long/TYPE
16+
:cljs js/Number)
17+
18+
:Float #?(:clj Long/TYPE
19+
:cljs js/Number)
20+
21+
:Double #?(:clj Double/TYPE
22+
:cljs js/Number)
23+
24+
:Boolean #?(:clj Boolean/TYPE
25+
:cljs js/Boolean)})
26+
27+
28+
(when-var-exists clojure.core/reduce
29+
(deftest test-reduce
30+
(testing "common"
31+
(is (nil? (reduce nil nil nil)))
32+
(is (thrown? #?(:clj Exception
33+
:cljs js/Error) (reduce nil nil)))
34+
(is (= 6 (reduce + 0 [1 2 3]))))
35+
36+
(testing "edge cases"
37+
(let [int-new (interop :int-new)
38+
char-new (interop :char-new)
39+
byte-new (interop :byte-new)
40+
arange (range 1 100) ;; enough to cross nodes
41+
avec (into [] arange)
42+
alist (into () arange)
43+
obj-array (into-array arange)
44+
int-array (into-array (:Integer interop) (map #(int-new (int %)) arange))
45+
long-array (into-array (:Long interop) arange)
46+
float-array (into-array (:Float interop) arange)
47+
double-array (into-array (:Double interop) arange)
48+
all-true (into-array (:Boolean interop) (repeat 10 true))]
49+
(is (== 4950
50+
(reduce + arange)
51+
(reduce + avec)
52+
#?(:clj (.reduce ^IReduce avec +))
53+
(reduce + alist)
54+
(reduce + obj-array)
55+
(reduce + int-array)
56+
(reduce + long-array)
57+
(reduce + float-array)
58+
(reduce + double-array)))
59+
60+
(is (== 4951
61+
(reduce + 1 arange)
62+
(reduce + 1 avec)
63+
#?(:clj (.reduce ^IReduce avec + 1))
64+
(reduce + 1 alist)
65+
(reduce + 1 obj-array)
66+
(reduce + 1 int-array)
67+
(reduce + 1 long-array)
68+
(reduce + 1 float-array)
69+
(reduce + 1 double-array)))
70+
71+
(is (= true
72+
(reduce #(and %1 %2) all-true)
73+
(reduce #(and %1 %2) true all-true)))))))

0 commit comments

Comments
 (0)