@@ -16,89 +16,126 @@ class TypeTraitsTest : public ::testing::Test
1616{
1717};
1818
19+ // Note: wrapper macros to ensure that GTest gets actual variables (required in order to print them)
20+
21+ #define ASSERT_HAS_SIZE (S, T ) \
22+ { \
23+ const bool hasSize = spsl::has_size<S, T>::value; \
24+ ASSERT_TRUE (hasSize); \
25+ }
26+
27+ #define ASSERT_HAS_NO_SIZE (S, T ) \
28+ { \
29+ const bool hasSize = spsl::has_size<S, T>::value; \
30+ ASSERT_FALSE (hasSize); \
31+ }
32+
33+ #define ASSERT_HAS_DATA (S, T ) \
34+ { \
35+ const bool hasData = spsl::has_data<S, T>::value; \
36+ ASSERT_TRUE (hasData); \
37+ }
38+
39+ #define ASSERT_HAS_NO_DATA (S, T ) \
40+ { \
41+ const bool hasData = spsl::has_data<S, T>::value; \
42+ ASSERT_FALSE (hasData); \
43+ }
44+
45+ #define ASSERT_IS_COMPAT (C, S, T ) \
46+ { \
47+ const bool isCompat = spsl::is_compatible_string<C, S, T>::value; \
48+ ASSERT_TRUE (isCompat); \
49+ }
50+
51+ #define ASSERT_IS_NOT_COMPAT (C, S, T ) \
52+ { \
53+ const bool isCompat = spsl::is_compatible_string<C, S, T>::value; \
54+ ASSERT_FALSE (isCompat); \
55+ }
56+
1957// test the has_size traits template
2058TEST (TypeTraitsTest, HasSize)
2159{
22- ASSERT_TRUE ((spsl::has_size< size_t , std::string>::value) );
23- ASSERT_TRUE ((spsl::has_size< size_t , std::wstring>::value) );
60+ ASSERT_HAS_SIZE ( size_t , std::string);
61+ ASSERT_HAS_SIZE ( size_t , std::wstring);
2462
25- ASSERT_TRUE ((spsl::has_size< size_t , std::vector<char >>::value) );
26- ASSERT_TRUE ((spsl::has_size< size_t , std::vector<wchar_t >>::value) );
63+ ASSERT_HAS_SIZE ( size_t , std::vector<char >);
64+ ASSERT_HAS_SIZE ( size_t , std::vector<wchar_t >);
2765
28- ASSERT_TRUE ((spsl::has_size< size_t , spsl::ArrayString<32 >>::value) );
29- ASSERT_TRUE ((spsl::has_size< size_t , spsl::ArrayStringW<32 >>::value) );
30- ASSERT_TRUE ((spsl::has_size< size_t , spsl::PasswordString>::value) );
31- ASSERT_TRUE ((spsl::has_size< size_t , spsl::PasswordStringW>::value) );
66+ ASSERT_HAS_SIZE ( size_t , spsl::ArrayString<32 >);
67+ ASSERT_HAS_SIZE ( size_t , spsl::ArrayStringW<32 >);
68+ ASSERT_HAS_SIZE ( size_t , spsl::PasswordString);
69+ ASSERT_HAS_SIZE ( size_t , spsl::PasswordStringW);
3270
3371#ifdef TEST_STRING_VIEW
34- ASSERT_TRUE ((spsl::has_size< size_t , std::experimental::string_view>::value) );
35- ASSERT_TRUE ((spsl::has_size< size_t , std::experimental::wstring_view>::value) );
72+ ASSERT_HAS_SIZE ( size_t , std::experimental::string_view);
73+ ASSERT_HAS_SIZE ( size_t , std::experimental::wstring_view);
3674#endif
3775
38- ASSERT_FALSE ((spsl::has_size< size_t , const char *>::value) );
39- ASSERT_FALSE ((spsl::has_size< size_t , std::exception>::value) );
76+ ASSERT_HAS_NO_SIZE ( size_t , const char *);
77+ ASSERT_HAS_NO_SIZE ( size_t , std::exception);
4078}
4179
4280// test the has_data traits template
4381TEST (TypeTraitsTest, HasData)
4482{
45- ASSERT_TRUE ((spsl::has_data< char , std::string>::value) );
46- ASSERT_TRUE ((spsl::has_data< wchar_t , std::wstring>::value) );
47- ASSERT_FALSE ((spsl::has_data< wchar_t , std::string>::value) );
48- ASSERT_FALSE ((spsl::has_data< char , std::wstring>::value) );
49-
50- ASSERT_TRUE ((spsl::has_data< char , std::vector<char >>::value) );
51- ASSERT_TRUE ((spsl::has_data< wchar_t , std::vector<wchar_t >>::value) );
52- ASSERT_FALSE ((spsl::has_data< wchar_t , std::vector<char >>::value) );
53- ASSERT_FALSE ((spsl::has_data< char , std::vector<wchar_t >>::value) );
54-
55- ASSERT_TRUE ((spsl::has_data< char , spsl::ArrayString<32 >>::value) );
56- ASSERT_TRUE ((spsl::has_data< wchar_t , spsl::ArrayStringW<32 >>::value) );
57- ASSERT_TRUE ((spsl::has_data< char , spsl::PasswordString>::value) );
58- ASSERT_TRUE ((spsl::has_data< wchar_t , spsl::PasswordStringW>::value) );
59- ASSERT_FALSE ((spsl::has_data< wchar_t , spsl::ArrayString<32 >>::value) );
60- ASSERT_FALSE ((spsl::has_data< char , spsl::ArrayStringW<32 >>::value) );
61- ASSERT_FALSE ((spsl::has_data< wchar_t , spsl::PasswordString>::value) );
62- ASSERT_FALSE ((spsl::has_data< char , spsl::PasswordStringW>::value) );
83+ ASSERT_HAS_DATA ( char , std::string);
84+ ASSERT_HAS_DATA ( wchar_t , std::wstring);
85+ ASSERT_HAS_NO_DATA ( wchar_t , std::string);
86+ ASSERT_HAS_NO_DATA ( char , std::wstring);
87+
88+ ASSERT_HAS_DATA ( char , std::vector<char >);
89+ ASSERT_HAS_DATA ( wchar_t , std::vector<wchar_t >);
90+ ASSERT_HAS_NO_DATA ( wchar_t , std::vector<char >);
91+ ASSERT_HAS_NO_DATA ( char , std::vector<wchar_t >);
92+
93+ ASSERT_HAS_DATA ( char , spsl::ArrayString<32 >);
94+ ASSERT_HAS_DATA ( wchar_t , spsl::ArrayStringW<32 >);
95+ ASSERT_HAS_DATA ( char , spsl::PasswordString);
96+ ASSERT_HAS_DATA ( wchar_t , spsl::PasswordStringW);
97+ ASSERT_HAS_NO_DATA ( wchar_t , spsl::ArrayString<32 >);
98+ ASSERT_HAS_NO_DATA ( char , spsl::ArrayStringW<32 >);
99+ ASSERT_HAS_NO_DATA ( wchar_t , spsl::PasswordString);
100+ ASSERT_HAS_NO_DATA ( char , spsl::PasswordStringW);
63101
64102#ifdef TEST_STRING_VIEW
65- ASSERT_TRUE ((spsl::has_data< char , std::experimental::string_view>::value) );
66- ASSERT_TRUE ((spsl::has_data< wchar_t , std::experimental::wstring_view>::value) );
103+ ASSERT_HAS_DATA ( char , std::experimental::string_view);
104+ ASSERT_HAS_DATA ( wchar_t , std::experimental::wstring_view);
67105#endif
68106
69- ASSERT_FALSE ((spsl::has_data< char , const char *>::value) );
70- ASSERT_FALSE ((spsl::has_data< char , std::exception>::value) );
107+ ASSERT_HAS_NO_DATA ( char , const char *);
108+ ASSERT_HAS_NO_DATA ( char , std::exception);
71109}
72110
73111// test the is_compatible_string traits template
74112TEST (TypeTraitsTest, IsCompatible)
75113{
76- ASSERT_TRUE ((spsl::is_compatible_string< char , size_t , std::string>::value) );
77- ASSERT_TRUE ((spsl::is_compatible_string< wchar_t , size_t , std::wstring>::value) );
78- ASSERT_FALSE ((spsl::is_compatible_string< wchar_t , size_t , std::string>::value) );
79- ASSERT_FALSE ((spsl::is_compatible_string< char , size_t , std::wstring>::value) );
80-
81- ASSERT_TRUE ((spsl::is_compatible_string< char , size_t , std::vector<char >>::value) );
82- ASSERT_TRUE ((spsl::is_compatible_string< wchar_t , size_t , std::vector<wchar_t >>::value) );
83- ASSERT_FALSE ((spsl::is_compatible_string< wchar_t , size_t , std::vector<char >>::value) );
84- ASSERT_FALSE ((spsl::is_compatible_string< char , size_t , std::vector<wchar_t >>::value) );
85-
86- ASSERT_TRUE ((spsl::is_compatible_string< char , size_t , spsl::ArrayString<32 >>::value) );
87- ASSERT_TRUE ((spsl::is_compatible_string< wchar_t , size_t , spsl::ArrayStringW<32 >>::value) );
88- ASSERT_TRUE ((spsl::is_compatible_string< char , size_t , spsl::PasswordString>::value) );
89- ASSERT_TRUE ((spsl::is_compatible_string< wchar_t , size_t , spsl::PasswordStringW>::value) );
90- ASSERT_FALSE ((spsl::is_compatible_string< wchar_t , size_t , spsl::ArrayString<32 >>::value) );
91- ASSERT_FALSE ((spsl::is_compatible_string< char , size_t , spsl::ArrayStringW<32 >>::value) );
92- ASSERT_FALSE ((spsl::is_compatible_string< wchar_t , size_t , spsl::PasswordString>::value) );
93- ASSERT_FALSE ((spsl::is_compatible_string< char , size_t , spsl::PasswordStringW>::value) );
114+ ASSERT_IS_COMPAT ( char , size_t , std::string);
115+ ASSERT_IS_COMPAT ( wchar_t , size_t , std::wstring);
116+ ASSERT_IS_NOT_COMPAT ( wchar_t , size_t , std::string);
117+ ASSERT_IS_NOT_COMPAT ( char , size_t , std::wstring);
118+
119+ ASSERT_IS_COMPAT ( char , size_t , std::vector<char >);
120+ ASSERT_IS_COMPAT ( wchar_t , size_t , std::vector<wchar_t >);
121+ ASSERT_IS_NOT_COMPAT ( wchar_t , size_t , std::vector<char >);
122+ ASSERT_IS_NOT_COMPAT ( char , size_t , std::vector<wchar_t >);
123+
124+ ASSERT_IS_COMPAT ( char , size_t , spsl::ArrayString<32 >);
125+ ASSERT_IS_COMPAT ( wchar_t , size_t , spsl::ArrayStringW<32 >);
126+ ASSERT_IS_COMPAT ( char , size_t , spsl::PasswordString);
127+ ASSERT_IS_COMPAT ( wchar_t , size_t , spsl::PasswordStringW);
128+ ASSERT_IS_NOT_COMPAT ( wchar_t , size_t , spsl::ArrayString<32 >);
129+ ASSERT_IS_NOT_COMPAT ( char , size_t , spsl::ArrayStringW<32 >);
130+ ASSERT_IS_NOT_COMPAT ( wchar_t , size_t , spsl::PasswordString);
131+ ASSERT_IS_NOT_COMPAT ( char , size_t , spsl::PasswordStringW);
94132
95133#ifdef TEST_STRING_VIEW
96- ASSERT_TRUE ((spsl::is_compatible_string<char , size_t , std::experimental::string_view>::value));
97- ASSERT_TRUE (
98- (spsl::is_compatible_string<wchar_t , size_t , std::experimental::wstring_view>::value));
134+ ASSERT_IS_COMPAT (char , size_t , std::experimental::string_view);
135+ ASSERT_IS_COMPAT (wchar_t , size_t , std::experimental::wstring_view);
99136#endif
100137
101- ASSERT_FALSE ((spsl::is_compatible_string< char , size_t , const char *>::value) );
102- ASSERT_FALSE ((spsl::is_compatible_string< char , size_t , std::exception>::value) );
103- ASSERT_FALSE ((spsl::is_compatible_string< char , size_t , std::vector<int >>::value) );
138+ ASSERT_IS_NOT_COMPAT ( char , size_t , const char *);
139+ ASSERT_IS_NOT_COMPAT ( char , size_t , std::exception);
140+ ASSERT_IS_NOT_COMPAT ( char , size_t , std::vector<int >);
104141}
0 commit comments