Ich versuche, einen Generator zu erstellen, der (Unicode-Strings ungleich Null Länge erzeugt) mit Scalacheck 1.6.6 und Spezifikationen 1.7 (Scala 2.8.1) erstellt.Generieren Sie beliebiges (legales) Unicode-Zeichen mit Scalacheck?
Ich hatte gehofft, ich könnte einfach Generatoren schaffen wie:
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
}
... sie dann von Spezifikationen wie verwenden:
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)
}
}
}
Aber es scheint, dass in unicodeChar ein Problem Filter bewirkt:
Specification "CoreSpec"
The core should
x pass trivially
Gave up after only 64 passed tests. 500 tests were discarded.
Wenn ich den Filter aus unicodeChar entfernen, mein Test bestanden, aber ich laufe in ein anderes Problem s später, da meine Strings nicht immer eindeutig Unicode sind.
Vielen Dank im Voraus für Vorschläge, wie dies zu erreichen ist.
Es scheint ein wenig einfacher, wenn ich nicht Specs verwenden und eine neue implizite Params Instanz bereitzustellen. Aber das behebt nur das Symptom, es löst nicht wirklich die zugrunde liegende Ursache. –