当你升级 Fressian 从 1.5.1 到 1.6 时,测试将通过,但 1.6 中的等价行为不同。例如
(let [val #{}] (= (set [val]) (set [(fressian/read (fressian/write val))])))
这是因为 Fressian 0.2.0 将 Fressian 集合从线读回作为 java.util.HashSet(参看 DFRS-5),并且包含空 PersistentHashSet 的 PersistentHashSet 现在不再等于包含 java.util.HashSet 的 PersistentHashSet。
要捕获这些变化,您需要一个可以创建嵌套值(包括集合)的生成式测试器。test.check 可以创建任意深度嵌套的值,但还没有集合(TCHECK-51)。
我已在 GitHub 上放了一个示例项目,展示了这个操作 https://github.com/danielcompton/data.fressian-test