annotate src/clojure/test_clojure/reader.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: Stephen C. Gilardi
rlm@10 10
rlm@10 11 ;;
rlm@10 12 ;; Tests for the Clojure functions documented at the URL:
rlm@10 13 ;;
rlm@10 14 ;; http://clojure.org/Reader
rlm@10 15 ;;
rlm@10 16 ;; scgilardi (gmail)
rlm@10 17 ;; Created 22 October 2008
rlm@10 18
rlm@10 19 (ns clojure.test-clojure.reader
rlm@10 20 (:use clojure.test))
rlm@10 21
rlm@10 22 ;; Symbols
rlm@10 23
rlm@10 24 (deftest Symbols
rlm@10 25 (is (= 'abc (symbol "abc")))
rlm@10 26 (is (= '*+!-_? (symbol "*+!-_?")))
rlm@10 27 (is (= 'abc:def:ghi (symbol "abc:def:ghi")))
rlm@10 28 (is (= 'abc/def (symbol "abc" "def")))
rlm@10 29 (is (= 'abc.def/ghi (symbol "abc.def" "ghi")))
rlm@10 30 (is (= 'abc/def.ghi (symbol "abc" "def.ghi")))
rlm@10 31 (is (= 'abc:def/ghi:jkl.mno (symbol "abc:def" "ghi:jkl.mno")))
rlm@10 32 (is (instance? clojure.lang.Symbol 'alphabet))
rlm@10 33 )
rlm@10 34
rlm@10 35 ;; Literals
rlm@10 36
rlm@10 37 (deftest Literals
rlm@10 38 ; 'nil 'false 'true are reserved by Clojure and are not symbols
rlm@10 39 (is (= 'nil nil))
rlm@10 40 (is (= 'false false))
rlm@10 41 (is (= 'true true)) )
rlm@10 42
rlm@10 43 ;; Strings
rlm@10 44
rlm@10 45 (deftest Strings
rlm@10 46 (is (= "abcde" (str \a \b \c \d \e)))
rlm@10 47 (is (= "abc
rlm@10 48 def" (str \a \b \c \newline \space \space \d \e \f)))
rlm@10 49 )
rlm@10 50
rlm@10 51 ;; Numbers
rlm@10 52
rlm@10 53 (deftest Numbers
rlm@10 54
rlm@10 55 ; Read Integer
rlm@10 56 (is (instance? Integer 2147483647))
rlm@10 57 (is (instance? Integer +1))
rlm@10 58 (is (instance? Integer 1))
rlm@10 59 (is (instance? Integer +0))
rlm@10 60 (is (instance? Integer 0))
rlm@10 61 (is (instance? Integer -0))
rlm@10 62 (is (instance? Integer -1))
rlm@10 63 (is (instance? Integer -2147483648))
rlm@10 64
rlm@10 65 ; Read Long
rlm@10 66 (is (instance? Long 2147483648))
rlm@10 67 (is (instance? Long -2147483649))
rlm@10 68 (is (instance? Long 9223372036854775807))
rlm@10 69 (is (instance? Long -9223372036854775808))
rlm@10 70
rlm@10 71 ;; Numeric constants of different types don't wash out. Regression fixed in
rlm@10 72 ;; r1157. Previously the compiler saw 0 and 0.0 as the same constant and
rlm@10 73 ;; caused the sequence to be built of Doubles.
rlm@10 74 (let [x 0.0]
rlm@10 75 (let [sequence (loop [i 0 l '()]
rlm@10 76 (if (< i 5)
rlm@10 77 (recur (inc i) (conj l i))
rlm@10 78 l))]
rlm@10 79 (is (= [4 3 2 1 0] sequence))
rlm@10 80 (is (every? #(instance? Integer %)
rlm@10 81 sequence))))
rlm@10 82
rlm@10 83 ; Read BigInteger
rlm@10 84 (is (instance? BigInteger 9223372036854775808))
rlm@10 85 (is (instance? BigInteger -9223372036854775809))
rlm@10 86 (is (instance? BigInteger 10000000000000000000000000000000000000000000000000))
rlm@10 87 (is (instance? BigInteger -10000000000000000000000000000000000000000000000000))
rlm@10 88
rlm@10 89 ; Read Double
rlm@10 90 (is (instance? Double +1.0e+1))
rlm@10 91 (is (instance? Double +1.e+1))
rlm@10 92 (is (instance? Double +1e+1))
rlm@10 93
rlm@10 94 (is (instance? Double +1.0e1))
rlm@10 95 (is (instance? Double +1.e1))
rlm@10 96 (is (instance? Double +1e1))
rlm@10 97
rlm@10 98 (is (instance? Double +1.0e-1))
rlm@10 99 (is (instance? Double +1.e-1))
rlm@10 100 (is (instance? Double +1e-1))
rlm@10 101
rlm@10 102 (is (instance? Double 1.0e+1))
rlm@10 103 (is (instance? Double 1.e+1))
rlm@10 104 (is (instance? Double 1e+1))
rlm@10 105
rlm@10 106 (is (instance? Double 1.0e1))
rlm@10 107 (is (instance? Double 1.e1))
rlm@10 108 (is (instance? Double 1e1))
rlm@10 109
rlm@10 110 (is (instance? Double 1.0e-1))
rlm@10 111 (is (instance? Double 1.e-1))
rlm@10 112 (is (instance? Double 1e-1))
rlm@10 113
rlm@10 114 (is (instance? Double -1.0e+1))
rlm@10 115 (is (instance? Double -1.e+1))
rlm@10 116 (is (instance? Double -1e+1))
rlm@10 117
rlm@10 118 (is (instance? Double -1.0e1))
rlm@10 119 (is (instance? Double -1.e1))
rlm@10 120 (is (instance? Double -1e1))
rlm@10 121
rlm@10 122 (is (instance? Double -1.0e-1))
rlm@10 123 (is (instance? Double -1.e-1))
rlm@10 124 (is (instance? Double -1e-1))
rlm@10 125
rlm@10 126 (is (instance? Double +1.0))
rlm@10 127 (is (instance? Double +1.))
rlm@10 128
rlm@10 129 (is (instance? Double 1.0))
rlm@10 130 (is (instance? Double 1.))
rlm@10 131
rlm@10 132 (is (instance? Double +0.0))
rlm@10 133 (is (instance? Double +0.))
rlm@10 134
rlm@10 135 (is (instance? Double 0.0))
rlm@10 136 (is (instance? Double 0.))
rlm@10 137
rlm@10 138 (is (instance? Double -0.0))
rlm@10 139 (is (instance? Double -0.))
rlm@10 140
rlm@10 141 (is (instance? Double -1.0))
rlm@10 142 (is (instance? Double -1.))
rlm@10 143
rlm@10 144 ; Read BigDecimal
rlm@10 145 (is (instance? BigDecimal 9223372036854775808M))
rlm@10 146 (is (instance? BigDecimal -9223372036854775809M))
rlm@10 147 (is (instance? BigDecimal 2147483647M))
rlm@10 148 (is (instance? BigDecimal +1M))
rlm@10 149 (is (instance? BigDecimal 1M))
rlm@10 150 (is (instance? BigDecimal +0M))
rlm@10 151 (is (instance? BigDecimal 0M))
rlm@10 152 (is (instance? BigDecimal -0M))
rlm@10 153 (is (instance? BigDecimal -1M))
rlm@10 154 (is (instance? BigDecimal -2147483648M))
rlm@10 155
rlm@10 156 (is (instance? BigDecimal +1.0e+1M))
rlm@10 157 (is (instance? BigDecimal +1.e+1M))
rlm@10 158 (is (instance? BigDecimal +1e+1M))
rlm@10 159
rlm@10 160 (is (instance? BigDecimal +1.0e1M))
rlm@10 161 (is (instance? BigDecimal +1.e1M))
rlm@10 162 (is (instance? BigDecimal +1e1M))
rlm@10 163
rlm@10 164 (is (instance? BigDecimal +1.0e-1M))
rlm@10 165 (is (instance? BigDecimal +1.e-1M))
rlm@10 166 (is (instance? BigDecimal +1e-1M))
rlm@10 167
rlm@10 168 (is (instance? BigDecimal 1.0e+1M))
rlm@10 169 (is (instance? BigDecimal 1.e+1M))
rlm@10 170 (is (instance? BigDecimal 1e+1M))
rlm@10 171
rlm@10 172 (is (instance? BigDecimal 1.0e1M))
rlm@10 173 (is (instance? BigDecimal 1.e1M))
rlm@10 174 (is (instance? BigDecimal 1e1M))
rlm@10 175
rlm@10 176 (is (instance? BigDecimal 1.0e-1M))
rlm@10 177 (is (instance? BigDecimal 1.e-1M))
rlm@10 178 (is (instance? BigDecimal 1e-1M))
rlm@10 179
rlm@10 180 (is (instance? BigDecimal -1.0e+1M))
rlm@10 181 (is (instance? BigDecimal -1.e+1M))
rlm@10 182 (is (instance? BigDecimal -1e+1M))
rlm@10 183
rlm@10 184 (is (instance? BigDecimal -1.0e1M))
rlm@10 185 (is (instance? BigDecimal -1.e1M))
rlm@10 186 (is (instance? BigDecimal -1e1M))
rlm@10 187
rlm@10 188 (is (instance? BigDecimal -1.0e-1M))
rlm@10 189 (is (instance? BigDecimal -1.e-1M))
rlm@10 190 (is (instance? BigDecimal -1e-1M))
rlm@10 191
rlm@10 192 (is (instance? BigDecimal +1.0M))
rlm@10 193 (is (instance? BigDecimal +1.M))
rlm@10 194
rlm@10 195 (is (instance? BigDecimal 1.0M))
rlm@10 196 (is (instance? BigDecimal 1.M))
rlm@10 197
rlm@10 198 (is (instance? BigDecimal +0.0M))
rlm@10 199 (is (instance? BigDecimal +0.M))
rlm@10 200
rlm@10 201 (is (instance? BigDecimal 0.0M))
rlm@10 202 (is (instance? BigDecimal 0.M))
rlm@10 203
rlm@10 204 (is (instance? BigDecimal -0.0M))
rlm@10 205 (is (instance? BigDecimal -0.M))
rlm@10 206
rlm@10 207 (is (instance? BigDecimal -1.0M))
rlm@10 208 (is (instance? BigDecimal -1.M))
rlm@10 209 )
rlm@10 210
rlm@10 211 ;; Characters
rlm@10 212
rlm@10 213 (deftest t-Characters)
rlm@10 214
rlm@10 215 ;; nil
rlm@10 216
rlm@10 217 (deftest t-nil)
rlm@10 218
rlm@10 219 ;; Booleans
rlm@10 220
rlm@10 221 (deftest t-Booleans)
rlm@10 222
rlm@10 223 ;; Keywords
rlm@10 224
rlm@10 225 (deftest t-Keywords
rlm@10 226 (is (= :abc (keyword "abc")))
rlm@10 227 (is (= :abc (keyword 'abc)))
rlm@10 228 (is (= :*+!-_? (keyword "*+!-_?")))
rlm@10 229 (is (= :abc:def:ghi (keyword "abc:def:ghi")))
rlm@10 230 (is (= :abc/def (keyword "abc" "def")))
rlm@10 231 (is (= :abc/def (keyword 'abc/def)))
rlm@10 232 (is (= :abc.def/ghi (keyword "abc.def" "ghi")))
rlm@10 233 (is (= :abc/def.ghi (keyword "abc" "def.ghi")))
rlm@10 234 (is (= :abc:def/ghi:jkl.mno (keyword "abc:def" "ghi:jkl.mno")))
rlm@10 235 (is (instance? clojure.lang.Keyword :alphabet))
rlm@10 236 )
rlm@10 237
rlm@10 238 (deftest reading-keywords
rlm@10 239 (are [x y] (= x (read-string y))
rlm@10 240 :foo ":foo"
rlm@10 241 :foo/bar ":foo/bar"
rlm@10 242 :user/foo "::foo")
rlm@10 243 (are [err msg form] (thrown-with-msg? err msg (read-string form))
rlm@10 244 Exception #"Invalid token: foo:" "foo:"
rlm@10 245 Exception #"Invalid token: :bar/" ":bar/"
rlm@10 246 Exception #"Invalid token: ::does.not/exist" "::does.not/exist"))
rlm@10 247 ;; Lists
rlm@10 248
rlm@10 249 (deftest t-Lists)
rlm@10 250
rlm@10 251 ;; Vectors
rlm@10 252
rlm@10 253 (deftest t-Vectors)
rlm@10 254
rlm@10 255 ;; Maps
rlm@10 256
rlm@10 257 (deftest t-Maps)
rlm@10 258
rlm@10 259 ;; Sets
rlm@10 260
rlm@10 261 (deftest t-Sets)
rlm@10 262
rlm@10 263 ;; Macro characters
rlm@10 264
rlm@10 265 ;; Quote (')
rlm@10 266
rlm@10 267 (deftest t-Quote)
rlm@10 268
rlm@10 269 ;; Character (\)
rlm@10 270
rlm@10 271 (deftest t-Character)
rlm@10 272
rlm@10 273 ;; Comment (;)
rlm@10 274
rlm@10 275 (deftest t-Comment)
rlm@10 276
rlm@10 277 ;; Meta (^)
rlm@10 278
rlm@10 279 (deftest t-Meta)
rlm@10 280
rlm@10 281 ;; Deref (@)
rlm@10 282
rlm@10 283 (deftest t-Deref)
rlm@10 284
rlm@10 285 ;; Dispatch (#)
rlm@10 286
rlm@10 287 ;; #{} - see Sets above
rlm@10 288
rlm@10 289 ;; Regex patterns (#"pattern")
rlm@10 290
rlm@10 291 (deftest t-Regex)
rlm@10 292
rlm@10 293 ;; Metadata (#^)
rlm@10 294
rlm@10 295 (deftest t-Metadata)
rlm@10 296
rlm@10 297 ;; Var-quote (#')
rlm@10 298
rlm@10 299 (deftest t-Var-quote)
rlm@10 300
rlm@10 301 ;; Anonymous function literal (#())
rlm@10 302
rlm@10 303 (deftest t-Anonymouns-function-literal)
rlm@10 304
rlm@10 305 ;; Syntax-quote (`, note, the "backquote" character), Unquote (~) and
rlm@10 306 ;; Unquote-splicing (~@)
rlm@10 307
rlm@10 308 (deftest t-Syntax-quote
rlm@10 309 (are [x y] (= x y)
rlm@10 310 `() () ; was NPE before SVN r1337
rlm@10 311 ))
rlm@10 312
rlm@10 313 ;; (read)
rlm@10 314 ;; (read stream)
rlm@10 315 ;; (read stream eof-is-error)
rlm@10 316 ;; (read stream eof-is-error eof-value)
rlm@10 317 ;; (read stream eof-is-error eof-value is-recursive)
rlm@10 318
rlm@10 319 (deftest t-read)