This is because of the changes in hashing behaviour introduced in 1.6 and relates to CLJ-1372. I think there may also be some interaction with Fressian's creation of ArrayMaps for maps with less than 8 kv pairs.

One fix would be to make sure data.fressian always returns persistent Clojure data structures, so it avoids tripping over Clojure no longer having Java data structures be equal to their analogous Clojure ones.

This is because Fressian 0.2.0 reads a Fressian set back off the wire as a java.util.HashSet (c.f. DFRS-5), and PersistentHashSet containing an empty PersistentHashSet is no longer equal to a PersistentHashSet containing a java.util.HashSet.

To catch these changes, you will need to use a generative tester which creates nested values (and include sets as well). test.check does arbitrarily deep nested values but doesn't have sets yet (TCHECK-51).

clojure.data.fressian doesn't have a ReadHandler defined for "set". This means that when you serialise and deserialise a Clojure PersistentHashSet, it returns as a java.util.HashMap. Is there a reason why we wouldn't define a ReadHandler for "set" in clojure-read-handlers?