c_decl { int binsearch (int a[], int x, int s) { int l = 0; int h = s-1; int m; while (l != h) { m = a[(l + h) / 2]; if (m == x) { return ((l + h) / 2); } else if (m < x) { l = (l + h) / 2; } else { h = (l + h) / 2; } } return -1; } int linsearch (int a[], int x, int s) { int n = 0; while (n < s) { if (a[n] == x) return n; n++; } return -1; } } #define SIZE 5 #define MAX 4 int a[SIZE]; int x; int s; int bret; int lret; inline pick (var, n) { var = 0; do :: (var < n) -> var++; :: break od; } active proctype main () { int n = 0; do :: n < SIZE -> pick(a[n], MAX); printf ("a[%d] = %d\n", n, a[n]); n++ :: else -> break; od; pick(x, MAX); printf ("looking for %d\n", x); bret = c_expr{binsearch(now.a, now.x, SIZE)}; lret = c_expr{linsearch(now.a, now.x, SIZE)}; assert (bret == lret); }