В C# я мог бы использовать Contract.OldValue<T>
в пост-состоянии, чтобы проверить, как изменилось поле. Как я могу это сделать в D? Я прочитал the relevant page в документации, но не упоминает об этом.Как проверить пост-условие для старого значения поля в D?
В частности, я пишу визуализатор страниц и отслеживаю, как далеко по странице, полученной в переменной-члене. Я хотел бы утверждать в блоке out
, что значение переменной не меньше, чем было в начале (т. Е. Оно должно было перемещаться по странице, а не вверх).
class Renderer
{
private:
float pos;
public:
void writeText(string text)
in
{
assert(text !is null);
}
out
{
// how to do this?
assert(pos >= oldPos);
}
body
{
...
}
}
Очевидно, что я мог бы добавить еще одно поле просто держать старое значение, и вручную назначить его в начале метода writeText
, но я надеюсь, что есть что-то в рамках который будет делать это автоматически.