The issue is in the call to instrument: (stest/instrument `ranged-rand {:replace {`ranged-rand ::ranged-const}})
The :replace map is "a map from var-name symbols to replacement fns". Here, you are passing a spec name, rather than a function. So you want something like this instead: (stest/instrument `ranged-rand {:replace {`ranged-rand ranged-const}}) On Monday, November 7, 2016 at 10:07:39 PM UTC-6, Joseph Wayne Norton wrote: > > Hello. > > I tried to construct a small example to understand and to illustrate how > stest/instrument with the :replace option works. > > My attempt to construct a small working example was to expand on the > ranged-rand example in the clojure.spec Guide. > > I created another function called ranged-const that always returns the > value of the start argument. I wanted to see if the ranged-const function > could become a mock to the ranged-rand function. > > Here is the behavior that I am seeing. The mocked ranged-rand should be > returning 2 but it always returns 5 instead. Secondly, I would have > expected to see the printed side-effect of [:ranged-const 2 5]. > > > spec-demo.core=> (stest/instrument `ranged-rand {:replace {`ranged-rand > ::ranged-const}}) > [spec-demo.core/ranged-rand] > spec-demo.core=> (ranged-const 2 5) > [:ranged-const 2 5] > 2 > *spec-demo.core=> (ranged-rand 2 5)* > *5* > *spec-demo.core=> (ranged-rand 2 5)* > *5* > > > Any suggestions? > > Best regards, > > Joe N. > > > Here is a complete log: > > $ cat .boot/boot.properties > #http://boot-clj.com > #Sat Sep 17 23:34:35 CDT 2016 > BOOT_EMIT_TARGET=no > BOOT_CLOJURE_NAME=org.clojure/clojure > BOOT_VERSION=2.6.0 > BOOT_CLOJURE_VERSION=1.9.0-alpha14 > > > $ boot repl > *nREPL server started on port 53962 on host 127.0.0.1 - > nrepl://127.0.0.1:53962* > REPL-y 0.3.7, nREPL 0.2.12 > Clojure 1.9.0-alpha14 > Java HotSpot(TM) 64-Bit Server VM 1.8.0_102-b14 > Exit: Control+D or (exit) or (quit) > Commands: (user/help) > Docs: (doc function-name-here) > (find-doc "part-of-name-here") > Find by Name: (find-name "part-of-name-here") > Source: (source function-name-here) > Javadoc: (javadoc java-object-or-class-here) > Examples from clojuredocs.org: [clojuredocs or cdoc] > (user/clojuredocs name-here) > (user/clojuredocs "ns-here" "name-here") > boot.user=> (ns spec-demo.core > #_=> (:require [clojure.spec :as s] > #_=> [clojure.spec.test :as stest]) > #_=> (:gen-class)) > nil > > > spec-demo.core=> (defn ranged-rand > #_=> "Returns random int in range start <= rand < end" > #_=> [start end] > #_=> (println [:ranged-rand start end]) ; DEBUG > #_=> (+ start (long (rand (- end start))))) > #'spec-demo.core/ranged-rand > > spec-demo.core=> (s/fdef ranged-rand > #_=> :args (s/and (s/cat :start int? :end int?) > #_=> #(< (:start %) (:end %))) > #_=> :ret int? > #_=> :fn (s/and #(>= (:ret %) (-> % :args :start)) > #_=> #(< (:ret %) (-> % :args :end)))) > spec-demo.core/ranged-rand > > spec-demo.core=> (defn ranged-const > #_=> "Returns const int equal to start such that start <= > const < end" > #_=> [start end] > #_=> (println [:ranged-const start end]) ; DEBUG > #_=> start) > #'spec-demo.core/ranged-const > > spec-demo.core=> (s/fdef ranged-const > #_=> :args (s/and (s/cat :start int? :end int?) > #_=> #(< (:start %) (:end %))) > #_=> :ret int? > #_=> :fn #(= (:ret %) (-> % :args :start))) > spec-demo.core/ranged-const > spec-demo.core=> (ranged-rand 2 5) > [:ranged-rand 2 5] > 3 > spec-demo.core=> (ranged-rand 2 5) > [:ranged-rand 2 5] > 4 > spec-demo.core=> (ranged-rand 2 5) > [:ranged-rand 2 5] > 2 > spec-demo.core=> (ranged-const 2 5) > [:ranged-const 2 5] > 2 > spec-demo.core=> (ranged-const 2 5) > [:ranged-const 2 5] > 2 > spec-demo.core=> (ranged-const 2 5) > [:ranged-const 2 5] > 2 > > spec-demo.core=> (stest/instrument `ranged-rand {:replace {`ranged-rand > ::ranged-const}}) > [spec-demo.core/ranged-rand] > spec-demo.core=> (ranged-const 2 5) > [:ranged-const 2 5] > 2 > spec-demo.core=> (ranged-rand 2 5) > 5 > spec-demo.core=> (ranged-rand 2 5) > 5 > spec-demo.core=> (ranged-rand 2 5) > 5 > spec-demo.core=> > > -- You received this message because you are subscribed to the Google Groups "Clojure" group. To post to this group, send email to clojure@googlegroups.com Note that posts from new members are moderated - please be patient with your first post. To unsubscribe from this group, send email to clojure+unsubscr...@googlegroups.com For more options, visit this group at http://groups.google.com/group/clojure?hl=en --- You received this message because you are subscribed to the Google Groups "Clojure" group. To unsubscribe from this group and stop receiving emails from it, send an email to clojure+unsubscr...@googlegroups.com. For more options, visit https://groups.google.com/d/optout.