要发布的下一个问题:
您好,
我有以下测试用例:
<’
struct item_s {
payload:list of byte;
kind:[SMALL,BIG];
when SMALL item_s {
keep payload.size() < 10;
};
};
extend sys {
!item:item_s;
run() is also {
for i from 1 to 10 {
gen item keeping {
.payload.size() == 100;
};
};
};
};
‘>
我希望测试只生成大项目。相反,我发现偶尔会生成一个小项目,这会导致矛盾。这种行为有什么解释?
答案 0 :(得分:3)
用户指南说明
在when子类型下声明或约束的任何字段都取决于when determinative的值。换句话说,在when决定因素和从属字段之间存在隐式单向约束(子类型依赖性):
when-determinant - &gt;从属字段
这意味着kind
和payload
是单独生成的。您需要将约束移到when
子类型之外:
keep kind == SMALL => payload.size() < 10;
您可以在 Specman Generation用户指南的使用约束中的子类型依赖关系章节中找到更多信息。