I'm trying to get the value of an entry in a 2D-array before the implementation and afterwards. But the following postcondition is failing because the 2 entries are somehow the same (and yes, I have redefined is_equal, so that ~ will be object equality):
ensure
designated_cell_changed:
get_entry (row + 1, column + 1) /~ old get_entry (row + 1, column + 1)
Why do I get a postcondition violation designated_cell_changed
?
答案 0 :(得分:1)
可能有几个原因:
为什么索引是row + 1
和column + 1
而不是row
和column
令人怀疑。
如果所关注的特征明确采用新值,例如put (value: G; row, column: ...)
,它应该有一个前提条件
require
different_value: value /~ entry (row, column)
旁注:对于查询,建议使用名词或形容词而不是动词,因此使用entry
代替get_entry
。
如果该功能未将新值用作参数,则应更新相应的值本身。
该功能的代码中可能存在错误:
如果在功能的开头和结尾处entry (row + 1, column + 1)
的值不同,则is_equal
的实现可能会丢失某些使对象不同的情况。