私は特殊なランダマイザー クラスを作成しており、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);
}
wherepick()
は random を返しますUInt32
。私の質問: 最後の「保証」で CodeContracts が失敗するのはなぜですか?