- Xorshift RNGs - source for the "munge" algorithm
- Knuth, section 6.4 - popular multiplier for multiplicative hashing of sequences
- Which hashing algorithm is better for uniqueness and speed
- Scala's MurmurHash3 implementation (used for collection hashing) and more info on how to use it.
- Guava has a good hashing impl of Murmur3 and other hash functions. And explanation of hashing.
- Collection of integer hash functions
- xxhash (native code on most platforms) but it also has perf and quality tests for many hashes (I think these were tested in streaming though)
- SMHasher - hash testing
- Good overview of how to compare hashes for quality and list of results
Tracking updates to other libraries for Clojure 1.6 hash changes
Clojure 1.6.0-beta1 is out as of this writing, and the hash method has been decided upon. Now comes updating Clojure contrib libraries and 3rd party Clojure libraries that implement their own customized collections so that their hash function values for custom sets and maps (at least those intended to be clojure.core/= to built-in Clojure sets and maps) have consistent hash values when using Clojure 1.6.
The table below gives some places that could use updating, and status of changes.
|Project/Library||What needs updating?||Status|
|Tests in Clojure itself|
Some tests were disabled when the hash changes were first made, with this commit.
Most of them were updated to be independent of Clojure's hash function with this commit, but the following line at or near line 311 in file test/clojure/test_clojure/java_interop.clj is still commented out:
|core.cache||Some tests failed due to hash-dependent sequence orders||Patch for ticket CCACHE-33 committed|
|core.match||Some tests failed due to hash-dependent sequence orders||Ticket MATCH-94 created with patch.|
|tools.namespace||Some tests failed due to hash-dependent sequence orders||Ticket TNS-16 created, fix comitted.|
|tools.nrepl||Some tests failed due to hash-dependent sequence orders||Fixed with this commit.|