35#if defined (__IBMCPP__) && !defined (_RWSTD_NO_IMPLICIT_INCLUSION)
39# define _RWSTD_NO_IMPLICIT_INCLUSION
44# pragma warning (disable: 4800)
45# pragma warning (disable: 4805)
69#ifndef _RWSTD_NO_EXPLICIT_INSTANTIATION
73std::deque<int, std::allocator<int> >;
76std::list<int,std::allocator<int> >;
79std::map<int, int, std::less<int>, std::allocator<std::pair<const int, int> > >;
85std::basic_string<int, std::char_traits<int>, std::allocator<int> >;
88std::vector<int, std::allocator<int> >;
94#if !defined (__SUNPRO_CC) || __SUNPRO_CC > 0x530
95# define FUN(ignore, result, name, arg_list) do { \
96 result (*pf) arg_list = &name; \
102# define FUN(T, result, name, arg_list) do { \
103 typedef typename T::iterator Iterator; \
104 typedef typename T::const_iterator ConstIterator; \
105 const Iterator *pi = 0; \
106 const ConstIterator *pci = 0; \
113#define TEST_INEQUALITY(T) \
114 FUN (T, bool, std::rel_ops::operator!=, \
115 (const T::iterator&, const T::iterator&)); \
116 FUN (T, bool, std::rel_ops::operator!=, \
117 (const T::const_iterator&, const T::const_iterator&))
119#define TEST_OPERATORS(T) \
120 TEST_INEQUALITY (T); \
121 FUN (T, bool, std::rel_ops::operator>, \
122 (const T::iterator&, const T::iterator&)); \
123 FUN (T, bool, std::rel_ops::operator<=, \
124 (const T::iterator&, const T::iterator&)); \
125 FUN (T, bool, std::rel_ops::operator>=, \
126 (const T::iterator&, const T::iterator&)); \
127 FUN (T, bool, std::rel_ops::operator>, \
128 (const T::const_iterator&, const T::const_iterator&)); \
129 FUN (T, bool, std::rel_ops::operator<=, \
130 (const T::const_iterator&, const T::const_iterator&)); \
131 FUN (T, bool, std::rel_ops::operator>=, \
132 (const T::const_iterator&, const T::const_iterator&))
135template <
class Container,
class RandomAccessIterator>
142template <
class Container>
163 bool operator() (
const T&,
const T&)
const {
181 T operator() ()
const {
189 T operator() (
const T &
t)
const {
205template <
class T,
class InputIterator>
209 static int count = 0;
217 std::find (
I (),
I (),
T ());
220#ifndef _RWSTD_NO_CLASS_PARTIAL_SPEC
221 std::count (
I (),
I (),
T ());
225 std::count (
I (),
I (),
T (),
n);
229 std::mismatch (
I (),
I (),
I ());
231 std::equal (
I (),
I (),
I ());
234 std::includes (
I (),
I (),
I (),
I ());
237 std::lexicographical_compare (
I (),
I (),
I (),
I ());
243template <
class T,
class OutputIterator>
247 static int count = 0;
254 std::copy (
I (),
I (),
I ());
255 std::copy_backward (
I (),
I (),
I ());
260 std::replace_copy (
I (),
I (),
I (),
T (),
T ());
263 std::merge (
I (),
I (),
I (),
I (),
I ());
266 std::set_union (
I (),
I (),
I (),
I (),
I ());
269 std::set_intersection (
I (),
I (),
I (),
I (),
I ());
272 std::set_difference (
I (),
I (),
I (),
I (),
I ());
275 std::set_symmetric_difference (
I (),
I (),
I (),
I (),
I ());
276 std::set_symmetric_difference (
I (),
I (),
I (),
I (),
I (),
279 std::fill_n (
I (), 0,
T ());
283 std::remove_copy (
I (),
I (),
I (),
T ());
286 std::unique_copy (
I (),
I (),
I ());
289 std::reverse_copy (
I (),
I (),
I ());
291 std::rotate_copy (
I (),
I (),
I (),
I ());
296template <
class T,
class ForwardIterator>
300 static int count = 0;
307 std::find_end (
I (),
I (),
I (),
I ());
310 std::find_first_of (
I (),
I (),
I (),
I ());
313 std::adjacent_find (
I (),
I ());
316 std::search (
I (),
I (),
I (),
I ());
319 std::search_n (
I (),
I (), 0,
T ());
322 std::swap_ranges (
I (),
I (),
I ());
323 std::iter_swap (
I (),
I ());
325 std::replace (
I (),
I (),
T (),
T ());
328 std::equal_range (
I (),
I (),
T ());
331 std::binary_search (
I (),
I (),
T ());
334 std::min_element (
I (),
I ());
337 std::max_element (
I (),
I ());
340 std::fill (
I (),
I (),
T ());
344 std::remove (
I (),
I (),
T ());
347 std::unique (
I (),
I ());
350 std::reverse (
I (),
I ());
352 std::rotate (
I (),
I (),
I ());
357template <
class T,
class B
idirectionalIterator>
361 static int count = 0;
371 std::lower_bound (
I (),
I (),
T ());
374 std::upper_bound (
I (),
I (),
T ());
377 std::inplace_merge (
I (),
I (),
I ());
380 std::next_permutation (
I (),
I ());
383 std::prev_permutation (
I (),
I ());
389template <
class T,
class RandomAccessIterator>
393 static int count = 0;
400#if !defined _RWSTD_NO_DEBUG_ITER
406 std::random_shuffle (
I (),
I ());
407 std::random_shuffle (
I (),
I (), rndgen);
409 std::sort (
I (),
I ());
412 std::stable_sort (
I (),
I ());
415 std::partial_sort (
I (),
I (),
I ());
418 std::partial_sort_copy (
I (),
I (),
I (),
I ());
421 std::nth_element (
I (),
I (),
I ());
435 typedef std::map<int, int> Map;
436 typedef std::multimap<int, int> MultiMap;
448#if !defined (_MSC_VER) || _MSC_VER > 1300
455 std::basic_string<int>::iterator ());
458 std::vector<int>::iterator ());
463#define TEST_INPUT_ITERATORS(T) \
464 test_input_iterators (T (), std::deque<T>::iterator ()); \
465 test_input_iterators (T (), std::list<T>::iterator ()); \
466 test_input_iterators (std::map<T, T>::value_type (), \
467 std::map<T, T>::iterator ()); \
468 test_input_iterators (std::multimap<T, T>::value_type (), \
469 std::multimap<T, T>::iterator ()); \
470 test_input_iterators (T (), std::set<T>::iterator ()); \
471 test_input_iterators (T (), std::multiset<T, T>::iterator ()); \
472 test_input_iterators (T (), std::basic_string<T>::iterator ()); \
473 test_input_iterators (T (), std::vector<T>::iterator ())
475#define TEST_OUTPUT_ITERATORS(T) \
476 test_output_iterators (T (), std::deque<T>::iterator ()); \
477 test_output_iterators (T (), std::list<T>::iterator ()); \
478 test_output_iterators (T (), std::basic_string<T>::iterator ()); \
479 test_output_iterators (T (), std::vector<T>::iterator ())
481#define TEST_FORWARD_ITERATORS(T) \
482 test_forward_iterators (T (), std::deque<T>::iterator ()); \
483 test_forward_iterators (T (), std::list<T>::iterator ()); \
484 test_forward_iterators (T (), std::basic_string<T>::iterator ()); \
485 test_forward_iterators (T (), std::vector<T>::iterator ())
487#define TEST_BIDIRECTIONAL_ITERATORS(T) \
488 test_bidirectional_iterators (T (), std::deque<T>::iterator ()); \
489 test_bidirectional_iterators (T (), std::list<T>::iterator ()); \
490 test_bidirectional_iterators (T (), std::basic_string<T>::iterator ()); \
491 test_bidirectional_iterators (T (), std::vector<T>::iterator ())
493#define TEST_RANDOM_ACCESS_ITERATORS(T) \
494 test_random_access_iterators (T (), std::deque<T>::iterator ()); \
495 test_random_access_iterators (T (), std::basic_string<T>::iterator ()); \
496 test_random_access_iterators (T (), std::vector<T>::iterator ()); \
506#if !defined (__HP_aCC) || _RWSTD_HP_aCC_MINOR > 3600
522int main (
int argc,
char *argv[])
524 return rw_test (argc, argv, __FILE__,
526 "interactions with the rest of the implementation",
void count(T, T, const U &,...)
#define RandomAccessIterator
#define BidirectionalIterator
void test_output_iterators(T, OutputIterator)
#define TEST_INEQUALITY(T)
#define TEST_OUTPUT_ITERATORS(T)
#define TEST_FORWARD_ITERATORS(T)
#define TEST_OPERATORS(T)
void test_input_iterators(T, InputIterator)
void test_bidirectional_iterators(T, BidirectionalIterator)
void test_forward_iterators(T, ForwardIterator)
#define TEST_BIDIRECTIONAL_ITERATORS(T)
#define TEST_INPUT_ITERATORS(T)
void test_random_access_iterators(T, RandomAccessIterator)
#define TEST_RANDOM_ACCESS_ITERATORS(T)
void run_test(const ForwardIterator &dummy, T *, Predicate *pred)
_TEST_EXPORT int rw_test(int argc, char *argv[], const char *filename, const char *clause, const char *comment, int(*testfun)(int, char **), const char *optspec,...)
T operator()(const T &t, const T &) const
virtual conv_to_bool operator()(const UserClass &) const