annotate src/clojure/test_clojure/predicates.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/28/2009
rlm@10 13
rlm@10 14 (ns clojure.test-clojure.predicates
rlm@10 15 (:use clojure.test))
rlm@10 16
rlm@10 17
rlm@10 18 ;; *** Type predicates ***
rlm@10 19
rlm@10 20 (def myvar 42)
rlm@10 21
rlm@10 22 (def sample-data {
rlm@10 23 :nil nil
rlm@10 24
rlm@10 25 :bool-true true
rlm@10 26 :bool-false false
rlm@10 27
rlm@10 28 :byte (byte 7)
rlm@10 29 :short (short 7)
rlm@10 30 :int (int 7)
rlm@10 31 :long (long 7)
rlm@10 32 :bigint (bigint 7)
rlm@10 33 :float (float 7)
rlm@10 34 :double (double 7)
rlm@10 35 :bigdec (bigdec 7)
rlm@10 36
rlm@10 37 :ratio 2/3
rlm@10 38
rlm@10 39 :character \a
rlm@10 40 :symbol 'abc
rlm@10 41 :keyword :kw
rlm@10 42
rlm@10 43 :empty-string ""
rlm@10 44 :empty-regex #""
rlm@10 45 :empty-list ()
rlm@10 46 :empty-lazy-seq (lazy-seq nil)
rlm@10 47 :empty-vector []
rlm@10 48 :empty-map {}
rlm@10 49 :empty-set #{}
rlm@10 50 :empty-array (into-array [])
rlm@10 51
rlm@10 52 :string "abc"
rlm@10 53 :regex #"a*b"
rlm@10 54 :list '(1 2 3)
rlm@10 55 :lazy-seq (lazy-seq [1 2 3])
rlm@10 56 :vector [1 2 3]
rlm@10 57 :map {:a 1 :b 2 :c 3}
rlm@10 58 :set #{1 2 3}
rlm@10 59 :array (into-array [1 2 3])
rlm@10 60
rlm@10 61 :fn (fn [x] (* 2 x))
rlm@10 62
rlm@10 63 :class java.util.Date
rlm@10 64 :object (new java.util.Date)
rlm@10 65
rlm@10 66 :var (var myvar)
rlm@10 67 :delay (delay (+ 1 2))
rlm@10 68 })
rlm@10 69
rlm@10 70
rlm@10 71 (def type-preds {
rlm@10 72 nil? [:nil]
rlm@10 73
rlm@10 74 true? [:bool-true]
rlm@10 75 false? [:bool-false]
rlm@10 76 ; boolean?
rlm@10 77
rlm@10 78 integer? [:byte :short :int :long :bigint]
rlm@10 79 float? [:float :double]
rlm@10 80 decimal? [:bigdec]
rlm@10 81 ratio? [:ratio]
rlm@10 82 rational? [:byte :short :int :long :bigint :ratio :bigdec]
rlm@10 83 number? [:byte :short :int :long :bigint :ratio :bigdec :float :double]
rlm@10 84
rlm@10 85 ; character?
rlm@10 86 symbol? [:symbol]
rlm@10 87 keyword? [:keyword]
rlm@10 88
rlm@10 89 string? [:empty-string :string]
rlm@10 90 ; regex?
rlm@10 91
rlm@10 92 list? [:empty-list :list]
rlm@10 93 vector? [:empty-vector :vector]
rlm@10 94 map? [:empty-map :map]
rlm@10 95 set? [:empty-set :set]
rlm@10 96
rlm@10 97 coll? [:empty-list :list
rlm@10 98 :empty-lazy-seq :lazy-seq
rlm@10 99 :empty-vector :vector
rlm@10 100 :empty-map :map
rlm@10 101 :empty-set :set]
rlm@10 102
rlm@10 103 seq? [:empty-list :list
rlm@10 104 :empty-lazy-seq :lazy-seq]
rlm@10 105 ; array?
rlm@10 106
rlm@10 107 fn? [:fn]
rlm@10 108 ifn? [:fn
rlm@10 109 :empty-vector :vector :empty-map :map :empty-set :set
rlm@10 110 :keyword :symbol :var]
rlm@10 111
rlm@10 112 class? [:class]
rlm@10 113 var? [:var]
rlm@10 114 delay? [:delay]
rlm@10 115 })
rlm@10 116
rlm@10 117
rlm@10 118 ;; Test all type predicates against all data types
rlm@10 119 ;;
rlm@10 120 (defn- get-fn-name [f]
rlm@10 121 (str
rlm@10 122 (apply str (nthnext (first (.split (str f) "_"))
rlm@10 123 (count "clojure.core$")))
rlm@10 124 "?"))
rlm@10 125
rlm@10 126 (deftest test-type-preds
rlm@10 127 (doseq [tp type-preds]
rlm@10 128 (doseq [dt sample-data]
rlm@10 129 (if (some #(= % (first dt)) (second tp))
rlm@10 130 (is ((first tp) (second dt))
rlm@10 131 (pr-str (list (get-fn-name (first tp)) (second dt))))
rlm@10 132 (is (not ((first tp) (second dt)))
rlm@10 133 (pr-str (list 'not (list (get-fn-name (first tp)) (second dt)))))))))
rlm@10 134
rlm@10 135
rlm@10 136 ;; Additional tests:
rlm@10 137 ;; http://groups.google.com/group/clojure/browse_thread/thread/537761a06edb4b06/bfd4f0705b746a38
rlm@10 138 ;;
rlm@10 139 (deftest test-string?-more
rlm@10 140 (are [x] (not (string? x))
rlm@10 141 (new java.lang.StringBuilder "abc")
rlm@10 142 (new java.lang.StringBuffer "xyz")))