Я пишу специализированный класс рандомизаторов и хочу гарантировать его качество с помощью CodeContracts. Типичный метод рандомизатора получает верхний предел 'max' и возвращает положительное случайное значение ниже этого предела.
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);
}
, где pick()
возвращает случайное UInt32
. Мой вопрос: почему CodeContracts терпит неудачу при последнем "обеспечении"?