我有一个简单的方法,它返回给定数字的指数值:
public int Exp(int num)
{
return Convert.ToInt32(System.Math.Exp(num));
}
运行Pex时,我在Summary / Exception字段中获取某个大数字的OverFlowException:1969057606。
如何使用Contract.Ensure()
创建帖子条件?
我尝试了以下但它没有做任何事情:
Contract.Ensures(Contract.Result<int>() < 2147483647);
// This is because the max value an int variable can hold is 2147483647
答案 0 :(得分:0)
Contract.Ensures用于在函数运行后断言类的状态,或者在这种情况下,函数的结果,无论输入是什么。您需要添加一个Contract.Requires,以便 e ^ num&lt; = int.MaxValue,例如
Contract.Requires<ArgumentOutOfRangeException>(num <= Math.Floor(Math.Log(int.MaxValue)))
虽然您可能希望将最大值计算拉出为常数。
public static readonly int MAX_EXPONENT = Math.Floor(Math.Log(int.MaxValue));
...
Contract.Requires<ArgumentOutOfRangeException>(num <= MAX_EXPONENT)