34#ifndef _RWSTD_NO_EXT_CXX_0X
59 const char* trait,
const char* type)
62 "%s<%s> is %b, expected %b",
63 trait, type,
value, expect);
66#define _TEST(Trait,Type,Expect) \
67 test_trait (__LINE__, Trait<Type>::value, Expect, #Trait, #Type)
69#define TEST(Trait,Type,Expect) \
70 _TEST(Trait, Type, Expect); \
71 _TEST(Trait, std::add_const<Type>::type, Expect); \
72 _TEST(Trait, std::add_volatile<Type>::type, Expect); \
73 _TEST(Trait, std::add_cv<Type>::type, Expect)
80 TEST (std::is_arithmetic,
void,
false);
83 TEST (std::is_arithmetic,
bool,
true);
85 TEST (std::is_arithmetic,
char,
true);
86 TEST (std::is_arithmetic,
signed char,
true);
87 TEST (std::is_arithmetic,
unsigned char,
true);
89#ifndef _RWSTD_NO_WCHAR_T
90 TEST (std::is_arithmetic,
wchar_t,
true);
93 TEST (std::is_arithmetic,
short,
true);
94 TEST (std::is_arithmetic,
signed short,
true);
95 TEST (std::is_arithmetic,
unsigned short,
true);
97 TEST (std::is_arithmetic,
int,
true);
98 TEST (std::is_arithmetic,
signed int,
true);
99 TEST (std::is_arithmetic,
unsigned int,
true);
101 TEST (std::is_arithmetic,
long,
true);
102 TEST (std::is_arithmetic,
signed long,
true);
103 TEST (std::is_arithmetic,
unsigned long,
true);
105#ifndef _RWSTD_NO_LONG_LONG
106 TEST (std::is_arithmetic,
long long,
true);
107 TEST (std::is_arithmetic,
signed long long,
true);
108 TEST (std::is_arithmetic,
unsigned long long,
true);
112 TEST (std::is_arithmetic,
float,
true);
113 TEST (std::is_arithmetic,
double,
true);
114 TEST (std::is_arithmetic,
long double,
true);
117 TEST (std::is_arithmetic,
long [4],
false);
118 TEST (std::is_arithmetic,
float [3][3],
false);
119 TEST (std::is_arithmetic,
char* [4],
false);
124 TEST (std::is_arithmetic,
long*,
false);
125 TEST (std::is_arithmetic,
char**,
false);
128 TEST (std::is_arithmetic,
int&,
false);
133 TEST (std::is_arithmetic,
double&,
false);
136 TEST (std::is_arithmetic,
long (
class_t::*),
false);
140 TEST (std::is_arithmetic,
double (
class_t::*)(),
false);
141 TEST (std::is_arithmetic,
long (
class_t::*)(
float),
false);
142 TEST (std::is_arithmetic,
double (
struct_t::*)(),
false);
143 TEST (std::is_arithmetic,
long (
struct_t::*)(
float),
false);
156 TEST (std::is_arithmetic,
long (),
false);
157 TEST (std::is_arithmetic,
float (
char),
false);
160 TEST (std::is_arithmetic,
long (*)(),
false);
161 TEST (std::is_arithmetic,
double (*)(
int),
false);
164 TEST (std::is_arithmetic,
long (&)(),
false);
173 TEST (std::is_fundamental,
void,
true);
176 TEST (std::is_fundamental,
bool,
true);
178 TEST (std::is_fundamental,
char,
true);
179 TEST (std::is_fundamental,
signed char,
true);
180 TEST (std::is_fundamental,
unsigned char,
true);
182#ifndef _RWSTD_NO_WCHAR_T
183 TEST (std::is_fundamental,
wchar_t,
true);
186 TEST (std::is_fundamental,
short,
true);
187 TEST (std::is_fundamental,
signed short,
true);
188 TEST (std::is_fundamental,
unsigned short,
true);
190 TEST (std::is_fundamental,
int,
true);
191 TEST (std::is_fundamental,
signed int,
true);
192 TEST (std::is_fundamental,
unsigned int,
true);
194 TEST (std::is_fundamental,
long,
true);
195 TEST (std::is_fundamental,
signed long,
true);
196 TEST (std::is_fundamental,
unsigned long,
true);
198#ifndef _RWSTD_NO_LONG_LONG
199 TEST (std::is_fundamental,
long long,
true);
200 TEST (std::is_fundamental,
signed long long,
true);
201 TEST (std::is_fundamental,
unsigned long long,
true);
205 TEST (std::is_fundamental,
float,
true);
206 TEST (std::is_fundamental,
double,
true);
207 TEST (std::is_fundamental,
long double,
true);
210 TEST (std::is_fundamental,
long [4],
false);
211 TEST (std::is_fundamental,
float [3][3],
false);
212 TEST (std::is_fundamental,
char* [4],
false);
217 TEST (std::is_fundamental,
long*,
false);
218 TEST (std::is_fundamental,
char**,
false);
221 TEST (std::is_fundamental,
int&,
false);
226 TEST (std::is_fundamental,
double&,
false);
229 TEST (std::is_fundamental,
long (
class_t::*),
false);
233 TEST (std::is_fundamental,
double (
class_t::*)(),
false);
234 TEST (std::is_fundamental,
long (
class_t::*)(
float),
false);
235 TEST (std::is_fundamental,
double (
struct_t::*)(),
false);
236 TEST (std::is_fundamental,
long (
struct_t::*)(
float),
false);
249 TEST (std::is_fundamental,
long (),
false);
250 TEST (std::is_fundamental,
float (
char),
false);
253 TEST (std::is_fundamental,
long (*)(),
false);
254 TEST (std::is_fundamental,
double (*)(
int),
false);
257 TEST (std::is_fundamental,
long (&)(),
false);
269 TEST (std::is_object,
void,
false);
272 TEST (std::is_object,
bool,
true);
274 TEST (std::is_object,
char,
true);
275 TEST (std::is_object,
signed char,
true);
276 TEST (std::is_object,
unsigned char,
true);
278#ifndef _RWSTD_NO_WCHAR_T
279 TEST (std::is_object,
wchar_t,
true);
282 TEST (std::is_object,
short,
true);
283 TEST (std::is_object,
signed short,
true);
284 TEST (std::is_object,
unsigned short,
true);
286 TEST (std::is_object,
int,
true);
287 TEST (std::is_object,
signed int,
true);
288 TEST (std::is_object,
unsigned int,
true);
290 TEST (std::is_object,
long,
true);
291 TEST (std::is_object,
signed long,
true);
292 TEST (std::is_object,
unsigned long,
true);
294#ifndef _RWSTD_NO_LONG_LONG
295 TEST (std::is_object,
long long,
true);
296 TEST (std::is_object,
signed long long,
true);
297 TEST (std::is_object,
unsigned long long,
true);
301 TEST (std::is_object,
float,
true);
302 TEST (std::is_object,
double,
true);
303 TEST (std::is_object,
long double,
true);
306 TEST (std::is_object,
long [4],
true);
307 TEST (std::is_object,
float [3][3],
true);
308 TEST (std::is_object,
char* [4],
true);
313 TEST (std::is_object,
long*,
true);
314 TEST (std::is_object,
char**,
true);
317 TEST (std::is_object,
int&,
false);
322 TEST (std::is_object,
double&,
false);
329 TEST (std::is_object,
double (
class_t::*)(),
true);
330 TEST (std::is_object,
long (
class_t::*)(
float),
true);
345 TEST (std::is_object,
long (),
false);
346 TEST (std::is_object,
float (
char),
false);
349 TEST (std::is_object,
long (*)(),
true);
350 TEST (std::is_object,
double (*)(
int),
true);
353 TEST (std::is_object,
long (&)(),
false);
366 TEST (std::is_scalar,
void,
false);
369 TEST (std::is_scalar,
bool,
true);
371 TEST (std::is_scalar,
char,
true);
372 TEST (std::is_scalar,
signed char,
true);
373 TEST (std::is_scalar,
unsigned char,
true);
375#ifndef _RWSTD_NO_WCHAR_T
376 TEST (std::is_scalar,
wchar_t,
true);
379 TEST (std::is_scalar,
short,
true);
380 TEST (std::is_scalar,
signed short,
true);
381 TEST (std::is_scalar,
unsigned short,
true);
383 TEST (std::is_scalar,
int,
true);
384 TEST (std::is_scalar,
signed int,
true);
385 TEST (std::is_scalar,
unsigned int,
true);
387 TEST (std::is_scalar,
long,
true);
388 TEST (std::is_scalar,
signed long,
true);
389 TEST (std::is_scalar,
unsigned long,
true);
391#ifndef _RWSTD_NO_LONG_LONG
392 TEST (std::is_scalar,
long long,
true);
393 TEST (std::is_scalar,
signed long long,
true);
394 TEST (std::is_scalar,
unsigned long long,
true);
398 TEST (std::is_scalar,
float,
true);
399 TEST (std::is_scalar,
double,
true);
400 TEST (std::is_scalar,
long double,
true);
403 TEST (std::is_scalar,
long [4],
false);
404 TEST (std::is_scalar,
float [3][3],
false);
405 TEST (std::is_scalar,
char* [4],
false);
410 TEST (std::is_scalar,
long*,
true);
411 TEST (std::is_scalar,
char**,
true);
414 TEST (std::is_scalar,
int&,
false);
419 TEST (std::is_scalar,
double&,
false);
426 TEST (std::is_scalar,
double (
class_t::*)(),
true);
427 TEST (std::is_scalar,
long (
class_t::*)(
float),
true);
442 TEST (std::is_scalar,
long (),
false);
443 TEST (std::is_scalar,
float (
char),
false);
446 TEST (std::is_scalar,
long (*)(),
true);
447 TEST (std::is_scalar,
double (*)(
int),
true);
450 TEST (std::is_scalar,
long (&)(),
false);
463 TEST (std::is_compound,
void,
false);
466 TEST (std::is_compound,
bool,
false);
468 TEST (std::is_compound,
char,
false);
469 TEST (std::is_compound,
signed char,
false);
470 TEST (std::is_compound,
unsigned char,
false);
472#ifndef _RWSTD_NO_WCHAR_T
473 TEST (std::is_compound,
wchar_t,
false);
476 TEST (std::is_compound,
short,
false);
477 TEST (std::is_compound,
signed short,
false);
478 TEST (std::is_compound,
unsigned short,
false);
480 TEST (std::is_compound,
int,
false);
481 TEST (std::is_compound,
signed int,
false);
482 TEST (std::is_compound,
unsigned int,
false);
484 TEST (std::is_compound,
long,
false);
485 TEST (std::is_compound,
signed long,
false);
486 TEST (std::is_compound,
unsigned long,
false);
488#ifndef _RWSTD_NO_LONG_LONG
489 TEST (std::is_compound,
long long,
false);
490 TEST (std::is_compound,
signed long long,
false);
491 TEST (std::is_compound,
unsigned long long,
false);
495 TEST (std::is_compound,
float,
false);
496 TEST (std::is_compound,
double,
false);
497 TEST (std::is_compound,
long double,
false);
500 TEST (std::is_compound,
long [4],
true);
501 TEST (std::is_compound,
float [3][3],
true);
502 TEST (std::is_compound,
char* [4],
true);
507 TEST (std::is_compound,
void*,
true);
508 TEST (std::is_compound,
long*,
true);
509 TEST (std::is_compound,
char**,
true);
512 TEST (std::is_compound,
int&,
true);
517 TEST (std::is_compound,
double&,
true);
519#ifndef _RWSTD_NO_RVALUE_REFERENCES
521 TEST (std::is_compound,
double&&,
true);
529 TEST (std::is_compound,
double (
class_t::*)(),
true);
530 TEST (std::is_compound,
long (
class_t::*)(
float),
true);
532 TEST (std::is_compound,
long (
struct_t::*)(
float),
true);
545 TEST (std::is_compound,
long (),
true);
546 TEST (std::is_compound,
float (
char),
true);
549 TEST (std::is_compound,
long (*)(),
true);
550 TEST (std::is_compound,
double (*)(
int),
true);
553 TEST (std::is_compound,
long (&)(),
true);
556 typedef long (
class_t::*memfun_t_ptr)();
557 typedef std::remove_pointer<memfun_t_ptr>::type memfun_t;
558 typedef std::add_lvalue_reference<memfun_t>::type memfun_t_ref;
559 TEST (std::is_compound, memfun_t_ref,
true);
565 TEST (std::is_member_pointer,
void,
false);
568 TEST (std::is_member_pointer,
bool,
false);
570 TEST (std::is_member_pointer,
char,
false);
571 TEST (std::is_member_pointer,
signed char,
false);
572 TEST (std::is_member_pointer,
unsigned char,
false);
574#ifndef _RWSTD_NO_WCHAR_T
575 TEST (std::is_member_pointer,
wchar_t,
false);
578 TEST (std::is_member_pointer,
short,
false);
579 TEST (std::is_member_pointer,
signed short,
false);
580 TEST (std::is_member_pointer,
unsigned short,
false);
582 TEST (std::is_member_pointer,
int,
false);
583 TEST (std::is_member_pointer,
signed int,
false);
584 TEST (std::is_member_pointer,
unsigned int,
false);
586 TEST (std::is_member_pointer,
long,
false);
587 TEST (std::is_member_pointer,
signed long,
false);
588 TEST (std::is_member_pointer,
unsigned long,
false);
590#ifndef _RWSTD_NO_LONG_LONG
591 TEST (std::is_member_pointer,
long long,
false);
592 TEST (std::is_member_pointer,
signed long long,
false);
593 TEST (std::is_member_pointer,
unsigned long long,
false);
597 TEST (std::is_member_pointer,
float,
false);
598 TEST (std::is_member_pointer,
double,
false);
599 TEST (std::is_member_pointer,
long double,
false);
602 TEST (std::is_member_pointer,
long [4],
false);
603 TEST (std::is_member_pointer,
float [3][3],
false);
604 TEST (std::is_member_pointer,
char* [4],
false);
609 TEST (std::is_member_pointer,
long*,
false);
610 TEST (std::is_member_pointer,
char**,
false);
613 TEST (std::is_member_pointer,
int&,
false);
618 TEST (std::is_member_pointer,
double&,
false);
621 TEST (std::is_member_pointer,
long (
class_t::*),
true);
625 TEST (std::is_member_pointer,
double (
class_t::*)(),
true);
626 TEST (std::is_member_pointer,
long (
class_t::*)(
float),
true);
627 TEST (std::is_member_pointer,
double (
struct_t::*)(),
true);
628 TEST (std::is_member_pointer,
long (
struct_t::*)(
float),
true);
641 TEST (std::is_member_pointer,
long (),
false);
642 TEST (std::is_member_pointer,
float (
char),
false);
645 TEST (std::is_member_pointer,
long (*)(),
false);
646 TEST (std::is_member_pointer,
double (*)(
int),
false);
649 TEST (std::is_member_pointer,
long (&)(),
false);
678 "test disabled because _RWSTD_NO_EXT_CXX_0X is defined");
686int main (
int argc,
char*argv[])
688 return rw_test (argc, argv, __FILE__,
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_assert(int, const char *, int, const char *,...)
_TEST_EXPORT int rw_warn(int, const char *, int, const char *,...)