Skip to content

Commit 4d488b9

Browse files
check generators are repeatable, fix seed, shuffle, stop test on input failure
1 parent 992d301 commit 4d488b9

4 files changed

Lines changed: 30 additions & 6 deletions

File tree

src/main/clojure/clojure/test/generative.clj

Lines changed: 6 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -47,10 +47,12 @@
4747

4848
(defmacro fail
4949
[& args]
50-
(with-meta `(event/report-context :type ::fail
51-
:level :warn
52-
~@args)
53-
(meta &form)))
50+
`(do
51+
(runner/failed!)
52+
~(with-meta `(event/report-context :type ::fail
53+
:level :warn
54+
~@args)
55+
(meta &form))))
5456

5557
(defmacro is
5658
([v] (with-meta `(is ~v nil) (meta &form)))

src/main/clojure/clojure/test/generative/generators.clj

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,7 @@ cases, because
1717
1. Spec compilation uses these fns for you automatically.
1818
2. There are lot of collisions with clojure.core!"}
1919
clojure.test.generative.generators
20-
(:refer-clojure :exclude [byte char long int short float double boolean string symbol keyword list vec set hash-map name rand-nth byte-array boolean-array short-array char-array int-array long-array float-array double-array])
20+
(:refer-clojure :exclude [byte char long int short float double boolean string symbol keyword list vec set hash-map name rand-nth byte-array boolean-array short-array char-array int-array long-array float-array double-array shuffle])
2121
(:require [clojure.core :as core]))
2222

2323
(def ^:dynamic ^java.util.Random
@@ -274,6 +274,12 @@ instance you can get a repeatable basis for tests."
274274
[]
275275
(one-of scalar collection))
276276

277+
(defn shuffle
278+
"Shuffle coll"
279+
[coll]
280+
(sort-by double coll))
281+
282+
277283

278284

279285

src/main/clojure/clojure/test/generative/runner.clj

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -63,7 +63,8 @@
6363
(map
6464
#(future
6565
(try
66-
(binding [gen/*seed* (java.util.Random. (+ % 42))
66+
(binding [gen/*seed* (+ % 42)
67+
gen/*rnd* (java.util.Random. gen/*seed*)
6768
*failed* (promise)]
6869
(loop [iter 0]
6970
(let [result (run-iter test)
Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,15 @@
1+
(ns clojure.test.generative.generators-test
2+
(:use clojure.test.generative)
3+
(:require [clojure.test.generative.generators :as gen]))
4+
5+
(defspec test-repeatable-generation
6+
(constantly nil)
7+
[^int seed ^{:tag (uniform 1 100)} iters]
8+
(let [generator (fn []
9+
(binding [gen/*rnd* (java.util.Random. seed)]
10+
(into [] (repeatedly iters gen/anything))))
11+
gen-1 (generator)
12+
gen-2 (generator)]
13+
(dotimes [iter iters]
14+
(is (= (nth gen-1 iter)
15+
(nth gen-2 iter))))))

0 commit comments

Comments
 (0)