Почему текущее и «старое» значение одного и того же выражения в постусловии равны? - PullRequest
0 голосов
/ 23 сентября 2018

Я пытаюсь получить значение записи в 2D-массиве до реализации и после.Но следующее постусловие не выполняется, потому что 2 записи как-то одинаковы (и да, я переопределил is_equal , так что ~ будет равенством объектов):

    ensure
        designated_cell_changed:
            get_entry (row + 1, column + 1) /~ old get_entry (row + 1, column + 1)

Почему я получаю нарушение постусловия designated_cell_changed?

1 Ответ

0 голосов
/ 23 сентября 2018

Причин может быть несколько:

  1. Подозрительно почему индексы row + 1 и column + 1 вместо row и column.

  2. Если рассматриваемый объект явно принимает новое значение, например put (value: G; row, column: ...), он должен иметь предварительное условие

    require
        different_value: value /~ entry (row, column)
    

    Примечание: для запросов, которые рекомендуетсяиспользуйте существительные или прилагательные, а не глаголы, поэтому entry вместо get_entry.

  3. Если функция не принимает новое значение в качестве аргумента, она должна обновить само соответствующее значение.

  4. В коде функции могут быть ошибки:

    • Не изменяет значение постоянно (например, в некоторых условных ветвях).
    • Изменяет значение, но с некоторыми другими индексами.
  5. Если значения entry (row + 1, column + 1) в начале и в конце функцииВ отличие от этого, реализация is_equal может пропускать некоторые случаи, из-за которых объекты различаются.

...