在Specman中,行列式不受其子类型属性的约束

时间:2015-08-04 09:36:34

标签: specman e

要发布的下一个问题:

您好,

我有以下测试用例:

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

我希望测试只生成大项目。相反,我发现偶尔会生成一个小项目,这会导致矛盾。这种行为有什么解释?

1 个答案:

答案 0 :(得分:3)

用户指南说明

  

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

     

when-determinant - &gt;从属字段

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

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

您可以在 Specman Generation用户指南使用约束中的子类型依赖关系章节中找到更多信息。