scalacheck:生成一个非空字符串
scalacheck: Generate a non empty string
在类似这样的情况下,生成非空字符串的最佳方法是什么
private def createIndexFn() = {
for{
someChar <- Gen.alphaString
aNumber <- Gen.choose(1,100)
//...
}
yield {
MyThing(AnotherType(someChar.toString), SomeOtherType(aNumber), aNumber)
}
}
您可能需要将 someChar 设为非空字符串。我知道您可以在 forAll
部分使用 whenever
但我想知道如何在生成器的这一部分使用它。
谢谢
我要找的是:
import org.scalacheck.Arbitrary.arbitrary
arbitrary[String].suchThat(!_.isEmpty)
并且可以像
一样使用
for {
name <- arbitrary[String].suchThat(!_.isEmpty)
age <- Gen.choose(0, 100)
} yield Person(name, age)
希望这对某人有所帮助
被接受的答案对我来说导致了很高的丢弃率,我最终使用了:
import org.scalacheck._
Arbitrary(Gen.nonEmptyListOf[Char](Arbitrary.arbChar.arbitrary)).map(_.mkString))
另一种方法是创建固定长度的随机字符串
Gen.listOfN(10, Gen.asciiPrintableChar).map(_.mkString)
或创建具有约束长度的随机长度
for {
n <- Gen.chooseNum(5, 20)
chars <- Gen.listOfN(n, Gen.asciiPrintableChar)
} yield chars.mkString
在类似这样的情况下,生成非空字符串的最佳方法是什么
private def createIndexFn() = {
for{
someChar <- Gen.alphaString
aNumber <- Gen.choose(1,100)
//...
}
yield {
MyThing(AnotherType(someChar.toString), SomeOtherType(aNumber), aNumber)
}
}
您可能需要将 someChar 设为非空字符串。我知道您可以在 forAll
部分使用 whenever
但我想知道如何在生成器的这一部分使用它。
谢谢
我要找的是:
import org.scalacheck.Arbitrary.arbitrary
arbitrary[String].suchThat(!_.isEmpty)
并且可以像
一样使用for {
name <- arbitrary[String].suchThat(!_.isEmpty)
age <- Gen.choose(0, 100)
} yield Person(name, age)
希望这对某人有所帮助
被接受的答案对我来说导致了很高的丢弃率,我最终使用了:
import org.scalacheck._
Arbitrary(Gen.nonEmptyListOf[Char](Arbitrary.arbChar.arbitrary)).map(_.mkString))
另一种方法是创建固定长度的随机字符串
Gen.listOfN(10, Gen.asciiPrintableChar).map(_.mkString)
或创建具有约束长度的随机长度
for {
n <- Gen.chooseNum(5, 20)
chars <- Gen.listOfN(n, Gen.asciiPrintableChar)
} yield chars.mkString