|
|
|
/*
|
|
|
|
* Copyright (c) Facebook, Inc. and its affiliates.
|
|
|
|
*
|
|
|
|
* This source code is licensed under the MIT license found in the
|
|
|
|
* LICENSE file in the root directory of this source tree.
|
|
|
|
*/
|
|
|
|
/* Depending on whether p is positive, the program might loop forever */
|
|
|
|
int while_unique_def_FN(int p) {
|
|
|
|
int j = 0;
|
|
|
|
while (j < 10) {
|
|
|
|
if (p > 0) {
|
|
|
|
j = 500;
|
|
|
|
} else {
|
|
|
|
j = -1;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
return 0;
|
|
|
|
}
|
|
|
|
|
|
|
|
/* Expected O(n * m) */
|
|
|
|
void do_n_m_times_nested(int n, int m) {
|
|
|
|
int k = n;
|
|
|
|
int p = m;
|
|
|
|
for (int i = 0; i < k; i++) {
|
|
|
|
for (int j = 0; j < p; j++) {
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
/* Expected:O(p). Also inner loop will have t as invariant */
|
|
|
|
void two_loops_nested_invariant(int p) {
|
|
|
|
int t = 0;
|
|
|
|
int m = p;
|
|
|
|
for (int i = 0; i < m; i++) {
|
|
|
|
t = 3;
|
|
|
|
for (int j = 0; j < t; j++) {
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
/* since the guard i is invariant, we will remove it from control
|
|
|
|
variables, and hence the total cost will be constant, but the
|
|
|
|
program diverges */
|
|
|
|
int while_infinite_FN() {
|
|
|
|
int i = 0;
|
|
|
|
while (i < 10) {
|
|
|
|
}
|
|
|
|
return 0;
|
|
|
|
}
|