Skip to content

Instantly share code, notes, and snippets.

@jamii
Created August 19, 2014 00:10
Show Gist options
  • Save jamii/25be7c5efa91f0e81e00 to your computer and use it in GitHub Desktop.
Save jamii/25be7c5efa91f0e81e00 to your computer and use it in GitHub Desktop.
;; fast gens with no shrinking and no long strings. good enough for government work
(defn make-simple-key-elem [rnd size]
(let [value (gen/rand-range rnd (- size) size)]
(if (pprng/boolean rnd)
value
(str value))))
(defn make-simple-key [rnd size key-len]
(let [result #js []]
(dotimes [_ key-len]
(.push result (make-simple-key-elem rnd size)))
result))
(defn make-simple-delta [rnd size]
(let [delta (gen/rand-range rnd (- size) size)]
(if (== delta 0)
(+ delta 1)
delta)))
(defn gen-update [key-len]
(gen/make-gen
(fn [rnd size]
(let [key (make-simple-key rnd size key-len)
delta (make-simple-delta rnd size)]
[[:update key delta] nil]))))
(defn run-self-join-prop [min-keys key-len updates]
(let [[tree _] (apply-to-tree (tree min-keys key-len) updates)
solver (solver
key-len
#js [(contains (iterator tree) (into-array (range key-len)))
(contains (iterator tree) (into-array (range key-len)))])
tree-elems (.elems tree)]
(dotimes [i (alength tree-elems)]
(let [elem (aget tree-elems i)]
(when (number? elem)
(aset tree-elems i (* elem elem)))))
(prim= tree-elems (.elems solver))))
(defn self-join-prop [key-len]
(prop/for-all [min-keys gen/s-pos-int
updates (gen/vector (gen-update key-len))]
(run-self-join-prop min-keys key-len updates)))
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment