From fcc0b69c073399d4af0443108eaa22cb630b276f Mon Sep 17 00:00:00 2001 From: Willem Jan Palenstijn Date: Tue, 9 Jun 2009 15:26:09 +0000 Subject: Add (failing) hashmap test case for collision handling svn-id: r41400 --- test/common/hashmap.h | 43 +++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 43 insertions(+) (limited to 'test') diff --git a/test/common/hashmap.h b/test/common/hashmap.h index c62f909f95..13f630430c 100644 --- a/test/common/hashmap.h +++ b/test/common/hashmap.h @@ -108,5 +108,48 @@ class HashMapTestSuite : public CxxTest::TestSuite TS_ASSERT_EQUALS(container2[323], 32); } + void test_collision() { + // NB: The usefulness of this example depends strongly on the + // specific hashmap implementation. + // It is constructed to insert multiple colliding elements. + Common::HashMap h; + h[5] = 1; + h[32+5] = 1; + h[64+5] = 1; + h[128+5] = 1; + TS_ASSERT(h.contains(5)); + TS_ASSERT(h.contains(32+5)); + TS_ASSERT(h.contains(64+5)); + TS_ASSERT(h.contains(128+5)); + h.erase(32+5); + TS_ASSERT(h.contains(5)); + TS_ASSERT(h.contains(64+5)); + TS_ASSERT(h.contains(128+5)); + h.erase(5); + TS_ASSERT(h.contains(64+5)); + TS_ASSERT(h.contains(128+5)); + h[32+5] = 1; + TS_ASSERT(h.contains(32+5)); + TS_ASSERT(h.contains(64+5)); + TS_ASSERT(h.contains(128+5)); + h[5] = 1; + TS_ASSERT(h.contains(5)); + TS_ASSERT(h.contains(32+5)); + TS_ASSERT(h.contains(64+5)); + TS_ASSERT(h.contains(128+5)); + h.erase(5); + TS_ASSERT(h.contains(32+5)); + TS_ASSERT(h.contains(64+5)); + TS_ASSERT(h.contains(128+5)); + h.erase(64+5); + TS_ASSERT(h.contains(32+5)); + TS_ASSERT(h.contains(128+5)); + h.erase(128+5); + TS_ASSERT(h.contains(32+5)); + h.erase(32+5); + TS_ASSERT(h.empty()); + } + + // TODO: Add test cases for iterators, find, ... }; -- cgit v1.2.3