Generative Testing for Self-Hosted ClojureScript
June 7, 2017
A release of test.check
is now available which supports self-hosted ClojureScript! All you need to obtain is version 0.10.0-alpha1
.
Here is the test.check
ClojureScript example working in Planck (the same works in Lumo):
$ planck -qc test.check-0.10.0-alpha1.jar
cljs.user=> (ns cljs.user
#_=> (:require [clojure.test.check :as tc]
#_=> [clojure.test.check.generators :as gen]
#_=> [clojure.test.check.properties :as prop :include-macros true]))
nil
cljs.user=> (def sort-idempotent-prop
#_=> (prop/for-all [v (gen/vector gen/int)]
#_=> (= (sort v) (sort (sort v)))))
#'cljs.user/sort-idempotent-prop
cljs.user=> (tc/quick-check 100 sort-idempotent-prop)
{:result true, :num-tests 100, :seed 1496853287202}
The changes needed for this (TCHECK-105) have been around for a while now, so have been fairly well tested. They are actually already available in the version of Replete that is in the App Store.
The update to test.check
also works with Spec in self-hosted ClojureScript:
$ planck -qc test.check-0.10.0-alpha1.jar
cljs.user=> (require '[clojure.spec.alpha :as s]
#_=> '[clojure.test.check.generators])
nil
cljs.user=> (s/def ::my-number integer?)
:cljs.user/my-number
cljs.user=> (s/exercise ::my-number)
([0 0] [-1 -1] [-1 -1] [-1 -1] [1 1] [-8 -8] [0 0] [6 6] [-108 -108] [-57 -57])
Have fun!