39static const char *xinit_begin;
43 typedef unsigned char UChar;
45 static const char *
cur = 0;
55template <
class T,
class U>
72 operator bool()
const {
return result_; }
81template <
class T,
class U>
87template <
class ForwardIterator,
class T>
95 static const char*
const itname =
type_name (dummy_iter, (
T*)0);
97 const std::size_t
nsrc = std::strlen (src);
99 if (std::size_t (-1) == resoff)
122 std::adjacent_find (first,
last, pred)
123 : std::adjacent_find (first,
last);
129 const std::size_t n_total_pred = predname ?
134 int success =
res.cur_ == first.cur_ + resoff;
136 "line %d: adjacent_find<%s>(it = \"%s\", ...)"
137 " == (it + %zu), got (it + %td)",
138 __LINE__, itname, src,
139 resoff,
res.cur_ - first.cur_);
148 std::size_t n_expect_pred = 0;
154 n_expect_pred = std::size_t (
res.cur_ - first.cur_) + 1;
155 const std::size_t
tmp = std::size_t (
last.cur_ - first.cur_) - 1;
156 if (
tmp < n_expect_pred)
160 success = std::size_t (n_expect_pred) == n_total_pred;
162 "line %d: adjacent_find<%s>(\"%s\", ...) "
163 "invoked %s %zu times, expected %td",
164 __LINE__, itname, src,
165 predname ? predname :
"operator==()",
166 n_total_pred, n_expect_pred);
171template <
class ForwardIterator,
class T>
174 static const char*
const itname =
type_name (dummy_iter, (
T*)0);
176 rw_info (0, 0, 0,
"std::adjacent_find (%s, %1$s%{?}, %s%{;})",
177 itname, 0 != predname, predname);
179#define TEST(src, off) \
180 do_test (__LINE__, src, std::size_t (off), dummy_iter, \
181 (UserClass*)0, predname)
194 TEST (
"abcdefg", -1);
195 TEST (
"abcdefgh", -1);
196 TEST (
"abcdefghi", -1);
197 TEST (
"abcdefghij", -1);
198 TEST (
"abcdefghijk", -1);
200 TEST (
"aabcdefghij", 0);
201 TEST (
"abbcdefghij", 1);
202 TEST (
"abccdefghij", 2);
203 TEST (
"abcddefghij", 3);
204 TEST (
"abcdeefghij", 4);
205 TEST (
"abcdeffghij", 5);
206 TEST (
"abcdefgghij", 6);
207 TEST (
"abcdefghhij", 7);
208 TEST (
"abcdefghiij", 8);
209 TEST (
"abcdefghijj", 9);
211 TEST (
"aaabcdefghi", 0);
212 TEST (
"abbbcdefghi", 1);
213 TEST (
"abcccdefghi", 2);
214 TEST (
"abcdddefghi", 3);
215 TEST (
"abcdeeefghi", 4);
216 TEST (
"abcdefffghi", 5);
217 TEST (
"abcdefggghi", 6);
218 TEST (
"abcdefghhhi", 7);
219 TEST (
"abcdefghiii", 8);
220 TEST (
"abcdefghijjj", 9);
232void test_adjacent_find (
const char* predname)
235 "template <class %s%{?}, class %s%{;}> "
236 "%1$s std::adjacent_find (%1$s, %1$s%{?}, %3$s%{;})",
237 "ForwardIterator", 0 != predname,
"BinaryPredicate",
241 rw_note (0, __FILE__, __LINE__,
"ForwardIterator test disabled");
248 rw_note (0, __FILE__, __LINE__,
"BidirectionalIterator test disabled");
255 rw_note (0, __FILE__, __LINE__,
"RandomAccessIterator test disabled");
265run_test (
int,
char*[])
267 test_adjacent_find (0);
270 rw_note (0, __FILE__, __LINE__,
"Predicate test disabled");
273 test_adjacent_find (
"EqualityPredicate<UserClass, UserClass>");
281int main (
int argc,
char *argv[])
283 return rw_test (argc, argv, __FILE__,
284 "lib.alg.adjacent.find",
286 "|-no-ForwardIterator#"
287 "|-no-BidirectionalIterator#"
288 "|-no-RandomAccessIterator#"
const MyBuffer< char > nsrc[]
void run_tests(ForwardIterator dummy_iter, const T *, const char *predname)
void do_test(int line, const char *src, std::size_t resoff, ForwardIterator dummy_iter, const T *, const char *predname)
#define _RWSTD_UNUSED(arg)
#define _RWSTD_ASSERT(ignore)
ConvertibleToBool(bool res)
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 *,...)
ConvertibleToBool operator()(const T &x, const U &y)
EqualityPredicate(T *, U *)
static std::size_t funcalls_
static _RWSTD_SIZE_T n_total_op_eq_