模数 (%) 运算符上的 CodeContracts 失败?
我正在编写一个专门的随机生成器类,并希望使用 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 在最后一个“确保”时失败?
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"?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
我无法重现你的问题。代码契约不会抱怨以下代码:
如果我将您的
maxValue
保留为int
类型的单独变量而不是用替换它,它也不会抱怨>最大
。I cannot reproduce your problem. Code contract doesn't complain about the following code:
It doesn't complain either if I keep your
maxValue
as a separate variable of typeint
instead of replacing it withmax
.