summaryrefslogtreecommitdiff
path: root/trunk/ACE/tests/Hash_Multi_Map_Manager_Test.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'trunk/ACE/tests/Hash_Multi_Map_Manager_Test.cpp')
-rw-r--r--trunk/ACE/tests/Hash_Multi_Map_Manager_Test.cpp384
1 files changed, 384 insertions, 0 deletions
diff --git a/trunk/ACE/tests/Hash_Multi_Map_Manager_Test.cpp b/trunk/ACE/tests/Hash_Multi_Map_Manager_Test.cpp
new file mode 100644
index 00000000000..2e883a71152
--- /dev/null
+++ b/trunk/ACE/tests/Hash_Multi_Map_Manager_Test.cpp
@@ -0,0 +1,384 @@
+// $Id$
+
+// ============================================================================
+//
+// = LIBRARY
+// tests
+//
+// = FILENAME
+// Hash_Multi_Map_Manager_Test.cpp
+//
+// = DESCRIPTION
+// This test illustrates the use of <ACE_Hash_Multi_Map_Manager> to
+// maintain a hash table using strings.
+//
+// = AUTHOR
+// Shanshan Jiang <shanshan.jiang@vanderbilt.edu>
+//
+// ============================================================================
+
+#include "test_config.h"
+#include "ace/Hash_Multi_Map_Manager_T.h"
+#include "ace/Null_Mutex.h"
+
+ACE_RCSID(tests, Hash_Multi_Map_Manager_Test, "$Id$")
+
+typedef ACE_Hash_Multi_Map_Manager<const ACE_TCHAR *,
+ const ACE_TCHAR *,
+ ACE_Hash<const ACE_TCHAR *>,
+ ACE_Equal_To<const ACE_TCHAR *>,
+ ACE_Null_Mutex> HASH_STRING_MAP;
+
+typedef HASH_STRING_MAP::ENTRY HASH_STRING_ENTRY;
+typedef HASH_STRING_ENTRY::VALUE_SET HASH_STRING_VALUE_SET;
+typedef HASH_STRING_ENTRY::VALUE_SET_ITERATOR HASH_STRING_VALUE_SET_ITERATOR;
+typedef HASH_STRING_MAP::ITERATOR HASH_STRING_ITERATOR;
+typedef HASH_STRING_MAP::CONST_ITERATOR HASH_STRING_CONST_ITERATOR;
+typedef HASH_STRING_MAP::REVERSE_ITERATOR HASH_STRING_REVERSE_ITERATOR;
+
+static const ACE_TCHAR *color_sorts[] = {ACE_TEXT ("warm"), ACE_TEXT ("cold"), ACE_TEXT ("neutral"), 0};
+static const ACE_TCHAR *warm_colors[] = {ACE_TEXT ("red"), ACE_TEXT ("yellow"), ACE_TEXT ("orange"), 0};
+static const ACE_TCHAR *cold_colors[] = {ACE_TEXT ("blue"), ACE_TEXT ("cyan"), 0};
+static const ACE_TCHAR *neutral_colors[] = {ACE_TEXT ("green"), ACE_TEXT ("purple"), 0};
+
+static int
+run_test (void)
+{
+ HASH_STRING_MAP colors;
+
+ size_t i;
+
+ // Check the <bind> operation.
+ for (i = 0; warm_colors[i] != 0; i++)
+ {
+ if (colors.bind (color_sorts[0],
+ warm_colors[i]) == -1)
+ ACE_ERROR_RETURN ((LM_ERROR,
+ ACE_TEXT ("bind failed for %s in %s\n"),
+ warm_colors[i],
+ color_sorts[0]),
+ -1);
+ }
+
+ HASH_STRING_ENTRY *entry = 0;
+ for (i = 0; cold_colors[i] != 0; i++)
+ {
+ if (colors.bind (color_sorts[1],
+ cold_colors[i],
+ entry) == -1)
+ ACE_ERROR_RETURN ((LM_ERROR,
+ ACE_TEXT ("bind failed for %s in %s\n"),
+ cold_colors[i],
+ color_sorts[1]),
+ -1);
+ }
+
+ HASH_STRING_VALUE_SET value_set;
+ entry = 0;
+ for (i = 0; neutral_colors[i] != 0; i++)
+ value_set.insert (neutral_colors[i]);
+ if (colors.bind (color_sorts[2],
+ value_set,
+ entry) == -1)
+ ACE_ERROR_RETURN ((LM_ERROR,
+ ACE_TEXT ("bind failed for %s\n"),
+ color_sorts[2]),
+ -1);
+
+ // Check the <trybind> operation.
+ value_set.reset ();
+ if (colors.trybind (color_sorts[2],
+ value_set) == -1)
+ ACE_ERROR_RETURN ((LM_ERROR,
+ ACE_TEXT ("bind failed for %s\n"),
+ color_sorts[2]),
+ -1);
+
+ value_set.reset ();
+ entry = 0;
+ if (colors.trybind (color_sorts[2],
+ value_set,
+ entry) == -1)
+ ACE_ERROR_RETURN ((LM_ERROR,
+ ACE_TEXT ("bind failed for %s\n"),
+ color_sorts[2]),
+ -1);
+
+ value_set.reset ();
+ entry = 0;
+ if (colors.trybind (color_sorts[2],
+ value_set,
+ entry) == -1)
+ ACE_ERROR_RETURN ((LM_ERROR,
+ ACE_TEXT ("bind failed for %s\n"),
+ color_sorts[2]),
+ -1);
+
+ // Check the <rebind> operation.
+ value_set.reset ();
+ value_set.insert (neutral_colors[0]);
+ if (colors.rebind (color_sorts[2],
+ value_set) == -1)
+ ACE_ERROR_RETURN ((LM_ERROR,
+ ACE_TEXT ("bind failed for %s\n"),
+ color_sorts[2]),
+ -1);
+
+ value_set.reset ();
+ value_set.insert (neutral_colors[1]);
+ entry = 0;
+ if (colors.rebind (color_sorts[2],
+ value_set,
+ entry) == -1)
+ ACE_ERROR_RETURN ((LM_ERROR,
+ ACE_TEXT ("bind failed for %s\n"),
+ color_sorts[2]),
+ -1);
+
+ value_set.reset ();
+ value_set.insert (neutral_colors[0]);
+ HASH_STRING_VALUE_SET old_value_set;
+ if (colors.rebind (color_sorts[2],
+ value_set,
+ old_value_set) == -1)
+ ACE_ERROR_RETURN ((LM_ERROR,
+ ACE_TEXT ("bind failed for %s\n"),
+ color_sorts[2]),
+ -1);
+
+ value_set.reset ();
+ value_set.insert (neutral_colors[1]);
+ old_value_set.reset ();
+ entry = 0;
+ if (colors.rebind (color_sorts[2],
+ value_set,
+ old_value_set,
+ entry) == -1)
+ ACE_ERROR_RETURN ((LM_ERROR,
+ ACE_TEXT ("bind failed for %s\n"),
+ color_sorts[2]),
+ -1);
+
+ value_set.reset ();
+ value_set.insert (neutral_colors[0]);
+ const ACE_TCHAR *old_key;
+ old_value_set.reset ();
+ if (colors.rebind (color_sorts[2],
+ value_set,
+ old_key,
+ old_value_set) == -1)
+ ACE_ERROR_RETURN ((LM_ERROR,
+ ACE_TEXT ("bind failed for %s\n"),
+ color_sorts[2]),
+ -1);
+
+ value_set.reset ();
+ for (i = 0; neutral_colors[i] != 0; i++)
+ value_set.insert (neutral_colors[i]);
+ old_key = 0;
+ old_value_set.reset ();
+ entry = 0;
+ if (colors.rebind (color_sorts[2],
+ value_set,
+ old_key,
+ old_value_set,
+ entry) == -1)
+ ACE_ERROR_RETURN ((LM_ERROR,
+ ACE_TEXT ("bind failed for %s\n"),
+ color_sorts[2]),
+ -1);
+
+ // Check the <find> operation.
+ for (i = 0; color_sorts[i] != 0; i++)
+ if (colors.find (color_sorts[i]) == 0)
+ ACE_DEBUG ((LM_DEBUG,
+ ACE_TEXT ("%s found\n"),
+ color_sorts[i]));
+ else
+ ACE_ERROR_RETURN ((LM_ERROR,
+ ACE_TEXT ("%s not found\n"),
+ color_sorts[i]),
+ -1);
+
+ entry = 0;
+ for (i = 0; color_sorts[i] != 0; i++)
+ if (colors.find (color_sorts[i],
+ entry) == 0)
+ ACE_DEBUG ((LM_DEBUG,
+ ACE_TEXT ("%s found\n"),
+ color_sorts[i]));
+ else
+ ACE_ERROR_RETURN ((LM_ERROR,
+ ACE_TEXT ("%s not found\n"),
+ color_sorts[i]),
+ -1);
+
+ value_set.reset ();
+ for (i = 0; color_sorts[i] != 0; i++)
+ if (colors.find (color_sorts[i],
+ value_set) == 0)
+ ACE_DEBUG ((LM_DEBUG,
+ ACE_TEXT ("%s found\n"),
+ color_sorts[i]));
+ else
+ ACE_ERROR_RETURN ((LM_ERROR,
+ ACE_TEXT ("%s not found\n"),
+ color_sorts[i]),
+ -1);
+
+ for (i = 0; warm_colors[i] != 0; i++)
+ if (colors.find (color_sorts[0],
+ warm_colors[i]) == 0)
+ ACE_DEBUG ((LM_DEBUG,
+ ACE_TEXT ("%s color %s found\n"),
+ color_sorts[0],
+ warm_colors[i]));
+ else
+ ACE_ERROR_RETURN ((LM_ERROR,
+ ACE_TEXT ("%s color %s not found\n"),
+ color_sorts[0],
+ warm_colors[i]),
+ -1);
+
+ // Check the iterator.
+ i = 0;
+ entry = 0;
+ for (HASH_STRING_ITERATOR hash_iter (colors);
+ hash_iter.next (entry) != 0;
+ hash_iter.advance ())
+ {
+ ACE_DEBUG ((LM_DEBUG,
+ ACE_TEXT ("iterating (%d): %s:\n"),
+ i,
+ entry->ext_id_));
+ i++;
+
+ for (HASH_STRING_VALUE_SET_ITERATOR iter (entry->int_id_set_);
+ iter != entry->int_id_set_.end ();
+ iter++)
+ {
+ ACE_DEBUG ((LM_DEBUG,
+ ACE_TEXT ("%s \n"),
+ *iter));
+ }
+ }
+
+ // Check the unbind operation.
+ if (colors.unbind (color_sorts[0]) == -1)
+ ACE_ERROR_RETURN ((LM_ERROR,
+ ACE_TEXT ("unbind failed for %s\n"),
+ color_sorts[1]),
+ -1);
+ for (i = 0; warm_colors[i] != 0; i++)
+ {
+ if (colors.bind (color_sorts[0],
+ warm_colors[i]) == -1)
+ ACE_ERROR_RETURN ((LM_ERROR,
+ ACE_TEXT ("bind failed for %s in %s\n"),
+ warm_colors[i],
+ color_sorts[0]),
+ -1);
+ }
+
+ value_set.reset ();
+ if (colors.unbind (color_sorts[0], value_set) == -1)
+ ACE_ERROR_RETURN ((LM_ERROR,
+ ACE_TEXT ("unbind failed for %s\n"),
+ color_sorts[1]),
+ -1);
+ for (i = 0; warm_colors[i] != 0; i++)
+ {
+ if (colors.bind (color_sorts[0],
+ warm_colors[i]) == -1)
+ ACE_ERROR_RETURN ((LM_ERROR,
+ ACE_TEXT ("bind failed for %s in %s\n"),
+ warm_colors[i],
+ color_sorts[0]),
+ -1);
+ }
+
+ for (i = 0; warm_colors[i] != 0; i++)
+ {
+ if (colors.unbind (color_sorts[0],
+ warm_colors[i]) == -1)
+ ACE_ERROR_RETURN ((LM_ERROR,
+ ACE_TEXT ("unbind failed for %s in %s\n"),
+ warm_colors[i],
+ color_sorts[0]),
+ -1);
+ }
+
+ // Check the reverse iterator.
+ i = 0;
+ entry = 0;
+ for (HASH_STRING_REVERSE_ITERATOR hash_iter (colors);
+ hash_iter.next (entry) != 0;
+ hash_iter.advance ())
+ {
+ ACE_DEBUG ((LM_DEBUG,
+ ACE_TEXT ("reverse iterating (%d): %s\n"),
+ i,
+ entry->ext_id_));
+ i++;
+
+ for (HASH_STRING_VALUE_SET_ITERATOR iter (entry->int_id_set_);
+ iter != entry->int_id_set_.end ();
+ iter++)
+ {
+ ACE_DEBUG ((LM_DEBUG,
+ ACE_TEXT ("%s \n"),
+ *iter));
+ }
+ }
+
+ entry = 0;
+ colors.find (color_sorts[1], entry);
+ if (colors.unbind (entry) == -1)
+ ACE_ERROR_RETURN ((LM_ERROR,
+ ACE_TEXT ("unbind failed for %s\n"),
+ color_sorts[1]),
+ -1);
+
+ // Check the const iterator.
+ i = 0;
+ entry = 0;
+ for (HASH_STRING_CONST_ITERATOR hash_iter (colors);
+ hash_iter.next (entry) != 0;
+ hash_iter.advance ())
+ {
+ ACE_DEBUG ((LM_DEBUG,
+ ACE_TEXT ("const iterating (%d): %s\n"),
+ i,
+ entry->ext_id_));
+ i++;
+
+ for (HASH_STRING_VALUE_SET_ITERATOR iter (entry->int_id_set_);
+ iter != entry->int_id_set_.end ();
+ iter++)
+ {
+ ACE_DEBUG ((LM_DEBUG,
+ ACE_TEXT ("%s \n"),
+ *iter));
+ }
+ }
+
+ // Check the unbind_all operation.
+ if (colors.unbind_all () != 0)
+ ACE_ERROR_RETURN ((LM_ERROR,
+ ACE_TEXT ("unbind_all failed\n")),
+ -1);
+
+ return 0;
+}
+
+int
+run_main (int, ACE_TCHAR *[])
+{
+ ACE_START_TEST (ACE_TEXT ("Hash_Multi_Map_Manager_Test"));
+
+ run_test ();
+
+ ACE_END_TEST;
+
+ return 0;
+}