Эта функция выполняет макет функции, которая возвращает непрерывно растущее значение, пока не произойдет переполнение.Это похоже на функцию millis()
в Arduino.
Чтобы доказать реализацию, мне нужно увеличить (таким образом, назначить) статические переменные, чтобы сохранить состояние между вызовами.Однако функция, которая вызывает mock_millis()
, все еще должна иметь возможность assign \nothing
.
. Есть ли способ заставить WP игнорировать предложение assigns?
static int64_t milliseconds = 0;
/*@ assigns milliseconds;
behavior normal:
assumes milliseconds < INT64_MAX;
ensures \result == \old(milliseconds) + 1;
ensures milliseconds == \old(milliseconds) + 1;
behavior overflow:
assumes milliseconds == INT64_MAX;
ensures \result == 0;
ensures milliseconds == 0;
complete behaviors normal, overflow;
disjoint behaviors normal, overflow;
*/
int64_t mock_millis() {
if (milliseconds < INT64_MAX) {
milliseconds++;
} else {
milliseconds = 0;
}
return milliseconds;
}
Я пытался сделать это сфиктивные переменные и заметили, что функция, которая назначает фиктивную переменную, не может быть assigns \nothing
.Я думал, что переменные-призраки полностью независимы от реализации программы.Есть ли для этого особая причина?