PersistentArrayMap's assoc doesn't respect HASHTABLE_THRESHOLD

Description

Currently a map with more than 8 elements will be converted from a PersistentArrayMap to a PersistentHashMap, but if using assoc, it will take 9 elements before the conversion happens:

user=> (class {0 0 1 1 2 2 3 3 4 4 5 5 6 6 7 7}) clojure.lang.PersistentArrayMap user=> (class {0 0 1 1 2 2 3 3 4 4 5 5 6 6 7 7 8 8}) clojure.lang.PersistentHashMap user=> (class (assoc {0 0 1 1 2 2 3 3 4 4 5 5 6 6 7 7} 8 8)) clojure.lang.PersistentArrayMap user=> (class (assoc {0 0 1 1 2 2 3 3 4 4 5 5 6 6 7 7} 8 8 9 9)) clojure.lang.PersistentHashMap

After patch:

user=> (class {0 0 1 1 2 2 3 3 4 4 5 5 6 6 7 7}) clojure.lang.PersistentArrayMap user=> (class {0 0 1 1 2 2 3 3 4 4 5 5 6 6 7 7 8 8}) clojure.lang.PersistentHashMap user=> (class (assoc {0 0 1 1 2 2 3 3 4 4 5 5 6 6 7 7} 8 8)) clojure.lang.PersistentHashMap user=> (class (assoc {0 0 1 1 2 2 3 3 4 4 5 5 6 6 7 7} 8 8 9 9)) clojure.lang.PersistentHashMap

Patch: 0001-PersistentArrayMap-s-assoc-doesn-t-respect-HASHTABLE.patch

Screened by: Alex Miller

Environment

None

Attachments

1
  • 12 Nov 2014, 06:02 PM

Activity

Show:
Completed

Details

Assignee

Reporter

Approval

Ok

Patch

Code

Priority

Fix versions

Created November 12, 2014 at 6:02 PM
Updated September 14, 2018 at 10:21 PM
Resolved September 14, 2018 at 10:21 PM

Flag notifications