В Specman определитель не ограничен атрибутами подтипа when.

Следующий вопрос для публикации:

Hi,

У меня есть следующий тестовый пример:

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

Я ожидал, что тест будет генерировать только БОЛЬШИЕ элементы. Вместо этого я вижу, что иногда генерируется МАЛЕНЬКИЙ элемент, что приводит к противоречию. Каково объяснение такого поведения?


person user3444042    schedule 04.08.2015    source источник


Ответы (1)


В руководстве пользователя указано, что

Любое поле, объявленное или ограниченное подтипом when, зависит от значения определителя when. Другими словами, существует неявное однонаправленное ограничение (зависимость подтипа) между определителем when и зависимым полем:

когда-детерминант -> зависимое-поле

Это означает, что kind и payload генерируются отдельно. Вам нужно переместить ограничение за пределы подтипа when:

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

Дополнительную информацию можно найти в главе Работа с зависимостями подтипов в ограничениях Руководства пользователя по генерации Specman.

person Tudor Timi    schedule 04.08.2015