You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
65 lines
1.2 KiB
65 lines
1.2 KiB
/*
|
|
* 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.
|
|
*/
|
|
|
|
int exact_min_minus_min_linear_CAF(int x) {
|
|
int size1[1];
|
|
int y = 28;
|
|
if (x < 5)
|
|
y = x + 10;
|
|
// y = [10 + min(18, x), 28]
|
|
if (y > 28) {
|
|
size1[-1] = 0;
|
|
}
|
|
return y;
|
|
}
|
|
|
|
int underapprox_min_minus_min_linear_CAF(int x) {
|
|
int size1[1];
|
|
int y = 10;
|
|
if (x < 5)
|
|
y = x + 20;
|
|
// y = [20 + min(-10, x), 24]
|
|
if (y > 24) {
|
|
size1[-1] = 0;
|
|
}
|
|
return y;
|
|
}
|
|
|
|
void exact_min_plus_min_plus_min_UNDERRUN(int x, int b) {
|
|
int size1[1];
|
|
int y = exact_min_minus_min_linear_CAF(x);
|
|
if (b)
|
|
y = underapprox_min_minus_min_linear_CAF(x);
|
|
y -= 29;
|
|
// [-19 + min(0, x), -1]
|
|
size1[y] = 0;
|
|
}
|
|
|
|
int random();
|
|
|
|
int exact_minmax_sym(int x) {
|
|
if (random()) {
|
|
if (x > 1) {
|
|
x = 1;
|
|
} // [min(1, x), 1]
|
|
x = x + 1; // [1 + min(1, x), 2]
|
|
} // [min(2, x), max(2, x)]
|
|
return x;
|
|
}
|
|
|
|
void call_exact_minmax_sym_Good() {
|
|
int x = 5;
|
|
int a[x];
|
|
a[exact_minmax_sym(x) - 1] = 0;
|
|
}
|
|
|
|
void call_exact_minmax_sym_Bad() {
|
|
int x = 5;
|
|
int a[x];
|
|
a[exact_minmax_sym(x)] = 0;
|
|
}
|