Создать опцию [T] в ScalaCheck
Я пытаюсь создать дополнительные параметры в ScalaCheck, но безуспешно.
Кажется, нет прямого механизма для этого.Gen.containerOf[Option, Thing](thingGenerator)
не удается, потому что не может найти неявноеBuildable[Thing, Option]
.
Я пытался
for {
thing <- Gen.listOfN[Thing](1, thingGenerator)
} yield thing.headOption
Но это не работает, потому чтоlistOfN
создает список, который всегда имеет длину N. В результате я всегда получаюSome[Thing]
, По аналогии,listOf1
не работает, потому что (а) он не создает пустые списки, но также (б) он неэффективен, потому что я не могу установить максимальное ограничение на количество элементов.
Как я могу генерироватьOption[Thing]
что включает в себя Nones?
РЕДАКТИРОВАТЬЯ нашел решение, но оно не лаконично. Есть ли лучший способ, чем этот?
for {
thing <- for {
qty <- Gen.choose(0,1)
things <- Gen.listOfN[Thing](qty, thingGenerator)
} yield things.headOption
} yield thing
РЕДАКТИРОВАТЬ 2: Я обобщил это
def optional[T](g: Gen[T]) =
for (qty <- Gen.choose(0, 1); xs <- Gen.listOfN[T](qty, g)) yield xs.headOption
Поэтому мне не нужно писать это более одного раза. Но, конечно, это уже есть в библиотеке, и я просто пропустил это?