My attempt to write an ACSL predicate to see if an integer is a power of 2 goes like this:
/*@
predicate positive_power_of_2 (integer i) =
i > 0 &&
(i == 1 || ((i & 1) == 0 && positive_power_of_2 (i >> 1)));
*/
However when I added some assert lines into a random function, some Timeout (ie. fail). I don't understand why?
//@ assert positive_power_of_2 (1); // Timeout
//@ assert positive_power_of_2 (2); // Valid
//@ assert positive_power_of_2 (4); // Valid
//@ assert !positive_power_of_2 (7); // Timeout
