Hi,
I've taken a stab at what I think you want:
(def gen-cache
(gen/fmap
#(reduce (fn [r m] (merge-with merge r m)) {} %)
(gen/vector (gen/fmap
(fn [o]
(let [{:keys [port instr] :as ord} o]
(assoc-in {} [port instr] ord)))
ord-gen))))
Instead of using `gen/sample` to create a sequence, I use `gen/vector`. And in
order to apply the `reduce` function, I use `gen/fmap`.
As an aside, I'm not sure how this is a multi-map. I was under the impression a
multi-map was simply a map that can store multiple values in the same key.
Reid
On Thursday, July 3, 2014 6:06:29 AM UTC-5, cig wrote:
>
> Hi
>
> I have been trying to build a test.check generator for a multi map,
> without much success.
> I have a generator which generates ordinary maps:
>
> (def ord-gen
> (gen/fmap (partial zipmap [:port :instr :qty])
> (gen/tuple (gen/not-empty gen/string-alpha-numeric)
> (gen/not-empty gen/string-alpha-numeric)
> (gen/frequency [[9 gen/pos-int] [1 gen/neg-int]]))))
>
> (gen/sample ord-gen 3)
> ;; => ({:qty 0, :instr "X4", :port "re"} {:qty 0, :instr "v", :port "8"}
> {:qty 1, :instr "3A", :port "7"})
>
> However, I would like to merge this sequence of individual maps into a
> multi-map of the form:
>
> {"re" { "X4" {:qty 0, :instr "X4", :port "re"}}, "8" { "v" {:qty 0, :instr
> "v", :port "8"}}, "7" { "3A" {:qty 1, :instr "3A", :port "7"}}}
>
> The closest I have gotten to achieving this is by realising the
> intermediate steps:
>
> (def gen-cache
> (->>
> (gen/fmap (fn [o]
> (let [{:keys [port instr] :as ord} o]
> (assoc-in {} [port instr] ord)))
> ord-gen)
> (gen/sample)
> (reduce (fn [r m] (merge-with merge r m)) {})
> (gen/return)))
>
>
> However, this returns the same value constantly (I am aware that, that is
> what gen/return is supposed to do, however, I can not get much else working
> for me). I would Ideally like to bind the ord-gen into the gen-cache
> generator. Any help would be very appreciated.
>
--
You received this message because you are subscribed to the Google
Groups "Clojure" group.
To post to this group, send email to [email protected]
Note that posts from new members are moderated - please be patient with your
first post.
To unsubscribe from this group, send email to
[email protected]
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 [email protected].
For more options, visit https://groups.google.com/d/optout.