Я пытаюсь создать генератор, который создает допустимые строки Unicode (не нулевой длины) со scalacheck 1.6.6 и спецификациями 1.7 (scala 2.8.1).
Я надеялся, что смогу просто создать такие генераторы, как:
object Generators {
def unicodeChar: Gen[Char] =
choose(Math.MIN_CHAR, Math.MAX_CHAR).map(_.toChar).filter(
c => Character.isDefined(c))
def unicodeStr: Gen[String] = for(cs <- listOf1(unicodeChar)) yield cs.mkString
}
... затем используйте их из спецификаций, таких как:
import org.specs.Specification
import org.specs.matcher.ScalaCheckMatchers
object CoreSpec extends Specification with ScalaCheckMatchers {
"The core" should {
"pass trivially" in {
Generators.unicodeStr must pass((s: String) => s == s)
}
}
}
Но кажется, что использование фильтра в unicodeChar вызывает проблему:
Specification "CoreSpec"
The core should
x pass trivially
Gave up after only 64 passed tests. 500 tests were discarded.
Если я удалю фильтр из unicodeChar, мой тест пройдет успешно, но позже я столкнусь с другими проблемами, поскольку мои строки не всегда четко определены в юникоде.
Заранее благодарим за любые предложения о том, как этого добиться.