babashka/feature-test-check/babashka/impl/clojure/test/check.clj
Bob bb57d220d0
test that var metadata matches containing ns (#967)
* - change namespace on 'quick-check' to match clojure version
- add test for var meta->namespace alignment

* - add ns to with-transaction macro
2021-08-08 21:23:58 +02:00

177 lines
7.7 KiB
Clojure

(ns babashka.impl.clojure.test.check
{:no-doc true}
(:require [clojure.test.check.random :as random]
[sci.core :as sci]))
(def next-rng
"Returns a random-number generator. Successive calls should return
independent results."
(let [a (atom (delay (random/make-java-util-splittable-random (System/currentTimeMillis))))
thread-local
(proxy [ThreadLocal] []
(initialValue []
(first (random/split (swap! a #(second (random/split (force %))))))))]
(fn []
(let [rng (.get thread-local)
[rng1 rng2] (random/split rng)]
(.set thread-local rng2)
rng1))))
(defn make-random
"Given an optional Long seed, returns an object that satisfies the
IRandom protocol."
([] (next-rng))
([seed] (random/make-java-util-splittable-random seed)))
(alter-var-root #'random/next-rng (constantly next-rng))
(alter-var-root #'random/make-random (constantly make-random))
(def r-ns (sci/create-ns 'clojure.test.check.random nil))
#_(doseq [k (sort (keys (ns-publics 'clojure.test.check.random)))]
(println (str "'" k) (format "(sci/copy-var random/%s r-ns)" k)))
(def random-namespace
{'make-java-util-splittable-random (sci/copy-var random/make-java-util-splittable-random r-ns)
'make-random (sci/copy-var random/make-random r-ns)
'rand-double (sci/copy-var random/rand-double r-ns)
'rand-long (sci/copy-var random/rand-long r-ns)
'split (sci/copy-var random/split r-ns)
'split-n (sci/copy-var random/split-n r-ns)})
(require '[clojure.test.check.generators :as gen])
(def gen-ns (sci/create-ns 'clojure.test.check.generators nil))
#_(doseq [k (sort (keys (ns-publics 'clojure.test.check.generators)))]
(println (str "'" k) (format "(sci/copy-var gen/%s gen-ns)" k)))
(def generators-namespace
{'->Generator (sci/copy-var gen/->Generator gen-ns)
'any (sci/copy-var gen/any gen-ns)
'any-equatable (sci/copy-var gen/any-equatable gen-ns)
'any-printable (sci/copy-var gen/any-printable gen-ns)
'any-printable-equatable (sci/copy-var gen/any-printable-equatable gen-ns)
'big-ratio (sci/copy-var gen/big-ratio gen-ns)
'bind (sci/copy-var gen/bind gen-ns)
'boolean (sci/copy-var gen/boolean gen-ns)
'byte (sci/copy-var gen/byte gen-ns)
'bytes (sci/copy-var gen/bytes gen-ns)
'call-gen (sci/copy-var gen/call-gen gen-ns)
'char (sci/copy-var gen/char gen-ns)
'char-alpha (sci/copy-var gen/char-alpha gen-ns)
'char-alpha-numeric (sci/copy-var gen/char-alpha-numeric gen-ns)
'char-alphanumeric (sci/copy-var gen/char-alphanumeric gen-ns)
'char-ascii (sci/copy-var gen/char-ascii gen-ns)
'choose (sci/copy-var gen/choose gen-ns)
'container-type (sci/copy-var gen/container-type gen-ns)
'double (sci/copy-var gen/double gen-ns)
'double* (sci/copy-var gen/double* gen-ns)
'elements (sci/copy-var gen/elements gen-ns)
'fmap (sci/copy-var gen/fmap gen-ns)
'frequency (sci/copy-var gen/frequency gen-ns)
'gen-bind (sci/copy-var gen/gen-bind gen-ns)
'gen-fmap (sci/copy-var gen/gen-fmap gen-ns)
'gen-pure (sci/copy-var gen/gen-pure gen-ns)
'generate (sci/copy-var gen/generate gen-ns)
'generator? (sci/copy-var gen/generator? gen-ns)
'hash-map (sci/copy-var gen/hash-map gen-ns)
'int (sci/copy-var gen/int gen-ns)
'keyword (sci/copy-var gen/keyword gen-ns)
'keyword-ns (sci/copy-var gen/keyword-ns gen-ns)
'large-integer (sci/copy-var gen/large-integer gen-ns)
'large-integer* (sci/copy-var gen/large-integer* gen-ns)
'lazy-random-states (sci/copy-var gen/lazy-random-states gen-ns)
'let (sci/copy-var gen/let gen-ns)
'list (sci/copy-var gen/list gen-ns)
'list-distinct (sci/copy-var gen/list-distinct gen-ns)
'list-distinct-by (sci/copy-var gen/list-distinct-by gen-ns)
'make-size-range-seq (sci/copy-var gen/make-size-range-seq gen-ns)
'map (sci/copy-var gen/map gen-ns)
'map->Generator (sci/copy-var gen/map->Generator gen-ns)
'nat (sci/copy-var gen/nat gen-ns)
'neg-int (sci/copy-var gen/neg-int gen-ns)
'no-shrink (sci/copy-var gen/no-shrink gen-ns)
'not-empty (sci/copy-var gen/not-empty gen-ns)
'one-of (sci/copy-var gen/one-of gen-ns)
'pos-int (sci/copy-var gen/pos-int gen-ns)
'ratio (sci/copy-var gen/ratio gen-ns)
'recursive-gen (sci/copy-var gen/recursive-gen gen-ns)
'resize (sci/copy-var gen/resize gen-ns)
'return (sci/copy-var gen/return gen-ns)
's-neg-int (sci/copy-var gen/s-neg-int gen-ns)
's-pos-int (sci/copy-var gen/s-pos-int gen-ns)
'sample (sci/copy-var gen/sample gen-ns)
'sample-seq (sci/copy-var gen/sample-seq gen-ns)
'scale (sci/copy-var gen/scale gen-ns)
'set (sci/copy-var gen/set gen-ns)
'shrink-2 (sci/copy-var gen/shrink-2 gen-ns)
'shuffle (sci/copy-var gen/shuffle gen-ns)
'simple-type (sci/copy-var gen/simple-type gen-ns)
'simple-type-equatable (sci/copy-var gen/simple-type-equatable gen-ns)
'simple-type-printable (sci/copy-var gen/simple-type-printable gen-ns)
'simple-type-printable-equatable (sci/copy-var gen/simple-type-printable-equatable gen-ns)
'size-bounded-bigint (sci/copy-var gen/size-bounded-bigint gen-ns)
'sized (sci/copy-var gen/sized gen-ns)
'small-integer (sci/copy-var gen/small-integer gen-ns)
'sorted-set (sci/copy-var gen/sorted-set gen-ns)
'string (sci/copy-var gen/string gen-ns)
'string-alpha-numeric (sci/copy-var gen/string-alpha-numeric gen-ns)
'string-alphanumeric (sci/copy-var gen/string-alphanumeric gen-ns)
'string-ascii (sci/copy-var gen/string-ascii gen-ns)
'such-that (sci/copy-var gen/such-that gen-ns)
'symbol (sci/copy-var gen/symbol gen-ns)
'symbol-ns (sci/copy-var gen/symbol-ns gen-ns)
'tuple (sci/copy-var gen/tuple gen-ns)
'uuid (sci/copy-var gen/uuid gen-ns)
'vector (sci/copy-var gen/vector gen-ns)
'vector-distinct (sci/copy-var gen/vector-distinct gen-ns)
'vector-distinct-by (sci/copy-var gen/vector-distinct-by gen-ns)})
(require '[clojure.test.check.rose-tree :as rose-tree])
(def rose-ns (sci/create-ns 'clojure.test.check.rose-tree nil))
#_(doseq [k (sort (keys (ns-publics 'clojure.test.check.rose-tree)))]
(println (str "'" k) (format "(sci/copy-var rose-tree/%s rose-ns)" k)))
(def rose-tree-namespace
{'->RoseTree (sci/copy-var rose-tree/->RoseTree rose-ns)
'bind (sci/copy-var rose-tree/bind rose-ns)
'children (sci/copy-var rose-tree/children rose-ns)
'collapse (sci/copy-var rose-tree/collapse rose-ns)
'filter (sci/copy-var rose-tree/filter rose-ns)
'fmap (sci/copy-var rose-tree/fmap rose-ns)
'join (sci/copy-var rose-tree/join rose-ns)
'make-rose (sci/copy-var rose-tree/make-rose rose-ns)
'permutations (sci/copy-var rose-tree/permutations rose-ns)
'pure (sci/copy-var rose-tree/pure rose-ns)
'remove (sci/copy-var rose-tree/remove rose-ns)
'root (sci/copy-var rose-tree/root rose-ns)
'seq (sci/copy-var rose-tree/seq rose-ns)
'shrink (sci/copy-var rose-tree/shrink rose-ns)
'shrink-vector (sci/copy-var rose-tree/shrink-vector rose-ns)
'zip (sci/copy-var rose-tree/zip rose-ns)})
(require '[clojure.test.check.properties :as properties])
(def p-ns (sci/create-ns 'clojure.test.check.properties nil))
#_(doseq [k (sort (keys (ns-publics 'clojure.test.check.properties)))]
(println (str "'" k) (format "(sci/copy-var properties/%s p-ns)" k)))
(def properties-namespace
{'->ErrorResult (sci/copy-var properties/->ErrorResult p-ns)
'for-all (sci/copy-var properties/for-all p-ns)
'for-all* (sci/copy-var properties/for-all* p-ns)
'map->ErrorResult (sci/copy-var properties/map->ErrorResult p-ns)})
(require '[clojure.test.check :as tc])
(def tc-ns (sci/create-ns 'clojure.test.check nil))
#_(doseq [k (sort (keys (ns-publics 'clojure.test.check)))]
(println (str "'" k) (format "(sci/copy-var tc/%s p-ns)" k)))
(def test-check-namespace
{'quick-check (sci/copy-var tc/quick-check tc-ns)})