我在 scalacheck 1.13.3 中遇到了一个奇怪的问题:任意实例A => java.util.Date根据调用时间生成不同的值。
这是一个具体的、可重现的示例:
import org.scalatest.FunSuite
import org.scalatest.prop.GeneratorDrivenPropertyChecks
import java.util.Date
import org.scalacheck._
class Repr extends FunSuite with GeneratorDrivenPropertyChecks {
implicit val cogenDate: Cogen[Date] = Cogen(_.getTime)
test("reproduce") {
forAll { (s: String, g: String => Date) =>
val d1 = g(s)
Thread.sleep(100)
val d2 = g(s)
assert(d1 === d2)
}
}
}
Run Code Online (Sandbox Code Playgroud)
这失败了。d1打印和的实际值d2显示日期确实不同,差异在 100 到 103 毫秒之间。
我猜问题出在我的Cogen实例上,但我必须承认我不明白为什么。