Возможно ли создать линейную прогрессию в ScalaCheck generator

#scala #scalacheck

#scala #scalacheck

Вопрос:

У меня есть вопрос новичка для ScalaCheck, с которым я играю в первый раз. Возможно ли создать Gen[Int] , который будет прогрессировать линейно, скажем, от 0 до N.

Такое, что при использовании forAll в ScalaCheck это увеличит входные данные Int на 1.

Я бы хотел, чтобы этот пример тестировался с возрастающим значением

 "Increase" should "always increase" in {
  forAll(validNumbers){ i:Int =>
    increase(i) should be (i   1)
  }
}
  

Возможно, это разрушает цель ScalaChecks, и я должен просто протестировать этот способ в ScalaTest.

Ответ №1:

Вы могли бы сделать что-то вроде этого:

 def validNumbers(n: Int): Gen[Int] = Gen.resultOf[Int, Int] {
  new (Int => Int) {
    val current = (0 to n).iterator

    def apply(i: Int): Int = {
      if(current.hasNext) current.next else sys.error("No more numbers")
    }
  }
}
  

Однако я думаю, что вы действительно правы, что это разрушает цель ScalaChecks. Простой цикл for в этом случае подошел бы лучше.

Комментарии:

1. Спасибо за это — вы правы, простой цикл for в ScalaTest намного лучше подходит для моих текущих потребностей.