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.
