Skip to content

Instantly share code, notes, and snippets.

@jeaye
Last active November 12, 2017 23:17
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save jeaye/eaa8da70171a538e23b3c5dbfd9797fd to your computer and use it in GitHub Desktop.
Save jeaye/eaa8da70171a538e23b3c5dbfd9797fd to your computer and use it in GitHub Desktop.
(defn arities
([a]
(inc a))
([a b]
(+ a b))
([a b c]
0))
(s/fdef arities
:args (s/or :arity-1 (s/cat :a number?)
:arity-2 (s/cat :a number? :b number?)
:arity-3 (s/cat :a string? :b boolean? :c map?))
:ret number?)
(st/instrument)
(deftest arities'
(testing "Arity-1 Positive"
(is (arities 1)))
(testing "Arity-1 Negative"
(is (thrown? #?(:clj RuntimeException :cljs :default)
(arities "bad"))))) ; Doesn't throw with ClojureScript, but does with Clojure
(defn arities
[a]
(inc a))
(s/fdef arities ; Same spec, but defn doesn't have multiple arities
:args (s/or :arity-1 (s/cat :a number?)
:arity-2 (s/cat :a number? :b number?)
:arity-3 (s/cat :a string? :b boolean? :c map?))
:ret number?)
(st/instrument)
(deftest arities'
(testing "Arity-1 Positive"
(is (arities 1)))
(testing "Arity-1 Negative"
(is (thrown? #?(:clj RuntimeException :cljs :default)
(arities "bad"))))) ; Throws for Clojure and ClojureScript
@mfikes
Copy link

mfikes commented Nov 12, 2017

Here is what I get:

$ clj -m cljs.repl.node
ClojureScript Node.js REPL server listening on 56812
To quit, type: :cljs/quit
cljs.user=> (require '[clojure.spec.alpha :as s])
nil
cljs.user=> (require '[clojure.spec.test.alpha :as st])
nil
cljs.user=> (require '[clojure.test :refer [testing deftest is]])
nil
(defn arities
  ([a]
   (inc a))
  ([a b]
   (+ a b))
  ([a b c]
   0))
#'cljs.user/arities
(s/fdef arities
        :args (s/or :arity-1 (s/cat :a number?)
                    :arity-2 (s/cat :a number? :b number?)
                    :arity-3 (s/cat :a string? :b boolean? :c map?))
        :ret number?)
cljs.user/arities
cljs.user=> (st/instrument)
[cljs.user/arities]
(deftest arities'
  (testing "Arity-1 Positive"
    (is (arities 1)))
  (testing "Arity-1 Negative"
    (is (thrown? #?(:clj RuntimeException :cljs :default)
                 (arities "bad"))))) ; Doesn't throw with ClojureScript, but does with Clojure
#'cljs.user/arities'
cljs.user=> (arities')
nil
cljs.user=> (cljs.test/run-tests)

Testing cljs.user

Ran 1 tests containing 2 assertions.
0 failures, 0 errors.
nil
cljs.user=> *clojurescript-version*
"1.9.946"
cljs.user=> (arities "bad")
repl:13
throw e__8152__auto__;
^

Error: Call to #'cljs.user/arities did not conform to spec:
In: [0] val: "bad" fails at: [:args :arity-1 :a] predicate: number?
In: [0] val: "bad" fails at: [:args :arity-2 :a] predicate: number?
val: () fails at: [:args :arity-3 :b] predicate: boolean?,  Insufficient input
:cljs.spec.alpha/spec  #object[cljs.spec.alpha.t_cljs$spec$alpha12129]
:cljs.spec.alpha/value  ("bad")
:cljs.spec.alpha/args  ("bad")
:cljs.spec.alpha/failure  :instrument

    at new cljs$core$ExceptionInfo (/Users/mfikes/out/.cljs_node_repl/cljs/core.js:35447:10)
    at Function.cljs.core.ex_info.cljs$core$IFn$_invoke$arity$3 (/Users/mfikes/out/.cljs_node_repl/cljs/core.js:35508:9)
    at Function.cljs.core.ex_info.cljs$core$IFn$_invoke$arity$2 (/Users/mfikes/out/.cljs_node_repl/cljs/core.js:35504:26)
    at cljs$core$ex_info (/Users/mfikes/out/.cljs_node_repl/cljs/core.js:35490:26)
    at /Users/mfikes/.cljs_node_repl/cljs/spec/test/alpha.js:133:25
    at G__11396__delegate (/Users/mfikes/.cljs_node_repl/cljs/spec/test/alpha.js:164:15)
    at G__11396 (/Users/mfikes/.cljs_node_repl/cljs/spec/test/alpha.js:185:27)
    at repl:1:97
    at repl:9:3
    at repl:14:4

And

$ cat deps.edn
{:deps
  {org.clojure/clojurescript {:mvn/version "1.9.946"}
   com.cognitect/transit-cljs {:mvn/version "0.8.243"}
   org.clojure/test.check {:mvn/version "0.10.0-alpha2"}}}

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment