私は理にかなっていない1つのケースを発見しました。私は機能には、次のしているディープコピーは常にワークベンチシステムで失敗します
:
test_array_deep_copy: BOOLEAN
local
imp, old_imp: ARRAY[STRING]
do
comment("Test of a deep copy.")
create {ARRAY[STRING]} imp.make_empty
imp.force ("Alan", 1)
imp.force ("Mark", 2)
imp.force ("Tom", 3)
old_imp := imp.deep_twin
imp[2] := "Jim"
Result :=
across
1 |..| imp.count as j
all
j.item /= 2 implies imp [j.item] = old_imp [j.item]
end
check not Result end
end
それは深いコピーであるので、すなわち、IMPのアドレスを意味し、異なるだけでなく、両方2でその属性も別のアドレスを参照することold_impです。
したがって、この結果 "across" afterループでは、同じインデックスのimpとold_impのアドレスが異なるため、falseにする必要があります。
私はこのコードをデバッグするとき、結果がループを越えて終了した後に偽に設定されていると言います。
問題は「結果をチェックしない」が真に偽にならないことです。
私は理由を知りません。 "check not Result"ステートメントの "Result"の前に "not"を指定すると、全体的なチェックが真であるため、Workbenchシステムで "PASSED"と表示されますが、失敗します。
なぜですか?