Postgres는 Scalacheck arbString이 생성하는 모든 종류의 기호를 허용하지 않습니다. Scalacheck로 사람이 읽을 수있는 문자열을 생성 할 수있는 방법이 있습니까?Scalacheck arbString을 읽을 수있는 문자열 만 생성하는 방법은 무엇입니까?
1
A
답변
1
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)
1
케이스 클래스 ReadableChar(c: Char)
을 추가하고 임의로 인스턴스를 정의하여 그렇게 할 수 있습니다.
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
를 통해 캐릭터 라인으로 바꿀 수 있습니다.
이것은 포함 할 수있는 문자로 "사람이 읽을 수있는 문자열"을 정의하려는 경우에 사용됩니다. 추가 제한이 필요한 경우 두 번째 사례 클래스 ReadableString(s: String)
을 작성하고 이에 대한 Arbitrary
의 인스턴스도 정의 할 수 있습니다.
타크! 정확히 내가 원하는 걸! – ka4eli