92typedef std::codecvt<char, char, std::mbstate_t>
Codecvt;
117#ifndef _RWSTD_NO_WCHAR_T
121typedef std::codecvt<wchar_t, char, std::mbstate_t>
WCodecvt;
149test_has_facet (
void*)
151 const std::locale classic (std::locale::classic ());
164 const std::locale
loc (locale_name);
166 const bool byname =
loc != classic;
169#define HAS(Facet, opt) \
170 (0 <= opt_facets [opt_inx_ ## opt] ? std::has_facet<Facet>(loc) : true)
187#define HAS_BYNAME(Facet, opt) \
188 (0 <= opt_facets [opt_inx_ ## opt] ? \
189 byname == std::has_facet<Facet>(loc) : true)
200#ifndef _RWSTD_NO_WCHAR_T
236use_facet_loop (
const std::locale &classic,
int i)
238 static const std::locale::facet*
const dummy =
239 (std::locale::facet*)1;
247 const std::locale
loc (locale_name);
249 const bool byname =
loc != classic;
253#define USE(Facet, opt) \
254 (0 <= opt_facets [opt_inx_ ## opt] ? &std::use_facet<Facet>(loc) : dummy)
256 const std::locale::facet*
const bases[] = {
277 const std::locale::facet*
const derived[] = {
295 const std::size_t nbases =
sizeof bases /
sizeof *bases;
297 for (std::size_t
j = 0;
j != nbases; ++
j) {
306#define TEST_USE_FACET(Facet, opt) \
309 if (0 <= opt_facets [opt_inx_ ## opt]) \
310 std::use_facet<Facet>(loc); \
312 catch (...) { threw = true; } \
313 RW_ASSERT (threw || opt_facets [opt_inx_ ## opt] < 0)
327#ifndef _RWSTD_NO_WCHAR_T
330 const std::locale::facet*
const bases[] = {
350 const std::locale::facet*
const derived[] = {
368 const std::size_t nbases =
sizeof bases /
sizeof *bases;
370 for (std::size_t
j = 0;
j != nbases; ++
j) {
399test_use_facet (
void*)
401 const std::locale classic (std::locale::classic ());
409 use_facet_loop (classic,
i);
442 "std::codecvt tests disabled");
445 "std::collate tests disabled");
448 "std::ctype tests disabled");
451 "std::messages tests disabled");
454 "std::moneypunct<charT, false> tests disabled");
457 "std::moneypunct<charT, true> tests disabled");
460 "std::money_get tests disabled");
463 "std::money_put tests disabled");
466 "std::numpunct tests disabled");
469 "std::num_get tests disabled");
472 "std::num_put tests disabled");
475 "std::time_get tests disabled");
478 "std::time_put tests disabled");
481 "tests involving exceptions disabled");
490 bool has_classic =
false;
496 if (!has_classic && 0 == std::strcmp (
"C",
name))
511 "testing std::locale globals with %d thread%{?}s%{;}, "
512 "%d iteration%{?}s%{;} each, in %zu locales { %{ .*A@} }",
519 "template <class T> bool std::has_facet (const locale&)");
526 "rw_thread_pool(0, %d, 0, %{#f}, 0) failed",
530 rw_note (0, 0, 0,
"std::has_facet test disabled");
535 "template <class T> const T& std::use_facet (const locale&)");
537#ifdef _RWSTD_NO_DYNAMIC_CAST
542 "dynamic_cast not supported "
543 "(macro _RWSTD_NO_DYNAMIC_CAST is #defined), "
544 "disabling exceptions tests");
551#ifdef _RWSTD_NO_THREAD_SAFE_EXCEPTIONS
556 "exceptions not thread safe (macro "
557 "_RWSTD_NO_THREAD_SAFE_EXCEPTIONS is #defined), "
558 "disabling exceptions tests");
570 "rw_thread_pool(0, %d, 0, %{#f}, 0) failed",
574 rw_note (0, 0, 0,
"std::use_facet test disabled");
582int main (
int argc,
char *argv[])
584#ifdef _RWSTD_REENTRANT
594 return rw_test (argc, argv, __FILE__,
595 "lib.locale.global.templates",
609 "|-moneypunct_intl~ "
std::codecvt< char, char, std::mbstate_t > Codecvt
std::codecvt< wchar_t, char, std::mbstate_t > WCodecvt
std::codecvt_byname< wchar_t, char, std::mbstate_t > WCodecvtByname
std::codecvt_byname< char, char, std::mbstate_t > CodecvtByname
std::time_get_byname< char > TimeGetByname
std::numpunct_byname< char > NumpunctByname
std::ctype< wchar_t > WCtype
std::ctype_byname< wchar_t > WCtypeByname
#define HAS_BYNAME(Facet, opt)
std::numpunct< wchar_t > WNumpunct
std::money_put< wchar_t > WMoneyPut
std::codecvt< char, char, std::mbstate_t > Codecvt
std::time_get_byname< wchar_t > WTimeGetByname
std::num_get< char > NumGet
std::collate< char > Collate
std::codecvt< wchar_t, char, std::mbstate_t > WCodecvt
std::numpunct< char > Numpunct
std::moneypunct< wchar_t, true > WMoneypunct1
std::num_put< char > NumPut
std::moneypunct< char, true > Moneypunct1
std::codecvt_byname< wchar_t, char, std::mbstate_t > WCodecvtByname
std::collate_byname< wchar_t > WCollateByname
std::ctype_byname< char > CtypeByname
std::moneypunct_byname< char, false > Moneypunct0Byname
std::moneypunct_byname< char, true > Moneypunct1Byname
#define TEST_USE_FACET(Facet, opt)
int opt_facets[opt_nfacets]
std::num_put< wchar_t > WNumPut
std::codecvt_byname< char, char, std::mbstate_t > CodecvtByname
std::collate< wchar_t > WCollate
std::time_put< wchar_t > WTimePut
std::money_put< char > MoneyPut
std::money_get< char > MoneyGet
std::collate_byname< char > CollateByname
std::num_get< wchar_t > WNumGet
std::moneypunct_byname< wchar_t, false > WMoneypunct0Byname
std::time_get< wchar_t > WTimeGet
std::moneypunct< char, false > Moneypunct0
std::moneypunct_byname< wchar_t, true > WMoneypunct1Byname
std::moneypunct< wchar_t, false > WMoneypunct0
std::messages_byname< wchar_t > WMessagesByname
std::time_put_byname< char > TimePutByname
std::messages< wchar_t > WMessages
std::time_put_byname< wchar_t > WTimePutByname
std::money_get< wchar_t > WMoneyGet
std::messages_byname< char > MessagesByname
std::time_get< char > TimeGet
@ opt_inx_moneypunct_intl
std::messages< char > Messages
std::time_put< char > TimePut
std::numpunct_byname< wchar_t > WNumpunctByname
void run_test(const ForwardIterator &dummy, T *, Predicate *pred)
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_note(int, const char *, int, const char *,...)
_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()