Upstream version 8.36.169.0
[platform/framework/web/crosswalk.git] / src / third_party / libc++ / trunk / test / language.support / support.limits / limits / numeric.limits.members / const_data_members.pass.cpp
1 //===----------------------------------------------------------------------===//
2 //
3 //                     The LLVM Compiler Infrastructure
4 //
5 // This file is dual licensed under the MIT and the University of Illinois Open
6 // Source Licenses. See LICENSE.TXT for details.
7 //
8 //===----------------------------------------------------------------------===//
9
10 #include <limits>
11
12 /*
13 <limits>:
14     numeric_limits
15         is_specialized
16         digits
17         digits10
18         max_digits10
19         is_signed
20         is_integer
21         is_exact
22         radix
23         min_exponent
24         min_exponent10
25         max_exponent
26         max_exponent10
27         has_infinity
28         has_quiet_NaN
29         has_signaling_NaN
30         has_denorm
31         has_denorm_loss
32         is_iec559
33         is_bounded
34         is_modulo
35         traps
36         tinyness_before
37         round_style
38 */
39
40 template <class _Tp>
41 void test(const _Tp &) {}
42
43 #define TEST_NUMERIC_LIMITS(type) \
44   test(std::numeric_limits<type>::is_specialized); \
45   test(std::numeric_limits<type>::digits); \
46   test(std::numeric_limits<type>::digits10); \
47   test(std::numeric_limits<type>::max_digits10); \
48   test(std::numeric_limits<type>::is_signed); \
49   test(std::numeric_limits<type>::is_integer); \
50   test(std::numeric_limits<type>::is_exact); \
51   test(std::numeric_limits<type>::radix); \
52   test(std::numeric_limits<type>::min_exponent); \
53   test(std::numeric_limits<type>::min_exponent10); \
54   test(std::numeric_limits<type>::max_exponent); \
55   test(std::numeric_limits<type>::max_exponent10); \
56   test(std::numeric_limits<type>::has_infinity); \
57   test(std::numeric_limits<type>::has_quiet_NaN); \
58   test(std::numeric_limits<type>::has_signaling_NaN); \
59   test(std::numeric_limits<type>::has_denorm); \
60   test(std::numeric_limits<type>::has_denorm_loss); \
61   test(std::numeric_limits<type>::is_iec559); \
62   test(std::numeric_limits<type>::is_bounded); \
63   test(std::numeric_limits<type>::is_modulo); \
64   test(std::numeric_limits<type>::traps); \
65   test(std::numeric_limits<type>::tinyness_before); \
66   test(std::numeric_limits<type>::round_style);
67
68 struct other {};
69
70 int main()
71 {
72     // bool
73     TEST_NUMERIC_LIMITS(bool)
74     TEST_NUMERIC_LIMITS(const bool)
75     TEST_NUMERIC_LIMITS(volatile bool)
76     TEST_NUMERIC_LIMITS(const volatile bool)
77
78     // char
79     TEST_NUMERIC_LIMITS(char)
80     TEST_NUMERIC_LIMITS(const char)
81     TEST_NUMERIC_LIMITS(volatile char)
82     TEST_NUMERIC_LIMITS(const volatile char)
83
84     // signed char
85     TEST_NUMERIC_LIMITS(signed char)
86     TEST_NUMERIC_LIMITS(const signed char)
87     TEST_NUMERIC_LIMITS(volatile signed char)
88     TEST_NUMERIC_LIMITS(const volatile signed char)
89
90     // unsigned char
91     TEST_NUMERIC_LIMITS(unsigned char)
92     TEST_NUMERIC_LIMITS(const unsigned char)
93     TEST_NUMERIC_LIMITS(volatile unsigned char)
94     TEST_NUMERIC_LIMITS(const volatile unsigned char)
95
96     // wchar_t
97     TEST_NUMERIC_LIMITS(wchar_t)
98     TEST_NUMERIC_LIMITS(const wchar_t)
99     TEST_NUMERIC_LIMITS(volatile wchar_t)
100     TEST_NUMERIC_LIMITS(const volatile wchar_t)
101
102     // char16_t
103     TEST_NUMERIC_LIMITS(char16_t)
104     TEST_NUMERIC_LIMITS(const char16_t)
105     TEST_NUMERIC_LIMITS(volatile char16_t)
106     TEST_NUMERIC_LIMITS(const volatile char16_t)
107
108     // char32_t
109     TEST_NUMERIC_LIMITS(char32_t)
110     TEST_NUMERIC_LIMITS(const char32_t)
111     TEST_NUMERIC_LIMITS(volatile char32_t)
112     TEST_NUMERIC_LIMITS(const volatile char32_t)
113
114     // short
115     TEST_NUMERIC_LIMITS(short)
116     TEST_NUMERIC_LIMITS(const short)
117     TEST_NUMERIC_LIMITS(volatile short)
118     TEST_NUMERIC_LIMITS(const volatile short)
119
120     // int
121     TEST_NUMERIC_LIMITS(int)
122     TEST_NUMERIC_LIMITS(const int)
123     TEST_NUMERIC_LIMITS(volatile int)
124     TEST_NUMERIC_LIMITS(const volatile int)
125
126     // long
127     TEST_NUMERIC_LIMITS(long)
128     TEST_NUMERIC_LIMITS(const long)
129     TEST_NUMERIC_LIMITS(volatile long)
130     TEST_NUMERIC_LIMITS(const volatile long)
131
132 #ifndef _LIBCPP_HAS_NO_INT128
133     TEST_NUMERIC_LIMITS(__int128_t)
134     TEST_NUMERIC_LIMITS(const __int128_t)
135     TEST_NUMERIC_LIMITS(volatile __int128_t)
136     TEST_NUMERIC_LIMITS(const volatile __int128_t)
137 #endif
138
139     // long long
140     TEST_NUMERIC_LIMITS(long long)
141     TEST_NUMERIC_LIMITS(const long long)
142     TEST_NUMERIC_LIMITS(volatile long long)
143     TEST_NUMERIC_LIMITS(const volatile long long)
144
145     // unsigned short
146     TEST_NUMERIC_LIMITS(unsigned short)
147     TEST_NUMERIC_LIMITS(const unsigned short)
148     TEST_NUMERIC_LIMITS(volatile unsigned short)
149     TEST_NUMERIC_LIMITS(const volatile unsigned short)
150
151     // unsigned int
152     TEST_NUMERIC_LIMITS(unsigned int)
153     TEST_NUMERIC_LIMITS(const unsigned int)
154     TEST_NUMERIC_LIMITS(volatile unsigned int)
155     TEST_NUMERIC_LIMITS(const volatile unsigned int)
156
157     // unsigned long
158     TEST_NUMERIC_LIMITS(unsigned long)
159     TEST_NUMERIC_LIMITS(const unsigned long)
160     TEST_NUMERIC_LIMITS(volatile unsigned long)
161     TEST_NUMERIC_LIMITS(const volatile unsigned long)
162
163     // unsigned long long
164     TEST_NUMERIC_LIMITS(unsigned long long)
165     TEST_NUMERIC_LIMITS(const unsigned long long)
166     TEST_NUMERIC_LIMITS(volatile unsigned long long)
167     TEST_NUMERIC_LIMITS(const volatile unsigned long long)
168
169 #ifndef _LIBCPP_HAS_NO_INT128
170     TEST_NUMERIC_LIMITS(__uint128_t)
171     TEST_NUMERIC_LIMITS(const __uint128_t)
172     TEST_NUMERIC_LIMITS(volatile __uint128_t)
173     TEST_NUMERIC_LIMITS(const volatile __uint128_t)
174 #endif
175
176     // float
177     TEST_NUMERIC_LIMITS(float)
178     TEST_NUMERIC_LIMITS(const float)
179     TEST_NUMERIC_LIMITS(volatile float)
180     TEST_NUMERIC_LIMITS(const volatile float)
181     
182     // double
183     TEST_NUMERIC_LIMITS(double)
184     TEST_NUMERIC_LIMITS(const double)
185     TEST_NUMERIC_LIMITS(volatile double)
186     TEST_NUMERIC_LIMITS(const volatile double)
187     
188     // long double
189     TEST_NUMERIC_LIMITS(long double)
190     TEST_NUMERIC_LIMITS(const long double)
191     TEST_NUMERIC_LIMITS(volatile long double)
192     TEST_NUMERIC_LIMITS(const volatile long double)
193
194     // other
195     TEST_NUMERIC_LIMITS(other)
196     TEST_NUMERIC_LIMITS(const other)
197     TEST_NUMERIC_LIMITS(volatile other)
198     TEST_NUMERIC_LIMITS(const volatile other)
199 }