37# pragma warning (disable: 4244)
44#ifndef _RWSTD_NO_REPLACEABLE_NEW_DELETE
73typedef std::deque<UserClass, std::allocator<UserClass> >
Deque;
80inline Deque::size_type
123template <
class Iterator>
129 const Deque::iterator &it ,
134 std::size_t *n_copy ,
135 std::size_t *n_asgn )
137 std::size_t throw_after = 0;
142 const std::size_t
size = deq.size ();
143 const Deque::const_iterator begin = deq.
begin ();
144 const Deque::const_iterator
end = deq.end ();
146#ifdef DEFINE_REPLACEMENT_NEW_AND_DELETE
165#ifndef _RWSTD_NO_EXCEPTIONS
171# ifdef DEFINE_REPLACEMENT_NEW_AND_DELETE
196 const Deque::size_type nelems (
n);
201 deq.assign (nelems, *
x);
204 deq.assign (first,
last);
211 const Deque::iterator erase_end (it +
n);
212 deq.erase (it, erase_end);
222 deq.insert (it, nelems, *
x);
225 deq.insert (it, first,
last);
235 "line %d: %s: size unexpectedly changed "
236 "from %zu to %zu after an exception",
237 __LINE__, fcall,
size, deq.size ());
240 "line %d: %s: begin() unexpectedly "
241 "changed after an exception by %td",
242 __LINE__, fcall, deq.begin () - begin);
245 "line %d: %s: end() unexpectedly "
246 "changed after an exception by %td",
247 __LINE__, fcall, deq.end () -
end);
253 "line %d: %s: leaked %zu objects after an exception",
254 __LINE__, fcall, x_count - (deq.size () -
size));
271 "line %d: %s: leaked %zu objects "
272 "after a successful insertion",
273 __LINE__, fcall, x_count - (deq.size () -
size));
278#ifdef DEFINE_REPLACEMENT_NEW_AND_DELETE
303template <
class Iterator>
311 return 0 == nelems ? 0 :
off < seqlen -
off ?
off : seqlen -
off;
316 if (0 == nelems || 0 == inslen)
321 const std::size_t first =
off < seqlen -
off ?
off : seqlen -
off;
325 const std::size_t rest =
332template <
class Iterator>
335 const char *seq, std::size_t seqlen, std::size_t
off,
336 const char *ins, std::size_t inslen,
337 const char *
res, std::size_t reslen)
347 const Deque::iterator iter = deq.begin () +
off;
352 if (
off &&
off < deq.size ())
360 static const int cwidth =
sizeof (*xseq);
363 "%{?}begin(), %{:}%{?}end (), %{:}begin () + %zu%{;}%{;}"
364 "%{?}%d)%{:}%{?}\"%{X=*.*}\")%{:}%d, %d)%{;}%{;}",
365 cwidth,
int (seqlen), -1, xseq, 0 ==
off, seqlen ==
off,
366 off, nelems == -2, *ins, nelems == -1,
367 cwidth,
int (inslen), -1, xins, nelems, *ins);
375 deq, iter, nelems, xins, dummy, dummy,
379 else if (-1 == nelems) {
385 make_iter (xins, xins, xins + inslen, dummy);
388 make_iter (xins + inslen, xins, xins + inslen, dummy);
391 deq, iter, nelems, 0, first,
last,
401 deq, iter, nelems, xins, dummy, dummy,
408 "line %d: %s: size == %zu, got %zu\n",
409 __LINE__, funcall, reslen, deq.size ());
412 const Deque::const_iterator resbeg = deq.begin ();
413 const Deque::const_iterator resend = deq.end ();
415 for (Deque::const_iterator it = resbeg; it != resend; ++it) {
416 if ((*it).data_.val_ !=
UChar (
res [it - resbeg])) {
418 char*
const got =
new char [deq.size () + 1];
420 for (Deque::const_iterator
i = resbeg;
i != resend; ++
i) {
421 got [
i - resbeg] = char ((*i).data_.val_);
424 got [deq.size ()] =
'\0';
427 "line %d: %s: expected %s, got %s\n",
428 __LINE__, funcall,
res, got);
437 const std::size_t expect_copy = nelems < 0 ? inslen : nelems;
440 "line %d: %s: expected %zu invocations "
441 "of UserClass::UserClass(const UserClass&), got %d\n",
442 __LINE__, funcall, expect_copy, n_copy);
445 const std::size_t expect_asgn =
449 "line %d: %s: expected %zu invocations "
450 "of UserClass::operator=(const UserClass&), got %d\n",
451 __LINE__, funcall, expect_asgn, n_asgn);
465template <
class Iterator>
469 "std::deque<UserClass>::insert(iterator, %s, %s)", itname, itname);
472#define TEST(seq, off, ins, res) \
473 test_insert (__LINE__, -1, \
475 seq, sizeof seq - 1, \
477 ins, sizeof ins - 1, \
486 TEST (
"", +0,
"",
"");
487 TEST (
"", +0,
"a",
"a");
488 TEST (
"", +0,
"ab",
"ab");
489 TEST (
"", +0,
"abc",
"abc");
490 TEST (
"a", +0,
"",
"a");
491 TEST (
"b", +0,
"a",
"ab");
492 TEST (
"c", +0,
"ab",
"abc");
493 TEST (
"cd", +0,
"ab",
"abcd");
494 TEST (
"def", +0,
"abc",
"abcdef");
496 TEST (
"a", +1,
"",
"a");
497 TEST (
"a", +1,
"b",
"ab");
498 TEST (
"a", +1,
"bc",
"abc");
499 TEST (
"a", +1,
"bcd",
"abcd");
501 TEST (
"ab", +1,
"",
"ab");
502 TEST (
"ac", +1,
"b",
"abc");
503 TEST (
"acd", +1,
"b",
"abcd");
505 TEST (
"ab", +2,
"",
"ab");
506 TEST (
"ab", +2,
"c",
"abc");
507 TEST (
"ab", +2,
"cd",
"abcd");
509 TEST (
"abc", +2,
"",
"abc");
510 TEST (
"abd", +2,
"c",
"abcd");
511 TEST (
"abe", +2,
"cd",
"abcde");
512 TEST (
"abf", +2,
"cde",
"abcdef");
514 TEST (
"abc", +3,
"",
"abc");
515 TEST (
"abc", +3,
"d",
"abcd");
516 TEST (
"abc", +3,
"de",
"abcde");
517 TEST (
"abc", +3,
"def",
"abcdef");
520#define UPPER "ABCDEFGHIJKLMNOPQRSTUVWXYZ"
521#define LOWER "abcdefghijklmnopqrstuvwxyz"
554template <
class T,
class IntType>
556 const char* t_name,
const char* int_name)
559 "std::deque<%s>::insert(iterator, %s, %s)",
560 t_name, int_name, int_name);
564 typename std::deque<T>::iterator it =
d.begin ();
568 d.insert (it, IntType (1), IntType (0));
571 "deque<%s>::insert(begin(), %s = 1, %s = 0); size() == 1,"
572 " got %zu", t_name, int_name, int_name,
d.size ());
577 d.insert (it, IntType (3), IntType (2));
580 "deque<%s>::insert(begin() + 1, %s = 3, %s = 2); size() == 4,"
581 " got %zu", t_name, int_name, int_name,
d.size ());
586 d.insert (it, IntType (2), IntType (1));
589 "deque<%s>::insert(begin() + 1, %s = 2, %s = 1); size() == 6,"
590 " got %zu", t_name, int_name, int_name,
d.size ());
606#ifdef _RWSTD_LONG_LONG
611 tname,
"unsigned long long");
625 "std::deque<UserClass>::insert(iterator, const_reference)");
628#define TEST(seq, off, ins, res) do { \
629 const char insseq [] = { ins, '\0' }; \
630 test_insert (__LINE__, -1, \
632 seq, sizeof seq - 1, \
635 res, sizeof res - 1); \
644 TEST (
"", +0,
'a',
"a");
645 TEST (
"b", +0,
'a',
"ab");
646 TEST (
"bc", +0,
'a',
"abc");
647 TEST (
"bcd", +0,
'a',
"abcd");
648 TEST (
"bcde", +0,
'a',
"abcde");
650 TEST (
"a", +1,
'b',
"ab");
651 TEST (
"ac", +1,
'b',
"abc");
652 TEST (
"acd", +1,
'b',
"abcd");
653 TEST (
"acde", +1,
'b',
"abcde");
655 TEST (
"ab", +2,
'c',
"abc");
656 TEST (
"abd", +2,
'c',
"abcd");
657 TEST (
"abde", +2,
'c',
"abcde");
659 TEST (
"abc", +3,
'd',
"abcd");
660 TEST (
"abce", +3,
'd',
"abcde");
662 TEST (
"abcd", +4,
'e',
"abcde");
667#define A_to_E "ABCDE"
668#define A_to_F "ABCDEF"
669#define A_to_G "ABCDEFG"
670#define A_to_H "ABCDEFGH"
671#define A_to_I "ABCDEFGHI"
672#define A_to_J "ABCDEFGHIJ"
673#define A_to_K "ABCDEFGHIJK"
674#define A_to_L "ABCDEFGHIJKL"
675#define A_to_M "ABCDEFGHIJKLM"
676#define A_to_N "ABCDEFGHIJKLMN"
677#define A_to_O "ABCDEFGHIJKLMNO"
678#define A_to_P "ABCDEFGHIJKLMNOP"
679#define A_to_Q "ABCDEFGHIJKLMNOPQ"
680#define A_to_R "ABCDEFGHIJKLMNOPQR"
681#define A_to_S "ABCDEFGHIJKLMNOPQRS"
682#define A_to_T "ABCDEFGHIJKLMNOPQRST"
683#define A_to_U "ABCDEFGHIJKLMNOPQRSTU"
684#define A_to_V "ABCDEFGHIJKLMNOPQRSTUV"
685#define A_to_W "ABCDEFGHIJKLMNOPQRSTUVW"
686#define A_to_X "ABCDEFGHIJKLMNOPQRSTUVWX"
687#define A_to_Y "ABCDEFGHIJKLMNOPQRSTUVWXY"
688#define A_to_Z "ABCDEFGHIJKLMNOPQRSTUVWXYZ"
689#define B_to_Z "BCDEFGHIJKLMNOPQRSTUVWXYZ"
690#define C_to_Z "CDEFGHIJKLMNOPQRSTUVWXYZ"
691#define D_to_Z "DEFGHIJKLMNOPQRSTUVWXYZ"
692#define E_to_Z "EFGHIJKLMNOPQRSTUVWXYZ"
693#define F_to_Z "FGHIJKLMNOPQRSTUVWXYZ"
694#define G_to_Z "GHIJKLMNOPQRSTUVWXYZ"
695#define H_to_Z "HIJKLMNOPQRSTUVWXYZ"
696#define I_to_Z "IJKLMNOPQRSTUVWXYZ"
697#define J_to_Z "JKLMNOPQRSTUVWXYZ"
698#define K_to_Z "KLMNOPQRSTUVWXYZ"
699#define L_to_Z "LMNOPQRSTUVWXYZ"
700#define M_to_Z "MNOPQRSTUVWXYZ"
701#define N_to_Z "NOPQRSTUVWXYZ"
702#define O_to_Z "OPQRSTUVWXYZ"
703#define P_to_Z "PQRSTUVWXYZ"
704#define Q_to_Z "QRSTUVWXYZ"
705#define R_to_Z "RSTUVWXYZ"
706#define S_to_Z "STUVWXYZ"
707#define T_to_Z "TUVWXYZ"
708#define U_to_Z "UVWXYZ"
709#define V_to_Z "VWXYZ"
746 "std::deque<UserClass>::insert(iterator, size_type, "
750#define TEST(seq, off, n, ins, res) do { \
751 const char insseq [] = { ins, '\0' }; \
752 test_insert (__LINE__, -1, \
754 seq, sizeof seq - 1, \
757 res, sizeof res - 1); \
760 TEST (
"", +0, 0,
'a',
"");
761 TEST (
"", +0, 1,
'a',
"a");
762 TEST (
"", +0, 2,
'b',
"bb");
763 TEST (
"", +0, 3,
'c',
"ccc");
765 TEST (
"a", +0, 0,
'a',
"a");
766 TEST (
"b", +0, 1,
'a',
"ab");
767 TEST (
"b", +0, 2,
'a',
"aab");
768 TEST (
"b", +0, 3,
'a',
"aaab");
770 TEST (
"ab", +1, 0,
'b',
"ab");
771 TEST (
"ac", +1, 1,
'b',
"abc");
772 TEST (
"ac", +1, 2,
'b',
"abbc");
773 TEST (
"ac", +1, 3,
'b',
"abbbc");
775 TEST (
"abcd", +2, 0,
'c',
"abcd");
776 TEST (
"abde", +2, 1,
'c',
"abcde");
777 TEST (
"abde", +2, 2,
'c',
"abccde");
778 TEST (
"abde", +2, 3,
'c',
"abcccde");
784 "template <class InputIterator> std::deque<UserClass>::"
785 "insert(iterator, InputIterator, InputIterator)");
789 "InputIter<UserClass>");
792 "template <class T> "
793 "std::deque<UserClass>::insert(iterator, T, T) "
794 "[with T = InputIterator] test disabled.");
800 "template <class T> "
801 "std::deque<UserClass>::insert(iterator, T, T) "
802 "[with T = ForwardIterator] test disabled.");
808 "template <class T> "
809 "std::deque<UserClass>::insert(iterator, T, T) "
810 "[with T = BidirectionalIterator] test disabled.");
814 "RandomAccessIter<UserClass>");
817 "template <class T> "
818 "std::deque<UserClass>::insert(iterator, T, T) "
819 "[with T = RandomAccessIterator] test disabled.");
825 "template <class IntType> "
826 "std::deque<IntType>::"
827 "insert(iterator, IntType, IntType)");
839#ifdef _RWSTD_LONG_LONG
844 "unsigned long long");
850 "template <class T> "
851 "std::deque<UserClass>::insert(iterator, T, T) "
852 "[with T = IntegralType] tests disabled.");
858template <
class Iterator>
861 const char *seq, std::size_t seqlen,
862 const char *asn, std::size_t asnlen,
863 const char *
res, std::size_t reslen)
875 static const int cwidth =
sizeof (*xseq);
878 "deque(\"%{X=*.*}\").assign("
879 "%{?}\"%{X=*.*}\")%{:}%d, %d)%{;}",
880 cwidth, seqlen, -1, xseq,
882 cwidth, asnlen, -1, xasn,
890 const Deque::iterator dummy_it = deq.begin ();
898 make_iter (xasn, xasn, xasn + asnlen, dummy);
901 make_iter (xasn + asnlen, xasn, xasn + asnlen, dummy);
904 deq, dummy_it, nelems, 0, first,
last,
912 deq, dummy_it, nelems, xasn, dummy, dummy,
918 "line %d: %s: size == %zu, got %zu\n",
919 __LINE__, funcall, reslen, deq.size ());
922 const Deque::const_iterator resbeg = deq.begin ();
923 const Deque::const_iterator resend = deq.end ();
925 for (Deque::const_iterator it = resbeg; it != resend; ++it) {
927 const Deque::size_type
inx = it - resbeg;
933 char*
const got =
new char [deq.size () + 1];
935 for (Deque::const_iterator
i = resbeg;
i != resend; ++
i) {
937 const Deque::size_type inx_2 =
i - resbeg;
941 got [inx_2] = char ((*i).data_.val_);
944 got [deq.size ()] =
'\0';
947 "line %d: %s: expected %s, got %s\n",
948 __LINE__, funcall,
res, got);
957 asnlen = std::size_t (nelems);
968#ifndef _RWSTD_NO_EXT_DEQUE_ASSIGN_IN_PLACE
969 const std::size_t expect_copy = seqlen < asnlen ? asnlen - seqlen : 0;
970 const std::size_t expect_asgn = asnlen < seqlen ? asnlen : seqlen;
972 const std::size_t expect_copy = asnlen;
973 const std::size_t expect_asgn = 0;
977 "line %d: %s: expected %zu invocations "
978 "of UserClass::UserClass(const UserClass&), got %d\n",
979 __LINE__, funcall, expect_copy, n_copy);
982 "line %d: %s: expected %zu invocations "
983 "of UserClass::operator=(const UserClass&), got %d\n",
984 __LINE__, funcall, expect_asgn, n_asgn);
997template <
class Iterator>
1000 rw_info (0, 0, 0,
"std::deque<UserClass>::assign(%s, %s)", itname, itname);
1002 static const char seq[] =
"abcdefghijklmnopqrstuvwxyz";
1003 static const char asn[] =
"ABCDEFGHIJKLMNOPQRSTUVWXYZ";
1005 for (std::size_t
i = 0;
i !=
sizeof seq - 1; ++
i) {
1006 for (std::size_t
j = 0;
j !=
sizeof asn - 1; ++
j) {
1021 "std::deque<UserClass>::assign(size_type, const_reference)");
1023 static const char seq[] =
"abcdefghijklmnopqrstuvwxyz";
1024 static const char res[] =
"AAAAAAAAAAAAAAAAAAAAAAAAAA";
1026 for (std::size_t
i = 0;
i !=
sizeof seq - 1; ++
i) {
1027 for (std::size_t
j = 0;
j !=
sizeof seq - 1; ++
j) {
1040 "template <class InputIterator> "
1041 "std::deque<UserClass>::assign(InputIterator, InputIterator)");
1045 "InputIter<UserClass>");
1048 "template <class T> "
1049 "std::deque<UserClass>::assign(T, T) [with T = InputIterator]"
1056 "template <class T> "
1057 "std::deque<UserClass>::assign(T, T) "
1058 "[with T = ForwardIterator] test disabled.");
1064 "template <class T> "
1065 "std::deque<UserClass>::assign(T, T) "
1066 "[with T = BidirectionalIterator] test disabled.");
1070 "RandomAccessIter<UserClass>");
1073 "template <class T> "
1074 "std::deque<UserClass>::assign(T, T) "
1075 "[with T = RandomAccessIterator] test disabled.");
1081 const char *seq, std::size_t seqlen,
1082 std::size_t begoff, std::size_t
len,
1083 const char *
res, std::size_t reslen)
1088 const Deque::iterator
start = deq.begin () + begoff;
1094 std::size_t buflen = 0;
1096 static const int cwidth =
sizeof (*xseq);
1098 if (std::size_t (-1) ==
len) {
1101 "deque(\"%{X=*.*}\").erase(%{?}end()%{:}"
1102 "%{?}begin () + %zu%{:}begin ()%{;}%{;}",
1103 cwidth, seqlen, -1, xseq,
1104 begoff == deq.size (), begoff, begoff);
1115 "deque(\"%{X=*.*}\").erase(%{?}end()%{:}"
1116 "%{?}begin () + %zu%{:}begin ()%{;}%{;}"
1117 "%{?})%{:}%{?}, end ())%{:}%{?}, begin ())"
1118 "%{:}begin () + %zu%{;}%{;}%{;}",
1119 cwidth, seqlen, -1, xseq,
1120 begoff == deq.size (), begoff, begoff,
1121 std::size_t (-1) ==
len,
1123 end == deq.begin (),
1124 end - deq.begin ());
1135 "line %d: %s: size == %zu, got %zu\n",
1136 __LINE__, funcall, reslen, deq.size ());
1139 const Deque::const_iterator resbeg = deq.begin ();
1140 const Deque::const_iterator resend = deq.end ();
1142 for (Deque::const_iterator it = resbeg; it != resend; ++it) {
1143 if ((*it).data_.val_ !=
UChar (
res [it - resbeg])) {
1145 char*
const got =
new char [deq.size () + 1];
1147 for (Deque::const_iterator
i = resbeg;
i != resend; ++
i) {
1148 got [
i - resbeg] = char ((*i).data_.val_);
1151 got [deq.size ()] =
'\0';
1154 "line %d: %s: expected %s, got %s\n",
1155 __LINE__, funcall,
res, got);
1165 asnlen = std::size_t (nelems);
1176#ifndef _RWSTD_NO_EXT_DEQUE_ASSIGN_IN_PLACE
1177 const std::size_t expect_copy = seqlen < asnlen ? asnlen - seqlen : 0;
1178 const std::size_t expect_asgn = asnlen < seqlen ? asnlen : seqlen;
1180 const std::size_t expect_copy = asnlen;
1181 const std::size_t expect_asgn = 0;
1185 "line %d: %s: expected %zu invocations "
1186 "of UserClass::UserClass(const UserClass&), got %d\n",
1187 __LINE__, funcall, expect_copy, n_copy);
1190 "line %d: %s: expected %zu invocations "
1191 "of UserClass::operator=(const UserClass&), got %d\n",
1192 __LINE__, funcall, expect_asgn, n_asgn);
1195 std::free (funcall);
1207 rw_info (0, 0, 0,
"std::deque<UserClass>::erase(iterator)");
1210#define TEST(seq, off, res) do { \
1211 test_erase (__LINE__, \
1212 seq, sizeof seq - 1, \
1213 std::size_t (off), \
1215 res, sizeof res - 1); \
1220 TEST (
"ab", 0,
"b");
1221 TEST (
"ab", 1,
"a");
1223 TEST (
"abc", 0,
"bc");
1224 TEST (
"abc", 1,
"ac");
1225 TEST (
"abc", 2,
"ab");
1227 TEST (
"abcd", 0,
"bcd");
1228 TEST (
"abcd", 1,
"acd");
1229 TEST (
"abcd", 2,
"abd");
1230 TEST (
"abcd", 3,
"abc");
1232 TEST (
"abcde", 0,
"bcde");
1233 TEST (
"abcde", 1,
"acde");
1234 TEST (
"abcde", 2,
"abde");
1235 TEST (
"abcde", 3,
"abce");
1236 TEST (
"abcde", 4,
"abcd");
1238 TEST (
"abcdef", 0,
"bcdef");
1239 TEST (
"abcdef", 1,
"acdef");
1240 TEST (
"abcdef", 2,
"abdef");
1241 TEST (
"abcdef", 3,
"abcef");
1242 TEST (
"abcdef", 4,
"abcdf");
1243 TEST (
"abcdef", 5,
"abcde");
1245 TEST (
"abcdefg", 0,
"bcdefg");
1246 TEST (
"abcdefg", 1,
"acdefg");
1247 TEST (
"abcdefg", 2,
"abdefg");
1248 TEST (
"abcdefg", 3,
"abcefg");
1249 TEST (
"abcdefg", 4,
"abcdfg");
1250 TEST (
"abcdefg", 5,
"abcdeg");
1251 TEST (
"abcdefg", 6,
"abcdef");
1253 TEST (
"abcdefgh", 0,
"bcdefgh");
1254 TEST (
"abcdefgh", 1,
"acdefgh");
1255 TEST (
"abcdefgh", 2,
"abdefgh");
1256 TEST (
"abcdefgh", 3,
"abcefgh");
1257 TEST (
"abcdefgh", 4,
"abcdfgh");
1258 TEST (
"abcdefgh", 5,
"abcdegh");
1259 TEST (
"abcdefgh", 6,
"abcdefh");
1260 TEST (
"abcdefgh", 7,
"abcdefg");
1265 rw_info (0, 0, 0,
"std::deque<UserClass>::erase(iterator, iterator)");
1270#if !defined (_MSC_VER) || _MSC_VER > 1200
1287# define NO_DR_438_TEST "this version of MSVC is too broken"
1348 rw_info (0, 0, 0,
"resolution of DR 438");
1350#ifndef NO_DR_438_TEST
1352 std::deque<DR_438, std::allocator<DR_438> > dq;
1357 "deque::assign(InputIterator, InputIterator)"
1358 "[ with InputIterator = <integral type> ] unexpectedly "
1359 "used explicit argument conversion");
1361 dq.insert (dq.begin (), 1, 2);
1364 "deque::insert(iterator, InputIterator, InputIterator) "
1365 "[ with InputIterator = <integral type> ] unexpectedly "
1366 "used explicit argument conversion");
1369 rw_warning (0, 0, __LINE__,
"%s; skipping test", NO_DR_438_TEST);
1382 static const std::size_t caps[] = {
1386 for (std::size_t
i = 0;
i !=
sizeof caps /
sizeof *caps; ++
i) {
1391 "__rw::__rw_new_capacity<std::deque<UserClass> >(0) = %zu",
1392 _RW::__rw_new_capacity (0, (
Deque*)0));
1411 return rw_test (argc, argv, __FILE__,
1412 "lib.deque.modifiers",
1418 "|-no-InputIterator#"
1419 "|-no-ForwardIterator#"
1420 "|-no-BidirectionalIterator#"
1421 "|-no-RandomIterator#"
1422 "|-no-right-thing#",
void test_assign_range(const Iterator &it, const char *itname)
void test_insert_range(const Iterator &it, const char *itname)
void exception_loop(int line, MemberFunction mfun, const char *fcall, int exceptions, Deque &deq, const Deque::iterator &it, int n, const UserClass *x, const Iterator &first, const Iterator &last, std::size_t *n_copy, std::size_t *n_asgn)
int rw_opt_no_random_iterator
int run_test(int, char **)
std::size_t insert_assignments(Iterator it, int nelems, std::size_t off, std::size_t seqlen, std::size_t inslen)
int rw_opt_no_right_thing
std::deque< UserClass, std::allocator< UserClass > > Deque
Deque::size_type new_capacity
int rw_opt_no_bidirectional_iterator
bool is_bidirectional(std::input_iterator_tag)
int rw_opt_no_forward_iterator
void test_insert_int_range(const T &, const IntType &, const char *t_name, const char *int_name)
int rw_opt_no_input_iterator
#define TEST(seq, off, ins, res)
#define _RWSTD_ASSERT(ignore)
#define _RWSTD_CONST_CAST(T, x)
#define _RWSTD_SPECIALIZED_FUNCTION
#define _RWSTD_ITERATOR_CATEGORY(iterT, ignore)
std::deque< std::string, std::allocator< std::string > > Deque
_RWSTD_SPECIALIZED_FUNCTION Deque::size_type __rw_new_capacity< Deque >(Deque::size_type n, const Deque *)
T * make_iter(T *cur, const T *, const T *, T *)
_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,...)
_TEST_EXPORT int rw_info(int, const char *, int, const char *,...)
_TEST_EXPORT int rw_note(int, const char *, int, const char *,...)
_TEST_EXPORT int rw_assert(int, const char *, int, const char *,...)
_TEST_EXPORT rwt_free_store * rwt_get_free_store(rwt_free_store *)
_TEST_EXPORT int rw_asnprintf(char **pbuf, _RWSTD_SIZE_T *pbufsize, const char *fmt,...)
static ContIter begin(Cont &cont, ContIter *)
static _RWSTD_SIZE_T n_total_op_assign_
static UserClass from_char(char c)
static _RWSTD_SIZE_T copy_ctor_throw_count_
static _RWSTD_SIZE_T count_
static _RWSTD_SIZE_T op_assign_throw_count_
static _RWSTD_SIZE_T n_total_copy_ctor_
_RWSTD_SIZE_T * throw_at_calls_[2]
_RWSTD_SIZE_T new_calls_[2]