static int iterator_test (void) { const int ITERATIONS = 5; ACE_TCHAR buffer[ITERATIONS][BUFSIZ]; // Use queue size from of 32 Kb (more if using wide-char), instead of the // default of 16 Kb (defined by ACE_Message_Queue_Base::DEFAULT_HWM), // so that the test runs on machines with 8Kb pagesizes. // QUEUE queue (32 * 1024 * sizeof (ACE_TCHAR)); QUEUE queue (sizeof(buffer)); int i; for (i = 0; i < ITERATIONS; i++) { ACE_OS::sprintf (buffer[i], ACE_TEXT ("%d"), i + 1); ACE_Message_Block *entry = 0; ACE_NEW_RETURN (entry, ACE_Message_Block ((char *) buffer[i], sizeof buffer[i]), -1); if (queue.is_full ()) ACE_ERROR_RETURN ((LM_ERROR, ACE_TEXT ("QUEUE:: the message queue is full on iteration %u!\n"), i + 1), -1); if (queue.enqueue (entry) == -1) ACE_ERROR_RETURN ((LM_ERROR, ACE_TEXT ("QUEUE::enqueue\n")), -1); } ACE_DEBUG ((LM_DEBUG, ACE_TEXT ("\nForward Iterations\n"))); { ITERATOR iterator (queue); for (ACE_Message_Block *entry = 0; iterator.next (entry) != 0; iterator.advance ()) ACE_DEBUG ((LM_DEBUG, ACE_TEXT ("%s\n"), entry->base ())); } ACE_DEBUG ((LM_DEBUG, ACE_TEXT ("\nReverse Iterations\n"))); { REVERSE_ITERATOR iterator (queue); for (ACE_Message_Block *entry = 0; iterator.next (entry) != 0; iterator.advance ()) ACE_DEBUG ((LM_DEBUG, ACE_TEXT ("%s\n"), entry->base ())); } ACE_DEBUG ((LM_DEBUG, ACE_TEXT ("\nForward Iterations\n"))); { QUEUE::ITERATOR iterator (queue); for (ACE_Message_Block *entry = 0; iterator.next (entry) != 0; iterator.advance ()) ACE_DEBUG ((LM_DEBUG, ACE_TEXT ("%s\n"), entry->base ())); } ACE_DEBUG ((LM_DEBUG, ACE_TEXT ("\nReverse Iterations\n"))); { QUEUE::REVERSE_ITERATOR iterator (queue); for (ACE_Message_Block *entry = 0; iterator.next (entry) != 0; iterator.advance ()) ACE_DEBUG ((LM_DEBUG, ACE_TEXT ("%s\n"), entry->base ())); } return 0; }
static void test_map_manager (size_t table_size, size_t iterations, int test_iterators) { MAP_MANAGER map (table_size); TYPE i; TYPE j = 0; ssize_t k; for (i = 0; i < iterations; ++i) ACE_ASSERT (map.bind (i, i) != -1); if (test_iterators) { { i = 0; ITERATOR end = map.end (); for (ITERATOR iter = map.begin (); iter != end; ++iter) { MAP_ENTRY &entry = *iter; ACE_DEBUG ((LM_DEBUG, ACE_TEXT ("(%d|%d|%d)"), i, entry.ext_id_, entry.int_id_)); ++i; } ACE_DEBUG ((LM_DEBUG, ACE_TEXT ("\n"))); ACE_ASSERT (i == iterations); } { i = 0; MAP_ENTRY *entry = 0; for (ITERATOR iterator (map); iterator.next (entry) != 0; iterator.advance ()) { ACE_DEBUG ((LM_DEBUG, ACE_TEXT ("(%d|%d|%d)"), i, entry->ext_id_, entry->int_id_)); ++i; } ACE_DEBUG ((LM_DEBUG, ACE_TEXT ("\n"))); ACE_ASSERT (i == iterations); } { k = iterations - 1; REVERSE_ITERATOR rend = map.rend (); for (REVERSE_ITERATOR iter = map.rbegin (); iter != rend; ++iter) { MAP_ENTRY &entry = *iter; ACE_DEBUG ((LM_DEBUG, ACE_TEXT ("(%d|%d|%d)"), k, entry.ext_id_, entry.int_id_)); k--; } ACE_DEBUG ((LM_DEBUG, ACE_TEXT ("\n"))); ACE_ASSERT (k == -1); } { k = iterations - 1; MAP_ENTRY *entry = 0; for (REVERSE_ITERATOR iterator (map); iterator.next (entry) != 0; iterator.advance ()) { ACE_DEBUG ((LM_DEBUG, ACE_TEXT ("(%d|%d|%d)"), k, entry->ext_id_, entry->int_id_)); k--; } ACE_DEBUG ((LM_DEBUG, ACE_TEXT ("\n"))); ACE_ASSERT (k == -1); } { i = 0; MAP_MANAGER::iterator end = map.end (); for (MAP_MANAGER::iterator iter = map.begin (); iter != end; ++iter) { MAP_MANAGER::ENTRY &entry = *iter; ACE_DEBUG ((LM_DEBUG, ACE_TEXT ("(%d|%d|%d)"), i, entry.ext_id_, entry.int_id_)); ++i; } ACE_DEBUG ((LM_DEBUG, ACE_TEXT ("\n"))); ACE_ASSERT (i == iterations); } { i = 0; MAP_MANAGER::ENTRY *entry = 0; for (MAP_MANAGER::ITERATOR iterator (map); iterator.next (entry) != 0; iterator.advance ()) { ACE_DEBUG ((LM_DEBUG, ACE_TEXT ("(%d|%d|%d)"), i, entry->ext_id_, entry->int_id_)); ++i; } ACE_DEBUG ((LM_DEBUG, ACE_TEXT ("\n"))); ACE_ASSERT (i == iterations); } { k = iterations - 1; MAP_MANAGER::reverse_iterator rend = map.rend (); for (MAP_MANAGER::reverse_iterator iter = map.rbegin (); iter != rend; ++iter) { MAP_ENTRY &entry = *iter; ACE_DEBUG ((LM_DEBUG, ACE_TEXT ("(%d|%d|%d)"), k, entry.ext_id_, entry.int_id_)); k--; } ACE_DEBUG ((LM_DEBUG, ACE_TEXT ("\n"))); ACE_ASSERT (k == -1); } { k = iterations - 1; MAP_MANAGER::ENTRY *entry = 0; for (MAP_MANAGER::REVERSE_ITERATOR iterator (map); iterator.next (entry) != 0; iterator.advance ()) { ACE_DEBUG ((LM_DEBUG, ACE_TEXT ("(%d|%d|%d)"), k, entry->ext_id_, entry->int_id_)); k--; } ACE_DEBUG ((LM_DEBUG, ACE_TEXT ("\n"))); ACE_ASSERT (k == -1); } } for (i = 0; i < iterations; ++i) { ACE_ASSERT (map.find (i, j) != -1); ACE_ASSERT (i == j); } size_t remaining_entries = iterations; for (i = 0; i < iterations; ++i) { ACE_ASSERT (map.unbind (i) != -1); --remaining_entries; ACE_ASSERT (map.current_size () == remaining_entries); } // // This is extra for the map manager. // for (i = 0; i < iterations; ++i) ACE_ASSERT (map.bind (i, i) != -1); // Unbind in one swoop. map.unbind_all (); ACE_ASSERT (map.current_size () == 0); for (i = 0; i < iterations; ++i) ACE_ASSERT (map.bind (i, i) != -1); // Unbind one at a time. MAP_MANAGER::iterator end = map.end (); while (1) { MAP_MANAGER::iterator iter = map.begin (); if (iter == end) break; ACE_ASSERT (map.unbind ((*iter).ext_id_) != -1); } ACE_ASSERT (map.current_size () == 0); }