如何让 Scalacheck arbString 只生成可读的字符串?
How to make Scalacheck arbString generate only readable Strings?
Postgres 不接受 Scalacheck arbString 生成的所有类型的符号。有没有办法用 Scalacheck 生成人类可读的字符串?
您可以通过添加 case class ReadableChar(c: Char)
并为其定义一个 arbitrary 实例来实现。也许像
case class ReadableChar(c: Char)
implicit val arbReadable: Arbitrary[ReadableChar] = Arbitrary {
val legalChars = Range('a', 'z').map(_.toChar)
for {
c <- Gen.oneOf(legalChars)
} yield ReadableChar(c)
}
然后您可以使用 Arbitrary[Array[ReadableChar]]
的实例生成一个可读字符数组,通过 .map(_.c).toString
.
将其转换为字符串
如果您想通过允许包含的字符来定义 "human readable strings",则此方法有效。如果您需要额外的限制,您可以编写第二个案例 class ReadableString(s: String)
并为其定义一个 Arbitrary
的实例。
如果您查看 the Gen object,您可以看到一些生成器,包括 alphaChar
和 identifier
。
scala> import org.scalacheck.Gen._
import org.scalacheck.Gen._
scala> identifier.sample
res0: Option[String] = Some(vxlgvihQeknhe4PolpsJas1s0gx3dmci7z9i2pkYlxhO2vdrkqpspcaUmzrxnnb)
scala> alphaChar.sample
res1: Option[Char] = Some(f)
scala> listOf(alphaChar).sample
res2: Option[List[Char]] = Some(List(g, n, x, Y, h, a, c, e, a, j, B, d, m, a, r, r, Z, a, z, G, e, i, i, v, n, Z, x, z, t))
scala> listOf(alphaChar).map(_.mkString).sample
res3: Option[String] = Some(oupwJfqmmqebcsqbtRxzmgnJvdjzskywZiwsqnkzXttLqydbaahsfrjqdyyHhdaNpinvnxinhxhjyzvehKmbuejaeozytjyoyvb)
Postgres 不接受 Scalacheck arbString 生成的所有类型的符号。有没有办法用 Scalacheck 生成人类可读的字符串?
您可以通过添加 case class ReadableChar(c: Char)
并为其定义一个 arbitrary 实例来实现。也许像
case class ReadableChar(c: Char)
implicit val arbReadable: Arbitrary[ReadableChar] = Arbitrary {
val legalChars = Range('a', 'z').map(_.toChar)
for {
c <- Gen.oneOf(legalChars)
} yield ReadableChar(c)
}
然后您可以使用 Arbitrary[Array[ReadableChar]]
的实例生成一个可读字符数组,通过 .map(_.c).toString
.
如果您想通过允许包含的字符来定义 "human readable strings",则此方法有效。如果您需要额外的限制,您可以编写第二个案例 class ReadableString(s: String)
并为其定义一个 Arbitrary
的实例。
如果您查看 the Gen object,您可以看到一些生成器,包括 alphaChar
和 identifier
。
scala> import org.scalacheck.Gen._
import org.scalacheck.Gen._
scala> identifier.sample
res0: Option[String] = Some(vxlgvihQeknhe4PolpsJas1s0gx3dmci7z9i2pkYlxhO2vdrkqpspcaUmzrxnnb)
scala> alphaChar.sample
res1: Option[Char] = Some(f)
scala> listOf(alphaChar).sample
res2: Option[List[Char]] = Some(List(g, n, x, Y, h, a, c, e, a, j, B, d, m, a, r, r, Z, a, z, G, e, i, i, v, n, Z, x, z, t))
scala> listOf(alphaChar).map(_.mkString).sample
res3: Option[String] = Some(oupwJfqmmqebcsqbtRxzmgnJvdjzskywZiwsqnkzXttLqydbaahsfrjqdyyHhdaNpinvnxinhxhjyzvehKmbuejaeozytjyoyvb)