使用 scalacheck 生成任意 A => Date

Nic*_*udo 3 scala scalacheck

我在 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实例上,但我必须承认我不明白为什么。

Nic*_*udo 5

正如项目的gitter频道中所讨论的,这被证明是 scalacheck 1.13.3 中的回归。提出了一个问题。