Интересно, почему требуется произвольное, потому что для автоматического тестирования свойств требуется определение свойства, например
val prop = forAll(v: T => check that property holds for v)
и генератора значений v. В руководстве пользователя говорится, что вы можете создавать настраиваемые генераторы для пользовательских типов (например, генератор для деревьев). Тем не менее, это не объясняет, почему вам нужны альтернативы.
Вот часть руководства
implicit lazy val arbBool: Arbitrary[Boolean] = Arbitrary(oneOf(true, false))
Чтобы получить поддержку вашего собственного типа T, вам нужно определить неявное определение или val типа Arbitrary [T]. Используйте метод factory Произвольный (...) для создать произвольный экземпляр. Этот метод принимает один параметр типа Gen [T] и возвращает экземпляр произвольного [T].
В нем четко сказано, что нам нужно произвольное дополнение к генералу. Обоснование произвольного не является удовлетворительным, хотя
Произвольный генератор - это генератор, используемый ScalaCheck, когда он генерирует значения параметров свойств.
IMO, чтобы использовать генераторы, вам нужно импортировать их, а не обертывать их в произвольные числа! В противном случае можно утверждать, что нам нужно также обернуть произволы во что-то другое, чтобы сделать их пригодными для использования (и т.д. Бесконечно обертывать обертки бесконечно).
Вы также можете объяснить, как arbitrary[Int]
преобразовать тип аргумента в генератор. Мне очень любопытно, и я чувствую, что это связанные вопросы.