I'm writing a specialized randomizer class and want to ensure it's quality using CodeContracts. A typical randomizer method recieves an upper limit 'max' and returns a positive random value below that limit.
public int Next(int max)
{
Contract.Requires<ArgumentOutOfRangeException>(0 <= max && max <= int.MaxValue);
Contract.Ensures(0 <= Contract.Result<int>());
Contract.Ensures(Contract.Result<int>() < maxValue);
return (int)(pick() % maxValue);
}
where pick()
returns a random UInt32
. My question: Why does CodeContracts fail on the last "ensure"?