1

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

Halona
  • 1,475
  • 1
  • 15
  • 26

3 Answers3

4

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;
Tudor Timi
  • 7,453
  • 1
  • 24
  • 53
1

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.

Yuri Tsoglin
  • 963
  • 4
  • 7
1

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);
user3467290
  • 706
  • 3
  • 4