I need to know how many values there is in an enumerated type in my verification environment. E.g.:
type my_type: [a, b, c, d];
I there a way to check on the fly that there 4 different values in the my_type
?
Thank you for your help
There's an all_values(...)
pseudo-routine that returns all possible values of a scalar type. You can use this to get the number of enum
literals:
assert all_values(my_type).size() == 4;
Besides what Tudor suggested, another way is to use set_of_values()
pseudo-routine that returns a set
(rather than a list) of all values:
set_of_values(my_type).uint_size()
In a way, using set_of_values()
is better because all_values()
creates a new list, which usually consumes more memory than a set.
uint_size()
returns the size of the set as uint
. There is also size()
but it returns int(bits: *)
, so it's good enough to use uint_size()
in this case, because there can never be more than MAX_UINT
items in an enumerated type.
also - set_of_values() return 'set', which you can inquire for the type smallest/largest value, and its range.
For example:
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);