下の図の主な問題は、「check Result end」ステートメントが追加されると、自動的に失敗し、デバッガーに「CHECK_VIOLATION」エラーが表示されることです。
また、HASH_TABLE はそれに与えられたすべてのアイテムを保存するわけではありませんが、現在の HASH_TABLE[INTEGER, G] を使用する代わりに HASH_TABLE[G, INTEGER] を切り替えることで修正しました
私の主な問題は、Check_violation が常にスローされ、「チェック結果の終了」ステートメントが表示されるたびに失敗するのはなぜですか? HAS[...]関数が悪いのでしょうか?
現在、「チェック結果の終了」を含むテストケース機能はすべてfalseになり、CHECK_VILOATIONがスローされます
コード:
class
MY_BAG[G -> {HASHABLE, COMPARABLE}]
inherit
ADT_BAG[G]
create
make_empty, make_from_tupled_array
convert
make_from_tupled_array ({ARRAY [TUPLE [G, INTEGER]]})
feature{NONE} -- creation
make_empty
do
create table.make(1)
end
make_from_tupled_array (a_array: ARRAY [TUPLE [x: G; y: INTEGER]])
require else
non_empty: a_array.count >= 0
nonnegative: is_nonnegative(a_array)
do
create table.make(a_array.count)
across a_array as a
loop
table.force (a.item.y, a.item.x)
end
end
feature -- attributes
table: HASH_TABLE[INTEGER, G]
counter: INTEGER
テストコード:
t6: BOOLEAN
local
bag: MY_BAG [STRING]
do
comment ("t6:repeated elements in contruction")
bag := <<["foo",4], ["bar",3], ["foo",2], ["bar",0]>> -- test passes
Result := bag ["foo"] = 5 -- test passes
check Result end -- test fails (really weird but as soon as check statement comes it fails)
Result := bag ["bar"] = 3
check Result end
Result := bag ["baz"] = 0
end