0

下一个要发布的问题:

你好,

我有以下测试用例:

<’
 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;
                                       };                             
                             };
                    };
           };
 ‘&gt;

我希望测试只生成大项目。相反,我看到偶尔会生成一个 SMALL 项目,这会导致矛盾。这种行为的解释是什么?

4

1 回答 1

3

用户指南指出

在 when 子类型下声明或约束的任何字段都取决于 when 行列式的值。换句话说,在 when 行列式和从属字段之间存在一个隐式的单向约束(子类型依赖):

何时行列式 -> 依赖字段

这意味着kindpayload是单独生成的。您需要将约束移到when子类型之外:

keep kind == SMALL => payload.size() < 10;

您可以在Specman Generation User Guide的“在约束中使用When Subtype Dependencies”一章中找到更多信息。

于 2015-08-04T16:05:44.580 回答