43#define MAX_LOOPS 100000
53#if !defined (_RWSTD_OS_HP_UX) || defined (_ILP32)
112#ifndef _RWSTD_NO_WCHAR_T
123template <
class charT,
class Traits>
124struct MyIos: std::basic_ios<charT, Traits>
132template <
class charT,
class Traits>
133struct MyStreambuf: std::basic_streambuf<charT, Traits>
135 typedef std::basic_streambuf<charT, Traits>
Base;
148 this->setp (pbeg, pbeg +
n);
164 std::basic_string<char, std::char_traits<char> >
str;
167#ifndef _RWSTD_NO_WCHAR_T
170 std::basic_string<wchar_t, std::char_traits<wchar_t> > wstr;
174 std::ios_base::iostate state = std::ios_base::goodbit;
176#ifndef _RWSTD_NO_LONG_DOUBLE
177 long double ldbl = 0.;
190 const std::locale
loc =
192 : std::locale (
data.locale_name_);
197 const std::money_get<char> &ng =
198 std::use_facet<std::money_get<char> >(
loc);
204 ng.get (std::istreambuf_iterator<char>(&nsb),
205 std::istreambuf_iterator<char>(),
206 data.intl_, nio, state, ldbl);
207 RW_ASSERT (! (state & std::ios_base::failbit));
211 ng.get (std::istreambuf_iterator<char>(&nsb),
212 std::istreambuf_iterator<char>(),
214 RW_ASSERT (! (state & std::ios_base::failbit));
216 data.ncs_digits_.c_str ()));
225#ifndef _RWSTD_NO_WCHAR_T
227 const std::money_get<wchar_t> &wg =
228 std::use_facet<std::money_get<wchar_t> >(
loc);
234 wg.get (std::istreambuf_iterator<wchar_t>(&wsb),
235 std::istreambuf_iterator<wchar_t>(),
236 data.intl_, wio, state, ldbl);
237 RW_ASSERT (! (state & std::ios_base::failbit));
241 wg.get (std::istreambuf_iterator<wchar_t>(&wsb),
242 std::istreambuf_iterator<wchar_t>(),
243 data.intl_, wio, state, wstr);
244 RW_ASSERT (! (state & std::ios_base::failbit));
246 data.wcs_digits_.c_str ()));
268#ifndef _RWSTD_NO_WCHAR_T
292 const std::locale
loc (
data.locale_name_);
299 long double units = 1.f +
inx;
303 units += (units * 3.14159);
305 units -= (units * 2.71828);
309 const std::money_put<char> &np =
310 std::use_facet<std::money_put<char> >(
loc);
312 const std::money_get<char> &ng =
313 std::use_facet<std::money_get<char> >(
loc);
315 std::ios::iostate state = std::ios::goodbit;
321 *np.put (std::ostreambuf_iterator<char>(&nsb),
322 data.intl_, nio,
' ', units) =
'\0';
324 rw_fatal (!nio.fail (), __FILE__, __LINE__,
325 "money_put<char>::put(...) "
326 "failed for locale(%#s)",
data.locale_name_);
330 ng.get (std::istreambuf_iterator<char>(&nsb),
331 std::istreambuf_iterator<char>(),
332 data.intl_, nio, state,
data.units_);
336 ng.get (std::istreambuf_iterator<char>(&nsb),
337 std::istreambuf_iterator<char>(),
338 data.intl_, nio, state,
data.ncs_digits_);
340 if (state & std::ios_base::failbit)
344#ifndef _RWSTD_NO_WCHAR_T
348 const std::money_put<wchar_t> &wp =
349 std::use_facet<std::money_put<wchar_t> >(
loc);
351 const std::money_get<wchar_t> &wg =
352 std::use_facet<std::money_get<wchar_t> >(
loc);
354 std::ios::iostate state = std::ios::goodbit;
360 *wp.put (std::ostreambuf_iterator<wchar_t>(&wsb),
361 data.intl_, wio,
L' ', units) =
L'\0';
363 rw_fatal (!nio.fail (), __FILE__, __LINE__,
364 "money_put<wchar_t>::put(...) "
365 "failed for locale(%#s)",
data.locale_name_);
369 wg.get (std::istreambuf_iterator<wchar_t>(&wsb),
370 std::istreambuf_iterator<wchar_t>(),
371 data.intl_, wio, state,
data.wcs_digits_);
373 if (state & std::ios_base::failbit)
387 "failed to create locale(%#s)",
name);
390 if (nlocales == maxinx || nlocales == std::size_t (
opt_nlocales))
395 rw_fatal (nlocales != 0, 0, __LINE__,
396 "failed to create one or more usable locales!");
399 "testing std::money_get<charT> with %d thread%{?}s%{;}, "
400 "%d iteration%{?}s%{;} each, in %zu locales { %{ .*A@} }",
403 nlocales,
int (nlocales),
"%#s", locales);
405 rw_info (0, 0, 0,
"exercising std::money_get<char>");
416 "rw_thread_pool(0, %d, 0, %{#f}, 0) failed",
419#ifndef _RWSTD_NO_WCHAR_T
421 rw_info (0, 0, 0,
"exercising std::money_get<wchar_t>");
432 "rw_thread_pool(0, %d, 0, %{#f}, 0) failed",
439 "exercising both std::money_get<char> "
440 "and std::money_get<wchar_t>");
451 "rw_thread_pool(0, %d, 0, %{#f}, 0) failed",
461int main (
int argc,
char *argv[])
463#ifdef _RWSTD_REENTRANT
473 return rw_test (argc, argv, __FILE__,
474 "lib.locale.money.get",
struct MyMoneyData my_money_data[MAX_THREADS]
void run_test(const ForwardIterator &dummy, T *, Predicate *pred)
#define _RWSTD_CONST_CAST(T, x)
const struct @19 locales[]
_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_fatal(int expr, const char *filename, int line, const char *fmtspec,...)
_TEST_EXPORT int rw_error(int, const char *, int, const char *,...)
_TEST_EXPORT int rw_warn(int, const char *, int, const char *,...)
_TEST_EXPORT int rw_opt_setlocales(int, char *[])
_TEST_EXPORT const char *const & rw_opt_locales
_TEST_EXPORT char * rw_locales(int=_UNUSED_CAT, const char *=0, bool=true)
_TEST_EXPORT int rw_thread_pool(rw_thread_t *, _RWSTD_SIZE_T, rw_thread_attr_t *, rw_thread_proc *, void **, _RWSTD_SIZE_T=0)
_TEST_EXPORT int rw_get_cpus()
_TEST_EXPORT int rw_thread_pool_timeout_expired()
_TEST_EXPORT int rw_strncmp(const char *, const char *, _RWSTD_SIZE_T=_RWSTD_SIZE_MAX, int=CMP_NULTERM)
_TEST_EXPORT int rw_ldblcmp(long double x, long double y)
const char * locale_name_
void pubsetg(charT *beg, charT *cur, charT *end)
std::basic_streambuf< charT, Traits > Base
void pubsetp(charT *beg, charT *cur, charT *end)
void pubsetp(charT *pbeg, std::streamsize n)
void pubsetg(const charT *gbeg, std::streamsize n)