53 "<%s, %s, %s, %s>" :
"<%s, %s, %s>" :
"<%s, %s>" :
"<%s>";
56 "istream_iterator%{@}",
63template <
class T,
class CharT,
class Traits,
class Dist>
68template <
class T,
class CharT,
class Traits,
class Dist>
71 typedef std::istream_iterator<T, CharT, Traits, Dist>
Iterator;
72 typedef std::basic_stringstream<CharT, Traits> StringStream;
84 "%{$ITER}::istream_iterator() == %{$ITER}::istream_iterator()");
91 typedef std::istreambuf_iterator<CharT, Traits> StreambufIterator;
92 typedef std::num_get<CharT, StreambufIterator>
NumGet;
94 if (
false == std::has_facet<NumGet>(strm1.getloc ())) {
95 const std::locale
loc (std::locale::classic (),
new NumGet);
111 "%{$ITER}::istream_iterator(basic_istream&) != "
115 "%{$ITER}::istream_iterator(basic_istream&) == "
116 "%{$ITER}::istream_iterator(basic_istream&)");
119 strm2.imbue (strm1.getloc ());
126 "%{$ITER}::istream_iterator(basic_istream&) != "
131 "%{$ITER}::istream_iterator(basic_istream& [@%#p]) != "
132 "%{$ITER}::istream_iterator(basic_istream& [@%#p])",
139template <
class T,
class CharT,
class Traits,
class Dist>
147 typedef std::istream_iterator<T, CharT, Traits, Dist>
Iterator;
148 typedef std::basic_stringstream<CharT, Traits> StringStream;
154 typedef std::istreambuf_iterator<CharT, Traits> StreambufIterator;
155 typedef std::num_get<CharT, StreambufIterator>
NumGet;
157 if (
false == std::has_facet<NumGet>(
strm.getloc ())) {
158 const std::locale
loc (std::locale::classic (),
new NumGet);
170 "line %d: %{$ITER}::operator() != %{$ITER}()", __LINE__);
172 if (0 == (
strm.rdstate () & (
strm.badbit |
strm.failbit))) {
179 "line %d: %{$ITER}::operator*() == %{@}, got %{@}",
184 "line %d: %{$ITER}::operator*(), rdstate() == %{Is}, got %{Is}",
185 __LINE__, state,
strm.rdstate ());
191template <
class T,
class CharT,
class Traits,
class Dist>
195 const int Eof = std::ios::eofbit;
196 const int Fail = std::ios::failbit;
197 const int Good = std::ios::goodbit;
200#define TEST(input, expect, is_eos, state) \
201 test_ops (params, __LINE__, input, T (expect), is_eos, state)
203 volatile T one =
T (1);
207 const bool is_char =
sizeof (
T) ==
sizeof (
char);
262 TEST (
" -99", -99,
false,
Eof);
274 TEST (
"-.3", -0.3,
false,
Eof);
275 TEST (
" +.4", 0.4,
false,
Eof);
276 TEST (
" -.5", -0.5,
false,
Eof);
279 TEST (
"1.234", 1.234,
false,
Eof);
280 TEST (
"+1.235", +1.235,
false,
Eof);
281 TEST (
"-1.236", -1.236,
false,
Eof);
282 TEST (
" +1.237", +1.237,
false,
Eof);
283 TEST (
" -1.238", -1.238,
false,
Eof);
284 TEST (
"1.239e1", 1.239e1,
false,
Eof);
285 TEST (
"1.240e+1", 1.240e+1,
false,
Eof);
286 TEST (
"-1.241e+2", -1.241e+2,
false,
Eof);
287 TEST (
"-1.242e-3 ", -1.242e-3,
false,
Good);
302template <
class T,
class CharT,
class Traits,
class Dist>
310 const ParamNames names = { tname, tfmt, cname, trname, dname };
333template <
class CharT,
class Traits,
class Dist>
340#define TEST(T, fmt) \
342 do_test<T, CharT, Traits, Dist>(id, #T, fmt, cname, trname, dname)
358template <
class CharT,
class Traits>
361 do_test<CharT, Traits, short>(
id, cname, trname,
"short");
362 do_test<CharT, Traits, std::ptrdiff_t>(
id, cname, trname, 0);
373 rw_note (0, 0, __LINE__,
"tests of char specialization disabled");
376 rw_note (0, 0, __LINE__,
"tests of wchar_t specialization disabled");
379 rw_note (0, 0, __LINE__,
"tests of UserTraits specialization disabled");
381 typedef std::char_traits<char>
Traits;
384 for (
unsigned i = 0;
i !=
sizeof test_ids /
sizeof *test_ids; ++
i) {
386 const TestId id = test_ids [
i];
393 do_test<char, char, Traits, std::ptrdiff_t>(
id,
"char",
"%{hhi}",
397 do_test<char, char, UsrTraits, std::ptrdiff_t>(
id,
"char",
398 "%{hhi}", 0,
"UserTraits<char>",
"std::ptrdiff_t");
400 do_test<char, Traits>(
id, 0, 0);
403 do_test<char, UsrTraits>(
id,
"char",
"UserTraits<char>");
406#ifndef _RWSTD_NO_WCHAR_T
410 typedef std::char_traits<wchar_t> WTraits;
413 do_test<wchar_t, WTraits>(
id, 0, 0);
416 do_test<wchar_t, WUsrTraits>(
id,
"wchar_t",
417 "UserTraits<wchar_t>");
431int main (
int argc,
char *argv[])
433 return rw_test (argc, argv, __FILE__,
434 "lib.istream.iterator",
void fmtnam(const ParamNames &pn)
void test_ops(const TempParams< T, CharT, Traits, Dist > ¶ms, int line, const char *input, T expect, bool is_eos, int state)
#define TEST(input, expect, is_eos, state)
void do_test(int line, const char *src, std::size_t resoff, ForwardIterator dummy_iter, const T *, const char *predname)
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,...)
_TEST_EXPORT int rw_note(int, const char *, int, const char *,...)
_TEST_EXPORT int rw_assert(int, const char *, int, const char *,...)
_TEST_EXPORT int rw_fprintf(rw_file *, const char *,...)