Skip to content

Commit 2070152

Browse files
committed
String comparisons
Adding EXPECT_STREQ and EXPECT_STRNE. Note that the case insensitive versions are missing. There is no standard way to do it.
1 parent b1b383b commit 2070152

File tree

2 files changed

+43
-0
lines changed

2 files changed

+43
-0
lines changed

ftest.h

+27
Original file line numberDiff line numberDiff line change
@@ -31,6 +31,7 @@ DEALINGS IN THE SOFTWARE.
3131
#include <string>
3232
#include <vector>
3333
#include <iostream>
34+
#include <cstring>
3435

3536
namespace ftest
3637
{
@@ -163,6 +164,19 @@ class TestDriver
163164
std::vector<Test*> m_tests;
164165
};
165166

167+
inline bool string_eq(const char* a, const char* b)
168+
{
169+
// Two nulls are equal
170+
if (!a) return (!b);
171+
if (!b) return (!a);
172+
return !(std::strcmp(a, b));
173+
}
174+
175+
inline bool string_neq(const char* a, const char* b)
176+
{
177+
return !(string_eq(a, b));
178+
}
179+
166180
#ifdef F_TEST_NO_MAIN
167181
extern TestDriver testdriver;
168182
#else
@@ -201,13 +215,26 @@ do { \
201215
} \
202216
} while (false)
203217

218+
#define FTEST_EXPECT_BOOL_FUNC(a, b, bool_function) \
219+
do { \
220+
if (!(bool_function(a, b))) { \
221+
std::cout << __FILE__ << ":" << __LINE__ << ": Failure\n"; \
222+
status = ftest::Failed; \
223+
} \
224+
} while (false)
225+
226+
204227
#define EXPECT_EQ(a, b) FTEST_EXPECT_PREDICATE(a, b, ==)
205228
#define EXPECT_NE(a, b) FTEST_EXPECT_PREDICATE(a, b, !=)
206229
#define EXPECT_LT(a, b) FTEST_EXPECT_PREDICATE(a, b, <)
207230
#define EXPECT_LE(a, b) FTEST_EXPECT_PREDICATE(a, b, <=)
208231
#define EXPECT_GT(a, b) FTEST_EXPECT_PREDICATE(a, b, >)
209232
#define EXPECT_GE(a, b) FTEST_EXPECT_PREDICATE(a, b, >=)
210233

234+
// C-String asserts:
235+
#define EXPECT_STREQ(a, b) FTEST_EXPECT_BOOL_FUNC(a, b, ftest::string_eq)
236+
#define EXPECT_STRNE(a, b) FTEST_EXPECT_BOOL_FUNC(a, b, ftest::string_neq)
237+
211238
#define TEST(f_test_case_name, f_test_name) \
212239
class F_TEST_##f_test_case_name##f_test_name : public ftest::Test \
213240
{ \

tests/smoke.cpp

+16
Original file line numberDiff line numberDiff line change
@@ -81,3 +81,19 @@ TEST(Negative, expectnotequal)
8181
EXPECT_NE(1., 2.);
8282
EXPECT_NE(false, true);
8383
}
84+
85+
TEST(Strings, expectstrequal)
86+
{
87+
EXPECT_STREQ("abc", "abc");
88+
EXPECT_STREQ("", "");
89+
EXPECT_STREQ(NULL, NULL);
90+
}
91+
92+
TEST(Strings, expectstrnotequal)
93+
{
94+
EXPECT_STRNE("abc", "abcd");
95+
EXPECT_STRNE(NULL, "abcd");
96+
EXPECT_STRNE("abcd", NULL);
97+
EXPECT_STRNE("", NULL);
98+
EXPECT_STRNE(NULL, "");
99+
}

0 commit comments

Comments
 (0)