That's not true in cljs; the maps are just output unsorted without errors. On Wed, Jan 19, 2022, 9:01 AM Lauri Pesonen <[email protected]> wrote:
> Kovas, > > I'm just an end-user like yourself so I can't say anything about adding a > bug for this. But I don't really see what the language / core library could > do differently: the exception already says "wrong number of args (2) > passed". > > Cheers, > Lauri > > On Wed, 19 Jan 2022 at 16:35, Kovas Palunas <[email protected]> > wrote: > >> Ohhhh, I was under the impression that the function was a key function >> returning a value that would be sorted on place of the real value. >> sorted-map-by(-key) is how I read it. >> >> Any chance we could make a bug to add this exception? It would have >> saved me a lot of time. >> >> On Wed, Jan 19, 2022, 8:27 AM Lauri Pesonen <[email protected]> wrote: >> >>> Hi Kovas, >>> >>> When I run your code in a Clojure repl (as opposed to CLJS), I get an >>> exception: >>> >>> clojure.lang.ArityException: Wrong number of args (2) passed to: >>> app.core-test/sort-map/fn--24334 >>> >>> And this is because you're the comparator that you pass to sorted-map-by >>> is a 1-arity function: #(if (= % :input) "aaaaa" (name %))) >>> >>> The comparator will be called with two map entries as arguments so that >>> the comparator can decide which one of them should be first, so your >>> comparator function should do something with %1 and %2. But I can't really >>> tell from the code what you're trying to do, so I'm not sure what the >>> comparator should look like. >>> >>> Cheers, >>> Lauri >>> >>> On Tue, 18 Jan 2022 at 14:15, Kovas Palunas <[email protected]> >>> wrote: >>> >>>> Hey all, >>>> >>>> I think I've found a bug in `sorted-map-by`, as shown by the below code: >>>> >>>> ``` >>>> (ns app.core-test >>>> (:require >>>> [cljs.test :refer (deftest is)] >>>> [clojure.string :as st])) >>>> >>>> (prn *clojurescript-version*) ;; "1.10.914" >>>> >>>> (defn single-row [result-row] >>>> {:input (:input result-row) >>>> (keyword (st/join [(name (:biomarker result-row)) "-datapoints"])) >>>> (:datapoints result-row)}) >>>> >>>> (defn sort-map [m] >>>> ; Sort row so that :input is first, then put this rest in >>>> alphabetical order >>>> (into (sorted-map-by #(if (= % :input) "aaaaa" (name %))) m)) >>>> >>>> (defn get-per-input-row [same-input-results] >>>> ; Calling sort-map twice here resolves the problem. >>>> (sort-map (reduce merge (map single-row same-input-results)))) >>>> >>>> (defn make-per-input-results >>>> [results] >>>> (let [rows-by-input (group-by :input results)] >>>> (map get-per-input-row (vals rows-by-input)))) >>>> >>>> (deftest test-bad-map-sorting >>>> (is (= '({:input 1 :a-datapoints 5} >>>> {:input 2 :a-datapoints 5} >>>> {:input 3 :b-datapoints 5} >>>> {:input 4 :b-datapoints 5}) >>>> (make-per-input-results >>>> [{:input 1 :biomarker :a :datapoints 5} >>>> {:input 2 :biomarker :a :datapoints 5} >>>> {:input 3 :biomarker :b :datapoints 5} >>>> {:input 4 :biomarker :b :datapoints 5}])))) >>>> ``` >>>> >>>> The testcase fails, when I would expect it to succeed. I tried posting >>>> this on the cljs JIRA as a bug, but I don't have permission, so I thought >>>> I'd post it here instead. Anyone want to try reproducing this and posting >>>> on the JIRA if you can reproduce it? >>>> >>>> - Kovas >>>> >>>> -- >>>> Note that posts from new members are moderated - please be patient with >>>> your first post. >>>> --- >>>> You received this message because you are subscribed to the Google >>>> Groups "ClojureScript" group. >>>> To unsubscribe from this group and stop receiving emails from it, send >>>> an email to [email protected]. >>>> To view this discussion on the web visit >>>> https://groups.google.com/d/msgid/clojurescript/7eedfcb0-acff-496c-b332-11589f7e9582n%40googlegroups.com >>>> <https://groups.google.com/d/msgid/clojurescript/7eedfcb0-acff-496c-b332-11589f7e9582n%40googlegroups.com?utm_medium=email&utm_source=footer> >>>> . >>>> >>> -- >>> Note that posts from new members are moderated - please be patient with >>> your first post. >>> --- >>> You received this message because you are subscribed to a topic in the >>> Google Groups "ClojureScript" group. >>> To unsubscribe from this topic, visit >>> https://groups.google.com/d/topic/clojurescript/0-SJ0zmVX6c/unsubscribe. >>> To unsubscribe from this group and all its topics, send an email to >>> [email protected]. >>> To view this discussion on the web visit >>> https://groups.google.com/d/msgid/clojurescript/CABgZr0s7iwQe8r%3DWXSDpx42bh7B_T8CURo61U7gonokrw9OJQw%40mail.gmail.com >>> <https://groups.google.com/d/msgid/clojurescript/CABgZr0s7iwQe8r%3DWXSDpx42bh7B_T8CURo61U7gonokrw9OJQw%40mail.gmail.com?utm_medium=email&utm_source=footer> >>> . >>> >> -- >> Note that posts from new members are moderated - please be patient with >> your first post. >> --- >> You received this message because you are subscribed to the Google Groups >> "ClojureScript" group. >> To unsubscribe from this group and stop receiving emails from it, send an >> email to [email protected]. >> To view this discussion on the web visit >> https://groups.google.com/d/msgid/clojurescript/CAPzck%3DdBhpRrkTT65myd4vh8_X4jkoKXWeoXMt%3DKq4hMdPg0oQ%40mail.gmail.com >> <https://groups.google.com/d/msgid/clojurescript/CAPzck%3DdBhpRrkTT65myd4vh8_X4jkoKXWeoXMt%3DKq4hMdPg0oQ%40mail.gmail.com?utm_medium=email&utm_source=footer> >> . >> > -- > Note that posts from new members are moderated - please be patient with > your first post. > --- > You received this message because you are subscribed to a topic in the > Google Groups "ClojureScript" group. > To unsubscribe from this topic, visit > https://groups.google.com/d/topic/clojurescript/0-SJ0zmVX6c/unsubscribe. > To unsubscribe from this group and all its topics, send an email to > [email protected]. > To view this discussion on the web visit > https://groups.google.com/d/msgid/clojurescript/CABgZr0v1dRNfOKnndPSfGGM%2Bs6kcz509_HO%2B8eiU9yqfYbCL4A%40mail.gmail.com > <https://groups.google.com/d/msgid/clojurescript/CABgZr0v1dRNfOKnndPSfGGM%2Bs6kcz509_HO%2B8eiU9yqfYbCL4A%40mail.gmail.com?utm_medium=email&utm_source=footer> > . > -- Note that posts from new members are moderated - please be patient with your first post. --- You received this message because you are subscribed to the Google Groups "ClojureScript" group. To unsubscribe from this group and stop receiving emails from it, send an email to [email protected]. To view this discussion on the web visit https://groups.google.com/d/msgid/clojurescript/CAPzck%3DcE7nd3KFq7zr3L3Trjud0Cyts%2BgK4M_cVW-YRTRhqMaA%40mail.gmail.com.
