Specman e: Есть ли способ узнать, сколько значений в перечисляемом типе? - PullRequest
0 голосов
/ 26 декабря 2018

Мне нужно знать, сколько значений содержится в перечисляемом типе в моей среде проверки.Например:

type my_type: [a, b, c, d];

У меня есть способ проверить на лету, что в my_type?

есть 4 различных значения * Спасибо за вашу помощь

Ответы [ 3 ]

0 голосов
/ 26 декабря 2018

Кроме того, что предложил Тудор, другой способ - использовать псевдопрограмму set_of_values(), которая возвращает set (а не список) всех значений:

set_of_values(my_type).uint_size()

В некотором смысле, используя set_of_values() лучше, потому что all_values() создает новый список, который обычно занимает больше памяти, чем набор.uint_size() возвращает размер набора как uint.Существует также size(), но он возвращает int(bits: *), поэтому достаточно использовать uint_size() в этом случае, поскольку в перечисляемом типе не может быть больше MAX_UINT элементов.

0 голосов
/ 26 декабря 2018

также - set_of_values ​​() возвращает 'set', который вы можете запросить для типа наименьшее / наибольшее значение и его диапазон.

Например:

 var x := set_of_values(my_type).uint_max();

 keep y ==  set_of_values(my_type).uint_max().as_a(my_type).as_a(my_type);

 print set_of_values(my_type).uint_min().as_a(my_type);
0 голосов
/ 26 декабря 2018

Существует псевдопрограмма all_values(...), которая возвращает все возможные значения скалярного типа.Вы можете использовать это, чтобы получить число enum литералов:

assert all_values(my_type).size() == 4;
...