Overwriting entries in LRU-cache deletes LRU key-values unnecessarily
Description
To "overwrite" the value in an LRUCache, one uses assoc. Surprisingly, another k,v entry is evicted, even though the total number of items in the cache should not be increased by overwriting.
Demo:
(def C0 (lru-cache-factory {} :threshold 3))
; --> #<Var@7ec74910: {}>
(def C1 (-> C0 (assoc :a 1) (assoc :b 2) (assoc :c 3)))
; --> #<Var@315863e4: {:c 3, :b 2, :a 1}>
(-> C1 (assoc :a 4) (assoc :a 5) (assoc :a 6))
; --> {:a 6}
Environment
Activity
Closing out all resolved issues as of 0.6.5 in order to track the next release.
Works for me in 0.6.2. Thanks, Fogus!
(-> (cache/lru-cache-factory {} :threshold 2)
(assoc :a 1)
(assoc :b 2)
(assoc :b 3))
; {:b 3, :a 1}
It appears v0.6.1 still has not fixed the issue
(-> (cache/lru-cache-factory {} :threshold 2)
(assoc :a 1)
(assoc :b 2)
(assoc :b 3))
{:b 3}
v0.6.1 pushed to Maven Central.
version 0.6.1 has been pushed out to Maven central.