Commits

Meikel Brandmeyer committed 359f247

Add frequencies combinator

Comments (0)

Files changed (1)

src/main/clojure/clojurecheck/core.clj

   bool
   (fn [size]
     (< (rand) 0.5)))
+
+(defn frequency
+  "Chooses one of the given generators based on the associated
+  weights. The size guidance is passed verbatim to the chosen
+  generator."
+  {:added "1.0"}
+  [choices]
+  (let [freqs   (reductions + (vals choices))
+        total   (last freqs)
+        freqs   (map #(-> % (/ total) clojure.core/float) freqs)
+        choices (map vector (keys choices) freqs)
+        choose  (fn []
+                  (let [dice (rand)]
+                    (some (fn [[c f]] (when (< f dice) c)) choices)))]
+    (fn [size]
+      ((choose) size))))
Tip: Filter by directory path e.g. /media app.js to search for public/media/app.js.
Tip: Use camelCasing e.g. ProjME to search for ProjectModifiedEvent.java.
Tip: Filter by extension type e.g. /repo .js to search for all .js files in the /repo directory.
Tip: Separate your search with spaces e.g. /ssh pom.xml to search for src/ssh/pom.xml.
Tip: Use ↑ and ↓ arrow keys to navigate and return to view the file.
Tip: You can also navigate files with Ctrl+j (next) and Ctrl+k (previous) and view the file with Ctrl+o.
Tip: You can also navigate files with Alt+j (next) and Alt+k (previous) and view the file with Alt+o.