我对scalacheck还比较陌生,不知何故我想生成一个不同值的列表(即一个集合)。在我的方法中,价值观并不是唯一的。
val valueList: Gen[List[Int]] = Gen.ListOf(Arbitrary.arbitrary[Int])
创建具有唯一值/集合的列表的可能方法有哪些?也许是使用 suchThat 或者 distinct ?
suchThat
distinct
uinbv5nw1#
粗糙但有效:
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等)当然,既然 org.scalacheck.util.Buildable 例如 Set ```Gen.containerOfSet, Int
Int
org.scalacheck.util.Buildable
Set
1条答案
按热度按时间uinbv5nw1#
粗糙但有效:
如果你想要一套特定尺寸的衣服,你可以这样做
(值得注意的是,retryuntil可能很脆弱,特别是当n相对于通常生成的值的数量增长时(例如
Int
scalacheck相当频繁地生成0、+/-1等)当然,既然
org.scalacheck.util.Buildable
例如Set
```Gen.containerOfSet, Int