Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/scala/18.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
scala发电机驱动试验_Scala_Testing_Functional Programming - Fatal编程技术网

scala发电机驱动试验

scala发电机驱动试验,scala,testing,functional-programming,Scala,Testing,Functional Programming,我有一个简单的主文件,其中实现了一些随机数生成器 import java.util.Random object Main extends App { trait Generator[+T] { self => def generate: T def map[S](f:T => S): Generator[S] = new Generator[S] { def generate = f(self.generate) }

我有一个简单的主文件,其中实现了一些随机数生成器

import java.util.Random


object Main extends App {

  trait Generator[+T] {

    self =>
    def generate: T


    def map[S](f:T => S): Generator[S] = new Generator[S] {
      def generate = f(self.generate)
    }


    def flatMap[S](f:T => Generator[S]): Generator[S] =  new Generator[S] {
      def generate = f(self.generate).generate
    }

  }



  val integers = new Generator[Int] {
    val rand = new Random()
    def generate = rand.nextInt()
  }

  val boolean = new Generator[Boolean] {
    def generate = integers.generate > 0
  }

  val booleans = for{i <- integers} yield i > 0

  def pairs[T, U](generator1: Generator[T], generator2: Generator[U]) = {
    for{i <- generator1; j <- generator2} yield (i, j )
  }

  val pair = pairs(integers, boolean)

  def single[U](x:U):Generator[U] = new Generator[U] {
    def generate = x
  }

  println(integers.generate, boolean.generate, pair.generate)


  def lists: Generator[List[Int]] = {
    for{
      isEmpty <- boolean
      l <- if(isEmpty) emptyList else nonEmptyList
    } yield l
  }

  def emptyList = single(List())

  def nonEmptyList = for{
    head <- integers
    tail <- lists
  } yield head :: tail

  println(lists.generate)
  println(lists.generate)
}
代码通过了所有测试,而最后一个测试应该失败。我如何解决这个问题?

你没有在论坛中使用n。另外,如果删除断言并简单地将最后一个表达式设为布尔表达式,您会看到想要的结果吗?顺便说一句,您可以使用ScalaCheck中的函数,它有许多用于组合随机生成器的有用工具。
import org.scalatest.FunSuite
import org.scalacheck.Prop.forAll
import Main.lists

class MainSuite extends FunSuite{

  test("An empty Set should have size 0") {
    assert(Set.empty.size == 0)
  }

  test("Invoking head on an empty Set should produce NoSuchElementException") {
    intercept[NoSuchElementException] {
      Set.empty.head
    }
  }

  test("Sum of lists increase the size?")
  {
     forAll { (n:Int) =>
       val l1 = lists.generate
       val l2 = lists.generate
       assert(l1.length + l2.length < l1.length)



     }