46 operator T ()
const {
return val_; }
50template <
class T,
class CVQualifiedT>
55#ifndef _RWSTD_NO_EXT_CV_QUALIFIED_LIMITS
57 typedef std::numeric_limits<T> limits;
58 typedef std::numeric_limits<CVQualifiedT> cv_limits;
62# define TEST(member) \
63 rw_assert (limits::member == cv_limits::member, 0, __LINE__, \
64 "numeric_limits<%s>::%s == numeric_limits<%s %1$s>::%2$s", \
65 tname, #member, quals)
68 typedef std::numeric_limits<UserType<T> > limits;
69 typedef std::numeric_limits<CVQualifiedT> cv_limits;
74# define TEST(member) \
75 rw_assert (limits::member == cv_limits::member, 0, __LINE__, \
76 "numeric_limits<%s>::%s == numeric_limits<%s %1$s>::%2$s", \
77 tname, #member, quals)
80 TEST (is_specialized);
91 TEST (round_error ());
94 TEST (min_exponent10);
96 TEST (max_exponent10);
100 TEST (has_signaling_NaN);
102 TEST (has_denorm_loss);
106 if (limits::is_integer) {
108 TEST (signaling_NaN ());
111 const bool expect = limits::has_quiet_NaN;
113 rw_assert (expect == (limits::quiet_NaN () != cv_limits::quiet_NaN ()),
115 "numeric_limits<%s>::qNaN() %{?}!=%{:}==%{;} "
116 "numeric_limits<%s %1$s>::qNaN ()",
117 tname, expect, quals);
120 TEST (denorm_min ());
126 TEST (tinyness_before);
135 typedef const T const_T;
136 typedef volatile T volatile_T;
137 typedef const volatile T const_volatile_T;
140 "std::numeric_limits<T> with T = cv-qualified %s", tname);
144 test_limits ((
T*)0, (const_volatile_T*)0, tname,
"const volatile");
153#define TEST(T) test_limits ((T*)0, _RWSTD_STRSTR (T))
155#ifndef _RWSTD_NO_NATIVE_BOOL
161 TEST (
unsigned char);
164 TEST (
unsigned short);
170 TEST (
unsigned long);
172#ifdef _RWSTD_LONG_LONG
180#ifndef _RWSTD_NO_LONG_DOUBLE
184#ifndef _RWSTD_NO_NATIVE_WCHAR_T
193int main (
int argc,
char *argv[])
195 return rw_test (argc, argv, __FILE__,
196 "lib.numeric.limits",
198#ifdef _RWSTD_NO_EXT_CV_QUALIFIED_LIMITS
199 "testing the absence of "
201 "specializations on cv-qualifed types",
void test_limits(const volatile T *, CVQualifiedT *, const char *tname, const char *quals)
void run_test(const ForwardIterator &dummy, T *, Predicate *pred)
constexpr bool is_integer
Metafunction for determining if a type is, or is a reference to, a int64_t or toml::value<int64_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_assert(int, const char *, int, const char *,...)