scalacheck: lift custom random generator

111 Views Asked by At

Is it possible to lift custom generating function into Gen?

For example, generating ObjectIds for mongo.

import org.mongodb.scala.bson.ObjectId
import org.scalacheck.Gen

val genObjectId: Gen[ObjectId] = Gen.lift(() => new ObjectId)

The only possible solution I've found is to hack the generator like:

val genObjectId: Gen[ObjectId] = Gen.numChar.map(_ => new ObjectId)

Generating ObjectIds using Gen.hexChar is irrelevant because:

  • I need unique value each time
  • Mongo could treat some of the generated hex strings as invalid
1

There are 1 best solutions below

1
Levi Ramsey On BEST ANSWER
Gen.delay(Gen.const(new ObjectId))

delay's argument is by-name, so every attempt to generate a value will construct a new ObjectId.