Основная проблема на приведенном ниже рисунке заключается в том, что при добавлении оператора «check Result end» он автоматически завершается ошибкой и отображает ошибку «CHECK_VIOLATION» в отладчике.
Кроме того, HASH_TABLE не хранит все переданные ей элементы, но я исправил это, переключив HASH_TABLE[G, INTEGER] вместо использования текущей HASH_TABLE[INTEGER, G]
Моя главная проблема заключается в том, почему он всегда выдает Check_violation и терпит неудачу всякий раз, когда появляется оператор «check result end»? Может быть, функция HAS[...] плохая?
В настоящее время любая функция тестового примера с «концом результата проверки» делает ее ложной и выдает 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