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;

このテストでは BIG アイテムのみが生成されると予想していました。代わりに、ときどき小さな項目が生成され、矛盾につながることがわかります。この動作の説明は何ですか?

4

1 に答える 1

3

ユーザーガイドには、

when サブタイプで宣言または制約されるフィールドは、when 決定子の値に依存します。つまり、 when 決定要因と依存フィールドの間に暗黙的な一方向の制約 (サブタイプの依存関係) があります。

when-determinant -> 従属フィールド

これは、kindpayloadが別々に生成されることを意味します。when制約をサブタイプの外に移動する必要があります。

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

詳細については、 Specman Generation ユーザー ガイドの「制約内のサブタイプの依存関係に関する作業」の章を参照してください。

于 2015-08-04T16:05:44.580 に答える