Scalacheck генерирует Gen.alphastr той же длины

Мне нужно сгенерировать строки одинаковой длины. Я не могу понять, как. Большое спасибо

val s = for {
  x <- Gen.alphaStr
} yield ...

person petrn    schedule 07.11.2014    source источник


Ответы (2)


пример кода:

import org.scalacheck.Gen
import org.scalacheck.Prop.forAll    

// strGen generates a fixed length random string
val strGen = (n: Int) => Gen.listOfN(n, Gen.alphaChar).map(_.mkString)

val fixedLengthStr = forAll(strGen(10)){ s =>
  s.length == 10
}

fixedLengthStr.check

для проверки сгенерированной строки используйте:

strGen(5).sample
person j-keck    schedule 10.11.2014

В Gen есть suchThat(f: T => Boolean): Gen[T] = new Gen[T], поэтому его можно использовать как

val stringShorterThan = (n: Int) => Gen.alphaStr.suchThat(s => s.length <= n)
val string64 = stringShorterThan(64)
person Дмитрий Завориин    schedule 11.11.2018
comment
Такой генератор отбрасывал бы многие значения из-за использования suchThat - person Valy Dia; 16.02.2019
comment
Вам лучше просто обрезать строку Gen.alphaStr..map(str => if (str.length <= max) str else str.substring(0,max)) - person Travis Stevens; 13.05.2019