【问题标题】:Scalacheck generate Gen.alphastr with the same lengthScalacheck 生成长度相同的 Gen.alphastr
【发布时间】:2014-11-07 19:26:15
【问题描述】:

我需要生成相同长度的字符串。我不知道怎么做。非常感谢

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

【问题讨论】:

    标签: scalacheck


    【解决方案1】:

    示例代码:

    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
    

    【讨论】:

      【解决方案2】:

      Gen 上有一个suchThat(f: T =&gt; Boolean): Gen[T] = new Gen[T],所以可以像这样使用

      val stringShorterThan = (n: Int) => Gen.alphaStr.suchThat(s => s.length <= n)
      val string64 = stringShorterThan(64)
      

      【讨论】:

      • 这样的生成器会因为使用suchThat而丢弃很多值
      • 你最好只截断字符串Gen.alphaStr..map(str =&gt; if (str.length &lt;= max) str else str.substring(0,max))
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2018-08-07
      • 2018-10-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多