jqwik - Как выбираются значения для тестов?

В первом примере на сайте jkwik есть генератор, который потенциально генерирует большое количество значений для "делится на 3":

@Property
boolean every_third_element_starts_with_Fizz(@ForAll("divisibleBy3") int i) {
    return fizzBuzz().get(i - 1).startsWith("Fizz");
}

@Provide
Arbitrary<Integer> divisibleBy3() {
    return Arbitraries.integers().between(1, 100).filter(i -> i % 3 == 0);
}

Будет ли jqwik запускать проверку свойств для всех возможных значений или выбирает значения из этого списка? Если это второй случай, как он выбирается?

1 ответ

Решение

В этом случае jqwik сгенерирует все возможные значения, потому что есть только 100 кандидатов для рассмотрения, а 100 меньше, чем количество сгенерированных значений по умолчанию, которое равно 1000. Поскольку также выполняется фильтрация, только 33 числа ниже 100 являются делимыми. на 3 генерируются.

В случаях, когда возможный диапазон значений не может быть полностью покрыт, выбираются значения.

  1. из набора типичных крайних случаев, таких как минимум (1) и максимум (100)
  2. (псевдо) случайным образом из набора всех значений. Случайное распределение чисел искажено, чтобы дать меньшим числам больше шансов быть выбранным.
Другие вопросы по тегам