Skip to content

Commit 47fa6e7

Browse files
[analytics] Fix multiple frequencies not shown for the same value
1 parent 1812cf5 commit 47fa6e7

File tree

2 files changed

+15
-3
lines changed

2 files changed

+15
-3
lines changed

src/orchard/inspect/analytics.clj

Lines changed: 8 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -19,9 +19,15 @@
1919
(defn- *frequencies [coll]
2020
(let [freqs (->> coll
2121
(eduction (take *size-cutoff*))
22-
frequencies)]
22+
frequencies)
23+
cmp #(let [res (compare (freqs %1) (freqs %2))]
24+
(if (zero? res)
25+
;; If values are identical, compare hashes of their keys.
26+
;; Hashes because keys themselves might not be comparable.
27+
(compare (hash %1) (hash %2))
28+
(- res)))]
2329
;; Turn the result in a map that is sorted by descending value.
24-
(into (sorted-map-by #(- (compare (freqs %1) (freqs %2)))) freqs)))
30+
(into (sorted-map-by cmp) freqs)))
2531

2632
(definline ^:private inc-if [val condition]
2733
`(cond-> ~val ~condition inc))

test/orchard/inspect/analytics_test.clj

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -24,7 +24,13 @@
2424
:types {java.lang.Long 3, nil 3}
2525
:frequencies {nil 3, 0 1, 1 1, 2 1}
2626
:numbers {:n 3, :zeros 1, :max 2, :min 0, :mean 1.0}}
27-
(analytics [0 nil 1 nil 2 nil])))
27+
(analytics [0 nil 1 nil 2 nil]))
28+
29+
(is+ {:count 5
30+
:types {java.lang.Long 5}
31+
:frequencies {0 1, 1 1, 2 1, 3 1, 4 1}
32+
:numbers {:n 5, :zeros 1, :max 4, :min 0, :mean 2.0}}
33+
(analytics (range 5))))
2834

2935
(deftest strings-test
3036
(is+ {:count 100

0 commit comments

Comments
 (0)