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.

Reply via email to