annotate src/clojure/test_clojure/logic.clj @ 10:ef7dbbd6452c

added clojure source goodness
author Robert McIntyre <rlm@mit.edu>
date Sat, 21 Aug 2010 06:25:44 -0400
parents
children
rev   line source
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