我正在使用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)
}
}
}
这失败了。打印d1
和d2
的实际值表明日期确实不同,相差100到103毫秒。
我猜这个问题来自我的Cogen
实例,但我必须承认我不明白为什么。