|
6 | 6 | #include <map> |
7 | 7 | #include <unordered_map> |
8 | 8 |
|
| 9 | +namespace { |
| 10 | + |
9 | 11 | template<typename Ret, typename F> |
10 | 12 | void test_ret(F&&) |
11 | 13 | { |
@@ -61,11 +63,11 @@ void test_function_traits() |
61 | 63 | char i(float) const volatile { return 0; } |
62 | 64 | void operator()(int, char&) const volatile {} |
63 | 65 |
|
64 | | - float w; |
| 66 | + float w = 0; |
65 | 67 | const int x = 1; |
66 | | - volatile char y; |
| 68 | + volatile char y = 0; |
67 | 69 | const volatile bool z = true; |
68 | | - mutable volatile short zz; |
| 70 | + mutable volatile short zz = 0; |
69 | 71 | }; |
70 | 72 |
|
71 | 73 | test_ret<float>(&X::f); |
@@ -171,83 +173,107 @@ void test_is_callable() |
171 | 173 | static_assert(!is_callable<Y>::value, "Y is not callable"); |
172 | 174 | } |
173 | 175 |
|
174 | | -void test_type_traits() |
| 176 | +void test_concepts() |
175 | 177 | { |
176 | | - static_assert(v8pp::detail::is_string<std::string>::value, "std::string"); |
177 | | - static_assert(!v8pp::detail::is_sequence<std::string>::value, "std::string"); |
178 | | - static_assert(!v8pp::detail::is_mapping<std::string>::value, "std::string"); |
179 | | - static_assert(!v8pp::detail::is_array<std::string>::value, "std::string"); |
180 | | - |
181 | | - static_assert(v8pp::detail::is_string<std::string_view>::value, "std::string_view"); |
182 | | - static_assert(v8pp::detail::is_string<std::u16string>::value, "std::u16string"); |
183 | | - static_assert(v8pp::detail::is_string<std::u16string_view>::value, "std::u16string_view"); |
184 | | - static_assert(v8pp::detail::is_string<std::u32string>::value, "std::u32string"); |
185 | | - static_assert(v8pp::detail::is_string<std::u32string_view>::value, "std::u32string_view"); |
186 | | - static_assert(v8pp::detail::is_string<std::wstring>::value, "std::wstring"); |
187 | | - static_assert(v8pp::detail::is_string<std::wstring_view>::value, "std::wstring_view"); |
188 | | - static_assert(v8pp::detail::is_string<char const*>::value, "char const*"); |
189 | | - static_assert(v8pp::detail::is_string<char16_t const*>::value, "char16_t const*"); |
190 | | - static_assert(v8pp::detail::is_string<char32_t const*>::value, "char32_t const*"); |
191 | | - static_assert(v8pp::detail::is_string<wchar_t const*>::value, "wchar_t const*"); |
192 | | - |
193 | | - static_assert(!v8pp::detail::is_string<std::array<int, 1>>::value, "std::array"); |
194 | | - static_assert(!v8pp::detail::is_mapping<std::array<int, 1>>::value, "std::array"); |
195 | | - static_assert(!v8pp::detail::is_sequence<std::array<int, 1>>::value, "std::array"); |
196 | | - static_assert(!v8pp::detail::is_sequence<std::array<int, 1>>::value, "std::array"); |
197 | | - static_assert(v8pp::detail::is_array<std::array<int, 1>>::value, "std::array"); |
198 | | - static_assert(!v8pp::detail::has_reserve<std::array<int, 1>>::value, "std::array"); |
199 | | - |
200 | | - static_assert(!v8pp::detail::is_string<std::vector<char>>::value, "std::vector"); |
201 | | - static_assert(!v8pp::detail::is_mapping<std::vector<char>>::value, "std::vector"); |
202 | | - static_assert(v8pp::detail::is_sequence<std::vector<char>>::value, "std::vector"); |
203 | | - static_assert(!v8pp::detail::is_array<std::vector<char>>::value, "std::vector"); |
204 | | - static_assert(v8pp::detail::has_reserve<std::vector<char>>::value, "std::vector"); |
205 | | - |
206 | | - static_assert(!v8pp::detail::is_string<std::deque<int>>::value, "std::deque"); |
207 | | - static_assert(!v8pp::detail::is_mapping<std::deque<int>>::value, "std::deque"); |
208 | | - static_assert(v8pp::detail::is_sequence<std::deque<int>>::value, "std::deque"); |
209 | | - static_assert(!v8pp::detail::is_array<std::deque<int>>::value, "std::deque"); |
210 | | - static_assert(!v8pp::detail::has_reserve<std::deque<int>>::value, "std::deque"); |
211 | | - |
212 | | - static_assert(!v8pp::detail::is_string<std::list<bool>>::value, "std::list"); |
213 | | - static_assert(!v8pp::detail::is_mapping<std::list<bool>>::value, "std::list"); |
214 | | - static_assert(v8pp::detail::is_sequence<std::list<bool>>::value, "std::list"); |
215 | | - static_assert(!v8pp::detail::is_array<std::list<bool>>::value, "std::list"); |
216 | | - static_assert(!v8pp::detail::has_reserve<std::list<bool>>::value, "std::list"); |
217 | | - |
218 | | - static_assert(!v8pp::detail::is_string<std::tuple<int, char>>::value, "std::tuple"); |
219 | | - static_assert(!v8pp::detail::is_mapping<std::tuple<int, char>>::value, "std::tuple"); |
220 | | - static_assert(!v8pp::detail::is_sequence<std::tuple<int, char>>::value, "std::tuple"); |
221 | | - static_assert(!v8pp::detail::is_array<std::tuple<int, char>>::value, "std::tuple"); |
222 | | - static_assert(v8pp::detail::is_tuple<std::tuple<int, char>>::value, "std::tuple"); |
223 | | - |
224 | | - static_assert(!v8pp::detail::is_string<std::map<int, float>>::value, "std::map"); |
225 | | - static_assert(v8pp::detail::is_mapping<std::map<int, float>>::value, "std::map"); |
226 | | - static_assert(!v8pp::detail::is_sequence<std::map<int, char>>::value, "std::map"); |
227 | | - static_assert(!v8pp::detail::is_array<std::map<int, char>>::value, "std::map"); |
228 | | - |
229 | | - static_assert(!v8pp::detail::is_string<std::multimap<int, char>>::value, "std::multimap"); |
230 | | - static_assert(v8pp::detail::is_mapping<std::multimap<bool, std::string, std::greater<>>>::value, "std::multimap"); |
231 | | - static_assert(!v8pp::detail::is_sequence<std::multimap<int, char>>::value, "std::multimap"); |
232 | | - static_assert(!v8pp::detail::is_array<std::multimap<int, char>>::value, "std::multimap"); |
233 | | - |
234 | | - static_assert(!v8pp::detail::is_string<std::unordered_map<int, char>>::value, "std::unordered_map"); |
235 | | - static_assert(v8pp::detail::is_mapping<std::unordered_map<std::string, std::string>>::value, "std::unordered_map"); |
236 | | - static_assert(!v8pp::detail::is_sequence<std::unordered_map<int, char>>::value, "std::unordered_map"); |
237 | | - static_assert(!v8pp::detail::is_array<std::unordered_map<int, char>>::value, "std::unordered_map"); |
238 | | - |
239 | | - static_assert(!v8pp::detail::is_array<std::unordered_multimap<int, char>>::value, "std::unordered_multimap"); |
240 | | - static_assert(v8pp::detail::is_mapping<std::unordered_multimap<char, std::string>>::value, "std::unordered_multimap"); |
241 | | - static_assert(!v8pp::detail::is_sequence<std::unordered_multimap<int, char>>::value, "std::unordered_multimap"); |
242 | | - static_assert(!v8pp::detail::is_array<std::unordered_multimap<int, char>>::value, "std::unordered_multimap"); |
| 178 | + static_assert(v8pp::detail::String<std::string>, "std::string"); |
| 179 | + static_assert(!v8pp::detail::Sequence<std::string>, "std::string"); |
| 180 | + static_assert(!v8pp::detail::Mapping<std::string>, "std::string"); |
| 181 | + static_assert(!v8pp::detail::Array<std::string>, "std::string"); |
| 182 | + static_assert(v8pp::detail::HasReserve<std::string>, "std::string"); |
| 183 | + static_assert(!v8pp::detail::Tuple<std::string>, "std::string"); |
| 184 | + |
| 185 | + static_assert(v8pp::detail::String<std::string_view>, "std::string_view"); |
| 186 | + static_assert(v8pp::detail::String<std::u16string>, "std::u16string"); |
| 187 | + static_assert(v8pp::detail::String<std::u16string_view>, "std::u16string_view"); |
| 188 | + static_assert(v8pp::detail::String<std::u32string>, "std::u32string"); |
| 189 | + static_assert(v8pp::detail::String<std::u32string_view>, "std::u32string_view"); |
| 190 | + static_assert(v8pp::detail::String<std::wstring>, "std::wstring"); |
| 191 | + static_assert(v8pp::detail::String<std::wstring_view>, "std::wstring_view"); |
| 192 | + static_assert(v8pp::detail::String<char const*>, "char const*"); |
| 193 | + static_assert(v8pp::detail::String<char16_t const*>, "char16_t const*"); |
| 194 | + static_assert(v8pp::detail::String<char32_t const*>, "char32_t const*"); |
| 195 | + static_assert(v8pp::detail::String<wchar_t const*>, "wchar_t const*"); |
| 196 | + |
| 197 | + static_assert(!v8pp::detail::String<std::array<int, 1>>, "std::array"); |
| 198 | + static_assert(!v8pp::detail::Mapping<std::array<int, 1>>, "std::array"); |
| 199 | + static_assert(!v8pp::detail::Sequence<std::array<int, 1>>, "std::array"); |
| 200 | + static_assert(!v8pp::detail::Sequence<std::array<int, 1>>, "std::array"); |
| 201 | + static_assert(v8pp::detail::Array<std::array<int, 1>>, "std::array"); |
| 202 | + static_assert(!v8pp::detail::HasReserve<std::array<int, 1>>, "std::array"); |
| 203 | + static_assert(!v8pp::detail::Tuple<std::array<int, 1>>, "std::array"); |
| 204 | + |
| 205 | + static_assert(!v8pp::detail::String<std::vector<char>>, "std::vector"); |
| 206 | + static_assert(!v8pp::detail::Mapping<std::vector<char>>, "std::vector"); |
| 207 | + static_assert(v8pp::detail::Sequence<std::vector<char>>, "std::vector"); |
| 208 | + static_assert(!v8pp::detail::Array<std::vector<char>>, "std::vector"); |
| 209 | + static_assert(v8pp::detail::HasReserve<std::vector<char>>, "std::vector"); |
| 210 | + static_assert(!v8pp::detail::Tuple<std::vector<char>>, "std::vector"); |
| 211 | + |
| 212 | + static_assert(!v8pp::detail::String<std::deque<int>>, "std::deque"); |
| 213 | + static_assert(!v8pp::detail::Mapping<std::deque<int>>, "std::deque"); |
| 214 | + static_assert(v8pp::detail::Sequence<std::deque<int>>, "std::deque"); |
| 215 | + static_assert(!v8pp::detail::Array<std::deque<int>>, "std::deque"); |
| 216 | + static_assert(!v8pp::detail::HasReserve<std::deque<int>>, "std::deque"); |
| 217 | + static_assert(!v8pp::detail::Tuple<std::deque<int>>, "std::deque"); |
| 218 | + |
| 219 | + static_assert(!v8pp::detail::String<std::list<bool>>, "std::list"); |
| 220 | + static_assert(!v8pp::detail::Mapping<std::list<bool>>, "std::list"); |
| 221 | + static_assert(v8pp::detail::Sequence<std::list<bool>>, "std::list"); |
| 222 | + static_assert(!v8pp::detail::Array<std::list<bool>>, "std::list"); |
| 223 | + static_assert(!v8pp::detail::HasReserve<std::list<bool>>, "std::list"); |
| 224 | + static_assert(!v8pp::detail::Tuple<std::list<bool>>, "std::list"); |
| 225 | + |
| 226 | + static_assert(!v8pp::detail::String<std::map<int, float>>, "std::map"); |
| 227 | + static_assert(v8pp::detail::Mapping<std::map<int, float>>, "std::map"); |
| 228 | + static_assert(!v8pp::detail::Sequence<std::map<int, char>>, "std::map"); |
| 229 | + static_assert(!v8pp::detail::Array<std::map<int, char>>, "std::map"); |
| 230 | + static_assert(!v8pp::detail::HasReserve<std::map<int, char>>, "std::map"); |
| 231 | + static_assert(!v8pp::detail::Tuple<std::map<int, char>>, "std::map"); |
| 232 | + |
| 233 | + static_assert(!v8pp::detail::String<std::multimap<int, char>>, "std::multimap"); |
| 234 | + static_assert(v8pp::detail::Mapping<std::multimap<bool, std::string, std::greater<>>>, "std::multimap"); |
| 235 | + static_assert(!v8pp::detail::Sequence<std::multimap<int, char>>, "std::multimap"); |
| 236 | + static_assert(!v8pp::detail::Array<std::multimap<int, char>>, "std::multimap"); |
| 237 | + static_assert(!v8pp::detail::HasReserve<std::multimap<int, char>>, "std::multimap"); |
| 238 | + static_assert(!v8pp::detail::Tuple<std::multimap<int, char>>, "std::multimap"); |
| 239 | + |
| 240 | + static_assert(!v8pp::detail::String<std::unordered_map<int, char>>, "std::unordered_map"); |
| 241 | + static_assert(v8pp::detail::Mapping<std::unordered_map<std::string, std::string>>, "std::unordered_map"); |
| 242 | + static_assert(!v8pp::detail::Sequence<std::unordered_map<int, char>>, "std::unordered_map"); |
| 243 | + static_assert(!v8pp::detail::Array<std::unordered_map<int, char>>, "std::unordered_map"); |
| 244 | + static_assert(v8pp::detail::HasReserve<std::unordered_map<int, char>>, "std::unordered_map"); |
| 245 | + static_assert(!v8pp::detail::Tuple<std::unordered_map<int, char>>, "std::unordered_map"); |
| 246 | + |
| 247 | + static_assert(!v8pp::detail::String<std::unordered_multimap<int, char>>, "std::unordered_multimap"); |
| 248 | + static_assert(v8pp::detail::Mapping<std::unordered_multimap<char, std::string>>, "std::unordered_multimap"); |
| 249 | + static_assert(!v8pp::detail::Sequence<std::unordered_multimap<int, char>>, "std::unordered_multimap"); |
| 250 | + static_assert(!v8pp::detail::Array<std::unordered_multimap<int, char>>, "std::unordered_multimap"); |
| 251 | + static_assert(v8pp::detail::HasReserve<std::unordered_multimap<int, char>>, "std::unordered_multimap"); |
| 252 | + static_assert(!v8pp::detail::Tuple<std::unordered_multimap<int, char>>, "std::unordered_multimap"); |
| 253 | + |
| 254 | + static_assert(v8pp::detail::Tuple<std::tuple<int, char, float>>, "std::tuple"); |
| 255 | + static_assert(v8pp::detail::Tuple<std::tuple<std::tuple<bool>>>, "std::tuple"); |
| 256 | + static_assert(v8pp::detail::Tuple<std::pair<int, int>>, "std::tuple"); |
| 257 | + static_assert(!v8pp::detail::Tuple<std::array<int, 10>>, "std::tuple"); |
| 258 | + static_assert(!v8pp::detail::Tuple<int>, "std::tuple"); |
| 259 | + static_assert(!v8pp::detail::Tuple<int>, "std::tuple"); |
| 260 | + static_assert(!v8pp::detail::String<std::tuple<int, char>>, "std::tuple"); |
| 261 | + static_assert(!v8pp::detail::Mapping<std::tuple<int, char>>, "std::tuple"); |
| 262 | + static_assert(!v8pp::detail::Sequence<std::tuple<int, char>>, "std::tuple"); |
| 263 | + static_assert(!v8pp::detail::Array<std::tuple<int, char>>, "std::tuple"); |
| 264 | + static_assert(!v8pp::detail::HasReserve<std::tuple<int, char>>, "std::tuple"); |
243 | 265 |
|
244 | 266 | static_assert(!v8pp::detail::is_shared_ptr<int>::value, "int"); |
245 | 267 | static_assert(v8pp::detail::is_shared_ptr<std::shared_ptr<int>>::value, "int"); |
| 268 | + static_assert(v8pp::detail::is_shared_ptr<std::shared_ptr<std::vector<char>>>::value, "std::vector<char"); |
| 269 | + static_assert(!v8pp::detail::is_shared_ptr<std::string>::value, "std::string"); |
246 | 270 | } |
247 | 271 |
|
| 272 | +} // unnamed namespace |
| 273 | + |
248 | 274 | void test_utility() |
249 | 275 | { |
250 | | - test_type_traits(); |
| 276 | + test_concepts(); |
251 | 277 | test_function_traits(); |
252 | 278 | test_tuple_tail(); |
253 | 279 | test_is_callable(); |
|
0 commit comments