2024 Clojure状态调查!中分享你的想法。

欢迎!请参阅关于页面了解有关如何操作的一些更多信息。

0
Clojure

对于Sun/Oracle JDK和IBM JDK 1.6,我们有这个

user=> (.hashCode 9223372039002259457N) 1

对于IBM JDK 1.7和1.8,它变成了这个(我不知道为什么)

user=> (.hashCode 9223372039002259457N) 33

这导致在那些IBM JDK版本上运行Clojure的一些基于示例的测试失败。这里似乎没有Clojure中的任何错误。这些测试是用特定的不同但具有相等.hashCode值的常量编写的,以测试Clojure生成代码中在case中选择分支。特别是,这些控制.clj中的测试失败

`
;;Clojure 1.6.0和1.7.0-master-SNAPSHOT于2015年3月19日的第386行

(is (== (.hashCode 1) (.hashCode 9223372039002259457N)))

;;以及在同一文件的第423行稍后
(testing "test warn for hash collision"

(should-print-err-message
 #"Performance warning, .*:\d+ - hash collision of some case test constants; if selected, those entries will be tested sequentially..*\r?\n"
 (case 1 1 :long 9223372039002259457N :big 2)))

`

同一文件中有其他使用相同常量9223372039002259457N而未在IBM JDK 1.7和1.8上失败的测试,但它们没有像预期的那样测试哈希冲突。

以下几点可能需要更改

  1. 当在IBM JDK 1.7和1.8上运行测试时,选择一个不同的数对,而不是1和9223372039002259457N,这样hash值就会冲突。例如,33和9223372039002259457N。

  2. 当在IBM JDK 1.7和1.8上运行时,完全跳过这些测试。

2 答案

0

评论者:alexmiller

我认为我的偏好是对于IBM JDK跳过这些测试。

0
参考:https://clojure.atlassian.net/browse/CLJ-1678(由jafingerhut报告)
...