summaryrefslogtreecommitdiff
path: root/ACE/tests/OrdMultiSet_Test.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'ACE/tests/OrdMultiSet_Test.cpp')
-rw-r--r--ACE/tests/OrdMultiSet_Test.cpp248
1 files changed, 248 insertions, 0 deletions
diff --git a/ACE/tests/OrdMultiSet_Test.cpp b/ACE/tests/OrdMultiSet_Test.cpp
new file mode 100644
index 00000000000..906735973c7
--- /dev/null
+++ b/ACE/tests/OrdMultiSet_Test.cpp
@@ -0,0 +1,248 @@
+// $Id$
+
+// ============================================================================
+//
+// = LIBRARY
+// tests
+//
+// = FILENAME
+// OrdMultiSet_Test.cpp
+//
+// = DESCRIPTION
+// This is a simple test of the <ACE_Ordered_MultiSet> and
+// <ACE_Ordered_MultiSet_Iterator> class templates, instantiating
+// them with type int. No command line arguments are needed to run
+// the test.
+//
+// = AUTHOR
+// Chris Gill <cdgill@cs.wustl.edu>
+//
+// ============================================================================
+
+// Note, for this test the config.h file *must* come first!
+#include "ace/config-all.h"
+
+#include "test_config.h"
+#include "ace/Containers.h"
+
+
+
+int
+run_main (int, ACE_TCHAR *[])
+{
+ int ret = 0;
+ int *ptr = 0;
+
+ ACE_START_TEST (ACE_TEXT ("OrdMultiSet_Test"));
+
+ // make an empty set of int and an iterator
+ ACE_Ordered_MultiSet<int> set;
+ ACE_Ordered_MultiSet_Iterator<int> iter(set);
+
+ // Put in a range of odd ints, without an iterator.
+ int i;
+ for (i = -10; i < 10; ++i)
+ set.insert (2 * i + 1);
+
+ // Put in an interleaved range of even ints, using an iterator.
+ for (i = -10; i <= 10; ++i)
+ set.insert (2 * i, iter);
+
+ // Remove the first and last elements of range.
+ while (set.remove (-20) == 0)
+ {
+ // No action.
+ }
+
+ while (set.remove (20) == 0)
+ {
+ // No action.
+ }
+
+ // Should still have 39 elements in the set.
+ ACE_TEST_ASSERT (set.is_empty () == 0);
+ ACE_TEST_ASSERT (set.size () == 39);
+
+ // Iterate forward through the range we created: should be one of
+ // each.
+ iter.first ();
+
+ for (i = -19; i <= 19; ++i)
+ {
+ // we should still be in the set
+ ACE_TEST_ASSERT (iter.done () == 0);
+
+ // make sure the current element is what we expect
+ iter.next (ptr);
+ ACE_TEST_ASSERT (ptr != 0);
+ ACE_TEST_ASSERT (*ptr == i);
+
+ // move to the next element in the set
+ iter.advance ();
+ }
+
+ // We should have iterated through the entire set.
+ ACE_TEST_ASSERT (iter.done () != 0);
+
+ // Iterate backward through the range we created: should be one of
+ // each.
+ iter.last ();
+
+ for (i = 19; i >= -19; --i)
+ {
+ // We should still be in the set.
+ ACE_TEST_ASSERT (iter.done () == 0);
+
+ // Make sure the current element is what we expect.
+ int *ptr = 0;
+ iter.next (ptr);
+ ACE_TEST_ASSERT (ptr != 0);
+ ACE_TEST_ASSERT (*ptr == i);
+
+ // Move to the previous element in the set.
+ iter.retreat ();
+ }
+
+ // We should have iterated through the entire set.
+ ACE_TEST_ASSERT (iter.done () != 0);
+
+ // Iterate through the set and use the operator* to get the element
+ iter.first ();
+
+ for (i = -19; i <= 19; ++i)
+ {
+ // we should still be in the set
+ ACE_TEST_ASSERT (iter.done () == 0);
+
+ // make sure the current element is what we expect
+ int& l = *iter;
+ ACE_TEST_ASSERT (l == i);
+
+ // move to the next element in the set
+ iter.advance ();
+ }
+
+ // We should have iterated through the entire set.
+ ACE_TEST_ASSERT (iter.done () != 0);
+
+ // Clear the set, restart the iterator, and make sure the iterator
+ // is out of range at both ends, the set is empty, and a subsequent
+ // advance or retreat on an out of range iterator does not cause
+ // problems
+ set.reset ();
+ ACE_TEST_ASSERT (set.is_empty () != 0);
+ iter.first ();
+ ACE_TEST_ASSERT (iter.done () != 0);
+ iter.retreat ();
+ iter.last ();
+ ACE_TEST_ASSERT (iter.done () != 0);
+ iter.advance ();
+
+ // Put in a bunch of ints in various relative positions, using an
+ // iterator for the odds and no iterator for the evens.
+ set.insert (203, iter);
+ set.insert (202);
+ set.insert (204);
+ set.insert (201, iter);
+ set.insert (205, iter);
+
+ set.insert (203, iter);
+ set.insert (203, iter);
+
+ set.insert (204);
+ set.insert (204);
+ set.insert (204);
+ set.insert (205, iter);
+ set.insert (205, iter);
+ set.insert (205, iter);
+ set.insert (205, iter);
+ set.insert (202);
+
+ // remove the middle elements
+ while (set.remove (204) == 0)
+ {
+ // No action.
+ }
+
+ while (set.remove (202) == 0)
+ {
+ // No action.
+ }
+
+ while (set.remove (203) == 0)
+ {
+ // No action.
+ }
+
+ // Put the iterator out of range and make sure it stays
+ // that way for finds on the missing elements.
+ iter.last ();
+ iter.advance ();
+ set.find (203, iter);
+ ACE_TEST_ASSERT (iter.done () != 0);
+ set.find (202, iter);
+ ACE_TEST_ASSERT (iter.done () != 0);
+ set.find (204, iter);
+ ACE_TEST_ASSERT (iter.done () != 0);
+
+ // Make sure the other elements can be found.
+ set.find (205, iter);
+ ACE_TEST_ASSERT (iter.done () == 0);
+ iter.next (ptr);
+ ACE_TEST_ASSERT (ptr != 0);
+ ACE_TEST_ASSERT (*ptr == 205);
+ set.find (201, iter);
+ ACE_TEST_ASSERT (iter.done () == 0);
+ iter.next (ptr);
+ ACE_TEST_ASSERT (ptr != 0);
+ ACE_TEST_ASSERT (*ptr == 201);
+
+ // Finally, iterate through the set and make sure its contents are
+ // correct (one 201 and five 205s).
+ iter.first ();
+ ACE_TEST_ASSERT (iter.done () == 0);
+ iter.next (ptr);
+ ACE_TEST_ASSERT (ptr != 0);
+ ACE_TEST_ASSERT (*ptr == 201);
+ iter.advance ();
+
+ for (i = 1; i <= 5; ++i)
+ {
+ // Should be in the set, able to access the element, value
+ // should be 205
+ ACE_TEST_ASSERT (iter.done () == 0);
+ iter.next (ptr);
+ ACE_TEST_ASSERT (ptr != 0);
+ ACE_TEST_ASSERT (*ptr == 205);
+
+ // Move to the next element in the set.
+ iter.advance ();
+ }
+
+ // Should not be anything else in the set.
+ ACE_TEST_ASSERT (iter.done () != 0);
+
+ // remove the rest
+ while (set.remove (205) == 0)
+ {
+ // No action.
+ }
+
+ while (set.remove (201) == 0)
+ {
+ // No action.
+ }
+
+ // Should have no more elements in the set.
+ ACE_TEST_ASSERT (set.is_empty () != 0);
+ ACE_TEST_ASSERT (set.size () == 0);
+ iter.first ();
+ ACE_TEST_ASSERT (iter.done () != 0);
+ iter.last ();
+ ACE_TEST_ASSERT (iter.done () != 0);
+
+ ACE_END_TEST;
+
+ return ret;
+}
+