The following property test should clearly fail:
object ScalaCheckCheck extends Properties("Gen.choose[BigInt]"):
override def overrideParameters( params: Parameters ): Parameters
= params.withMinSuccessfulTests(1_000_000)
property("covers all bit lengths") = forAll(
Gen.choose[BigInt](0, BigInt(1) << 64)
)( _.bitLength > 32 )
end ScalaCheckCheck
But since Gen.choose[BigInt] samples uniformly, the chances of the test above (correctly) failing are less than 3 in 10_000.
The documentation does not mandate that Gen.choose[BigInt] samples uniformly, so I propose adding the following edge cases and sampling methods to Choose[BigInt]:
{0, ±1, ±2, ± Byte.MaxValue ± 1, ± Short.MaxValue ± 1, ...} (provided they are in range)
- Randomly chosen small primes or probable primes
- Products of 2 or 3 small/probable primes
- Random Powers of 2
- "Sparse"
BigInt values with uniformly random bitLength and uniformly random number of 1-bits
If these additions are acceptable, I would be willing to work on an according PR.
The following property test should clearly fail:
But since
Gen.choose[BigInt]samples uniformly, the chances of the test above (correctly) failing are less than 3 in 10_000.The documentation does not mandate that
Gen.choose[BigInt]samples uniformly, so I propose adding the following edge cases and sampling methods toChoose[BigInt]:{0, ±1, ±2, ± Byte.MaxValue ± 1, ± Short.MaxValue ± 1, ...}(provided they are in range)BigIntvalues with uniformly random bitLength and uniformly random number of 1-bitsIf these additions are acceptable, I would be willing to work on an according PR.