私は、scalacheck1.6.6とspecs1.7(scala 2.8.1)を使用して、(長さがゼロではない)有効なUnicode文字列を生成するジェネレーターを作成しようとしています。
次のようなジェネレーターを作成できるといいのですが。
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でfilterを使用すると、問題が発生するようです。
Specification "CoreSpec"
The core should
x pass trivially
Gave up after only 64 passed tests. 500 tests were discarded.
unicodeCharからフィルターを削除すると、テストは成功しますが、文字列が常に明確に定義されたユニコードであるとは限らないため、後で他の問題が発生します。
これを達成する方法についての提案を事前に感謝します。