rlm@10
|
1 ; Copyright (c) Rich Hickey. All rights reserved.
|
rlm@10
|
2 ; The use and distribution terms for this software are covered by the
|
rlm@10
|
3 ; Eclipse Public License 1.0 (http://opensource.org/licenses/eclipse-1.0.php)
|
rlm@10
|
4 ; which can be found in the file epl-v10.html at the root of this distribution.
|
rlm@10
|
5 ; By using this software in any fashion, you are agreeing to be bound by
|
rlm@10
|
6 ; the terms of this license.
|
rlm@10
|
7 ; You must not remove this notice, or any other, from this software.
|
rlm@10
|
8
|
rlm@10
|
9 ; Author: Frantisek Sodomka
|
rlm@10
|
10
|
rlm@10
|
11 ;;
|
rlm@10
|
12 ;; Created 1/29/2009
|
rlm@10
|
13
|
rlm@10
|
14 (ns clojure.test-clojure.logic
|
rlm@10
|
15 (:use clojure.test
|
rlm@10
|
16 [clojure.test-clojure.helpers :only (exception)]))
|
rlm@10
|
17
|
rlm@10
|
18
|
rlm@10
|
19 ;; *** Tests ***
|
rlm@10
|
20
|
rlm@10
|
21 (deftest test-if
|
rlm@10
|
22 ; true/false/nil
|
rlm@10
|
23 (are [x y] (= x y)
|
rlm@10
|
24 (if true :t) :t
|
rlm@10
|
25 (if true :t :f) :t
|
rlm@10
|
26 (if true :t (exception)) :t
|
rlm@10
|
27
|
rlm@10
|
28 (if false :t) nil
|
rlm@10
|
29 (if false :t :f) :f
|
rlm@10
|
30 (if false (exception) :f) :f
|
rlm@10
|
31
|
rlm@10
|
32 (if nil :t) nil
|
rlm@10
|
33 (if nil :t :f) :f
|
rlm@10
|
34 (if nil (exception) :f) :f )
|
rlm@10
|
35
|
rlm@10
|
36 ; zero/empty is true
|
rlm@10
|
37 (are [x] (= (if x :t :f) :t)
|
rlm@10
|
38 (byte 0)
|
rlm@10
|
39 (short 0)
|
rlm@10
|
40 (int 0)
|
rlm@10
|
41 (long 0)
|
rlm@10
|
42 (bigint 0)
|
rlm@10
|
43 (float 0)
|
rlm@10
|
44 (double 0)
|
rlm@10
|
45 (bigdec 0)
|
rlm@10
|
46
|
rlm@10
|
47 0/2
|
rlm@10
|
48 ""
|
rlm@10
|
49 #""
|
rlm@10
|
50 (symbol "")
|
rlm@10
|
51
|
rlm@10
|
52 ()
|
rlm@10
|
53 []
|
rlm@10
|
54 {}
|
rlm@10
|
55 #{}
|
rlm@10
|
56 (into-array []) )
|
rlm@10
|
57
|
rlm@10
|
58 ; anything except nil/false is true
|
rlm@10
|
59 (are [x] (= (if x :t :f) :t)
|
rlm@10
|
60 (byte 2)
|
rlm@10
|
61 (short 2)
|
rlm@10
|
62 (int 2)
|
rlm@10
|
63 (long 2)
|
rlm@10
|
64 (bigint 2)
|
rlm@10
|
65 (float 2)
|
rlm@10
|
66 (double 2)
|
rlm@10
|
67 (bigdec 2)
|
rlm@10
|
68
|
rlm@10
|
69 2/3
|
rlm@10
|
70 \a
|
rlm@10
|
71 "abc"
|
rlm@10
|
72 #"a*b"
|
rlm@10
|
73 'abc
|
rlm@10
|
74 :kw
|
rlm@10
|
75
|
rlm@10
|
76 '(1 2)
|
rlm@10
|
77 [1 2]
|
rlm@10
|
78 {:a 1 :b 2}
|
rlm@10
|
79 #{1 2}
|
rlm@10
|
80 (into-array [1 2])
|
rlm@10
|
81
|
rlm@10
|
82 (new java.util.Date) ))
|
rlm@10
|
83
|
rlm@10
|
84
|
rlm@10
|
85 (deftest test-nil-punning
|
rlm@10
|
86 (are [x y] (= (if x :no :yes) y)
|
rlm@10
|
87 (first []) :yes
|
rlm@10
|
88 (next [1]) :yes
|
rlm@10
|
89 (rest [1]) :no
|
rlm@10
|
90
|
rlm@10
|
91 (butlast [1]) :yes
|
rlm@10
|
92
|
rlm@10
|
93 (seq nil) :yes
|
rlm@10
|
94 (seq []) :yes
|
rlm@10
|
95
|
rlm@10
|
96 (sequence nil) :no
|
rlm@10
|
97 (sequence []) :no
|
rlm@10
|
98
|
rlm@10
|
99 (lazy-seq nil) :no
|
rlm@10
|
100 (lazy-seq []) :no
|
rlm@10
|
101
|
rlm@10
|
102 (filter #(> % 10) [1 2 3]) :no
|
rlm@10
|
103 (map identity []) :no
|
rlm@10
|
104 (apply concat []) :no
|
rlm@10
|
105
|
rlm@10
|
106 (concat) :no
|
rlm@10
|
107 (concat []) :no
|
rlm@10
|
108
|
rlm@10
|
109 (reverse nil) :no
|
rlm@10
|
110 (reverse []) :no
|
rlm@10
|
111
|
rlm@10
|
112 (sort nil) :no
|
rlm@10
|
113 (sort []) :no ))
|
rlm@10
|
114
|
rlm@10
|
115
|
rlm@10
|
116 (deftest test-and
|
rlm@10
|
117 (are [x y] (= x y)
|
rlm@10
|
118 (and) true
|
rlm@10
|
119 (and true) true
|
rlm@10
|
120 (and nil) nil
|
rlm@10
|
121 (and false) false
|
rlm@10
|
122
|
rlm@10
|
123 (and true nil) nil
|
rlm@10
|
124 (and true false) false
|
rlm@10
|
125
|
rlm@10
|
126 (and 1 true :kw 'abc "abc") "abc"
|
rlm@10
|
127
|
rlm@10
|
128 (and 1 true :kw nil 'abc "abc") nil
|
rlm@10
|
129 (and 1 true :kw nil (exception) 'abc "abc") nil
|
rlm@10
|
130
|
rlm@10
|
131 (and 1 true :kw 'abc "abc" false) false
|
rlm@10
|
132 (and 1 true :kw 'abc "abc" false (exception)) false ))
|
rlm@10
|
133
|
rlm@10
|
134
|
rlm@10
|
135 (deftest test-or
|
rlm@10
|
136 (are [x y] (= x y)
|
rlm@10
|
137 (or) nil
|
rlm@10
|
138 (or true) true
|
rlm@10
|
139 (or nil) nil
|
rlm@10
|
140 (or false) false
|
rlm@10
|
141
|
rlm@10
|
142 (or nil false true) true
|
rlm@10
|
143 (or nil false 1 2) 1
|
rlm@10
|
144 (or nil false "abc" :kw) "abc"
|
rlm@10
|
145
|
rlm@10
|
146 (or false nil) nil
|
rlm@10
|
147 (or nil false) false
|
rlm@10
|
148 (or nil nil nil false) false
|
rlm@10
|
149
|
rlm@10
|
150 (or nil true false) true
|
rlm@10
|
151 (or nil true (exception) false) true
|
rlm@10
|
152 (or nil false "abc" (exception)) "abc" ))
|
rlm@10
|
153
|
rlm@10
|
154
|
rlm@10
|
155 (deftest test-not
|
rlm@10
|
156 (is (thrown? IllegalArgumentException (not)))
|
rlm@10
|
157 (are [x] (= (not x) true)
|
rlm@10
|
158 nil
|
rlm@10
|
159 false )
|
rlm@10
|
160 (are [x] (= (not x) false)
|
rlm@10
|
161 true
|
rlm@10
|
162
|
rlm@10
|
163 ; numbers
|
rlm@10
|
164 0
|
rlm@10
|
165 0.0
|
rlm@10
|
166 42
|
rlm@10
|
167 1.2
|
rlm@10
|
168 0/2
|
rlm@10
|
169 2/3
|
rlm@10
|
170
|
rlm@10
|
171 ; characters
|
rlm@10
|
172 \space
|
rlm@10
|
173 \tab
|
rlm@10
|
174 \a
|
rlm@10
|
175
|
rlm@10
|
176 ; strings
|
rlm@10
|
177 ""
|
rlm@10
|
178 "abc"
|
rlm@10
|
179
|
rlm@10
|
180 ; regexes
|
rlm@10
|
181 #""
|
rlm@10
|
182 #"a*b"
|
rlm@10
|
183
|
rlm@10
|
184 ; symbols
|
rlm@10
|
185 (symbol "")
|
rlm@10
|
186 'abc
|
rlm@10
|
187
|
rlm@10
|
188 ; keywords
|
rlm@10
|
189 :kw
|
rlm@10
|
190
|
rlm@10
|
191 ; collections/arrays
|
rlm@10
|
192 ()
|
rlm@10
|
193 '(1 2)
|
rlm@10
|
194 []
|
rlm@10
|
195 [1 2]
|
rlm@10
|
196 {}
|
rlm@10
|
197 {:a 1 :b 2}
|
rlm@10
|
198 #{}
|
rlm@10
|
199 #{1 2}
|
rlm@10
|
200 (into-array [])
|
rlm@10
|
201 (into-array [1 2])
|
rlm@10
|
202
|
rlm@10
|
203 ; Java objects
|
rlm@10
|
204 (new java.util.Date) ))
|
rlm@10
|
205
|