簡體   English   中英

ScalaCheck 生成不同的值列表

[英]ScalaCheck generate a distinct list of values

我對 ScalaCheck 相當陌生,不知何故我想生成一個不同值的列表(即一組)。 用我的方法,價值觀不是唯一的。

val valueList: Gen[List[Int]] = Gen.ListOf(Arbitrary.arbitrary[Int])

創建具有唯一值/集合的列表的可能方法是什么? 也許使用suchThatdistinct

粗魯但有效:

Gen.listOf(Arbitrary.arbitrary[Int]).map(_.toSet)

如果你想要一組特定尺寸的,你可以做類似的事情

def setOfN[A](n: Int, gen: Gen[A]): Gen[Set[A]] =
  Gen.listOfN(n, gen).flatMap { lst =>
    val set = lst.toSet

    if (set.size == n) Gen.const(set)
    else if (set.size > n) Gen.const(set.take(n))
    else setOfN(n - set.size, gen.retryUntil(x => !set(x))).flatMap(_ ++ set)
  }

(值得注意的是 retryUntil 可能很脆弱,尤其是當 n 相對於通常生成的值的數量增長時(例如,對於Int Scalacheck 相當頻繁地生成 0、+/- 1 等))

當然,因為Set有一個org.scalacheck.util.Buildable實例

Gen.containerOf[Set, Int](Arbitrary.arbitrary[Int])

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM