summaryrefslogtreecommitdiff
path: root/ACE/tests/Collection_Test.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'ACE/tests/Collection_Test.cpp')
-rw-r--r--ACE/tests/Collection_Test.cpp184
1 files changed, 184 insertions, 0 deletions
diff --git a/ACE/tests/Collection_Test.cpp b/ACE/tests/Collection_Test.cpp
new file mode 100644
index 00000000000..cf8e124de77
--- /dev/null
+++ b/ACE/tests/Collection_Test.cpp
@@ -0,0 +1,184 @@
+// $Id$
+
+// ============================================================================
+//
+// = LIBRARY
+// tests
+//
+// = FILENAME
+// Collection_Test.cpp
+//
+// = DESCRIPTION
+// This is a simple test of the ACE collection classes and its
+// iterators.
+//
+// = AUTHOR
+// Irfan Pyarali <irfan@cs.wustl.edu>
+//
+// ============================================================================
+
+#include "test_config.h"
+
+ACE_RCSID(tests, Collection_Test, "$Id$")
+
+#include "ace/Containers.h"
+#include "Collection_Test.h"
+
+UglyThing::UglyThing (void* alloc, deletion_func dfunc)
+ : alloc_ (alloc)
+ , dfunc_ (dfunc)
+{
+}
+
+bool
+UglyThing::operator== (const UglyThing& r) const
+{
+ return this->alloc_ == r.alloc_;
+}
+
+typedef UglyThing DATA;
+typedef ACE_Unbounded_Set<DATA> UNBOUNDED_SET;
+typedef ACE_Unbounded_Set_Iterator<DATA> UNBOUNDED_SET_ITERATOR;
+typedef ACE_Unbounded_Set_Const_Iterator<DATA> UNBOUNDED_SET_CONST_ITERATOR;
+
+typedef int ARRAY_DATA;
+typedef ACE_Array<ARRAY_DATA> ARRAY;
+typedef ACE_Array_Iterator<ARRAY_DATA> ARRAY_ITERATOR;
+
+void iterate_const(const UNBOUNDED_SET& set)
+{
+ {
+ UNBOUNDED_SET_CONST_ITERATOR iterator (set);
+ while (!iterator.done ())
+ {
+ DATA *data = 0;
+ iterator.next (data);
+
+ ACE_DEBUG ((LM_DEBUG, ACE_TEXT ("%x,%x\n"),
+ data->alloc_, data->dfunc_));
+
+ DATA data_second = *iterator;
+ ACE_DEBUG ((LM_DEBUG, ACE_TEXT ("%x,%x\n"),
+ data_second.alloc_, data_second.dfunc_));
+
+ iterator.advance ();
+ }
+ }
+}
+
+struct DummyFunctor
+{
+ int operator() (void) { return 0; }
+};
+
+int
+run_main (int, ACE_TCHAR *[])
+{
+ ACE_START_TEST (ACE_TEXT ("Collection_Test"));
+
+ deletion_func NO_DFUNC = (deletion_func)0;
+ DummyFunctor dummyfunc;
+
+ {
+ UNBOUNDED_SET unbounded_set;
+
+ unbounded_set.insert (UglyThing ((void*)&unbounded_set, NO_DFUNC));
+ unbounded_set.insert (UglyThing ((void*)&dummyfunc, NO_DFUNC));
+
+ {
+ for (UNBOUNDED_SET::iterator iterator = unbounded_set.begin ();
+ iterator != unbounded_set.end ();
+ ++iterator)
+ {
+ ACE_DEBUG ((LM_DEBUG, ACE_TEXT ("%x,%x\n"),
+ (*iterator).alloc_, (*iterator).dfunc_));
+ }
+ }
+
+ unbounded_set.insert (UglyThing (0, NO_DFUNC));
+ unbounded_set.remove (UglyThing ((void*)&dummyfunc, NO_DFUNC));
+
+ {
+ UNBOUNDED_SET_ITERATOR iterator (unbounded_set);
+ while (!iterator.done ())
+ {
+ DATA *data = 0;
+ iterator.next (data);
+ ACE_DEBUG ((LM_DEBUG, ACE_TEXT ("%x,%x\n"),
+ data->alloc_, data->dfunc_));
+ iterator.advance ();
+ }
+ }
+ iterate_const (unbounded_set);
+
+ unbounded_set.reset ();
+
+ {
+ DATA *data;
+ UNBOUNDED_SET_ITERATOR i (unbounded_set);
+
+ while (i.next (data) != 0)
+ {
+ ACE_DEBUG ((LM_DEBUG, "%x,%x\n", data->alloc_, data->dfunc_));
+ i.advance ();
+ }
+ }
+ iterate_const (unbounded_set);
+ }
+
+ {
+ ARRAY array;
+ }
+
+ {
+ ARRAY array (0);
+ }
+
+ {
+ ARRAY array1;
+ array1.size (2);
+ array1[0] = 4;
+ array1[1] = 4;
+
+ ARRAY array2 (2, 4);
+
+ ARRAY array3 (array2);
+
+ ARRAY array4;
+ array4 = array2;
+
+ ACE_ASSERT (array1 == array2);
+ ACE_ASSERT (array1 == array3);
+ ACE_ASSERT (array1 == array4);
+
+ {
+ for (size_t i = 0;
+ i != array1.size ();
+ ++i)
+ {
+ ACE_DEBUG ((LM_DEBUG, ACE_TEXT ("%d\n"),
+ array1[i]));
+ ACE_ASSERT (array1[i] == 4);
+ }
+ }
+
+ {
+ ARRAY_ITERATOR iterator (array1);
+ while (!iterator.done ())
+ {
+ ARRAY_DATA *data = 0;
+ iterator.next (data);
+ ACE_DEBUG ((LM_DEBUG, ACE_TEXT ("%d\n"),
+ (*data)));
+ ACE_ASSERT (*data == 4);
+ iterator.advance ();
+ }
+ }
+ }
+
+
+ ACE_END_TEST;
+
+ return 0;
+}
+