diff options
Diffstat (limited to 'test')
| -rw-r--r-- | test/jester/types_test.clj | 37 | 
1 files changed, 25 insertions, 12 deletions
diff --git a/test/jester/types_test.clj b/test/jester/types_test.clj index 84b28fe..da57047 100644 --- a/test/jester/types_test.clj +++ b/test/jester/types_test.clj @@ -3,10 +3,13 @@              [clojure.test.check :refer [quick-check]]              [clojure.test.check.generators :as gen]              [clojure.test.check.properties :refer [for-all]] +            [clojure.test.check.clojure-test :refer [defspec]]              [jester.types :as sut])) +(alter-meta! #'for-all assoc :style/indent 1) +  (def string-enum-gen (gen/fmap #(cons 'enum %) (gen/vector gen/string))) -(def number-enum-gen (gen/fmap #(cons 'enum %) (gen/vector gen/double))) +(def number-enum-gen (gen/fmap #(cons 'enum %) (gen/vector (gen/double* {:NaN? false}))))  (def boolean-enum-gen (gen/fmap #(cons 'enum %) (gen/vector gen/boolean)))  (def enum-gen (gen/one-of [string-enum-gen                             number-enum-gen @@ -27,15 +30,13 @@    (gen/fmap #(list 'list %) subgen))  (defn array-type-gen [subgen] -  (gen/recursive-gen (fn [gen] -                       (gen/fmap (fn [[main rest]] -                                   (into main (when rest ['& rest]))) -                                 (gen/tuple (gen/vector gen) -                                            (gen/one-of -                                             [(gen/return nil) -                                              (array-type-gen gen) -                                              (list-type-gen gen)])))) -                     subgen)) +  (gen/fmap (fn [[main rest]] +              (into main (when rest ['& rest]))) +            (gen/tuple (gen/vector subgen 0 5) +                       (gen/one-of +                        [(gen/return nil) +                         ;; (array-type-gen subgen) +                         (list-type-gen subgen)]))))  (defn map-type-gen [keygen valgen]    (gen/fmap #(cons 'map %) (gen/tuple keygen valgen))) @@ -44,7 +45,7 @@    (gen/fmap #(cons '-> %) (gen/tuple argsgen resultgen)))  (defn record-type-gen [subgen] -  (gen/map gen/symbol subgen)) +  (gen/map gen/keyword subgen))  (defn compound-type-gen [subgen]    (gen/one-of [(optional-type-gen subgen) @@ -54,7 +55,19 @@                 (func-type-gen (array-type-gen subgen) subgen)                 (record-type-gen subgen)])) -(gen/sample (compound-type-gen atomic-type-gen)) +(def type-gen (gen/recursive-gen compound-type-gen atomic-type-gen)) + +(defspec any-supertype-of-all 200 +  (for-all [type type-gen] +    (sut/subtype? type 'any))) + +(defspec optional-supertype-of-raw-type 200 +  (for-all [type type-gen] +    (sut/subtype? type `(optional ~type)))) + +(defspec array-subtype-of-list-if-all-types-are-subtypes 200 +  (for-all [array-type (array-type-gen string-enum-gen)] +    (sut/subtype? array-type '(list string))))  (deftest assert-type    (testing "happy paths"  | 
