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的bug。这些测试是用特定常数值编写的,这些值不同,但具有相同的.hashCode值,以测试Clojure生成选择分支的代码。特别是,control.clj中的这些测试失败

`
;; Clojure 1.6.0和1.7.0-master-SNAPSHOT中的第386行(截至2015年3月19日)

(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之外的一对数字,以便哈希值发生冲突。例如,33和9223372039002259457N。

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

2 答案

0

评论者:alexmiller

我认为我的首选是省略ibm jdk的这些测试。

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