生成任意A => scalacheck的日期

时间:2016-10-31 16:41:08

标签: 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)
    }
  }
}

这失败了。打印d1d2的实际值表明日期确实不同,相差100到103毫秒。

我猜这个问题来自我的Cogen实例,但我必须承认我不明白为什么。

1 个答案:

答案 0 :(得分:4)

这在scalacheck 1.13.3中是一个回归,正如项目的gitter频道中所讨论的那样。 issue已打开。