Skip to content

Commit c3625dc

Browse files
authored
Merge pull request cpputest#1773 from d06alexandrov/c_memcmp
Add C version of MEMCMP_EQUAL
2 parents 69944d8 + 4839a5a commit c3625dc

File tree

3 files changed

+51
-0
lines changed

3 files changed

+51
-0
lines changed

include/CppUTest/TestHarness_c.h

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -114,6 +114,12 @@
114114
#define CHECK_EQUAL_C_POINTER_TEXT(expected,actual,text) \
115115
CHECK_EQUAL_C_POINTER_LOCATION(expected,actual,text,__FILE__,__LINE__)
116116

117+
#define CHECK_EQUAL_C_MEMCMP(expected, actual, size) \
118+
CHECK_EQUAL_C_MEMCMP_LOCATION(expected, actual, size, NULLPTR, __FILE__, __LINE__)
119+
120+
#define CHECK_EQUAL_C_MEMCMP_TEXT(expected, actual, size, text) \
121+
CHECK_EQUAL_C_MEMCMP_LOCATION(expected, actual, size, text, __FILE__, __LINE__)
122+
117123
#define CHECK_EQUAL_C_BITS(expected, actual, mask) \
118124
CHECK_EQUAL_C_BITS_LOCATION(expected, actual, mask, sizeof(actual), NULL, __FILE__, __LINE__)
119125

@@ -205,6 +211,7 @@ extern void CHECK_EQUAL_C_UBYTE_LOCATION(unsigned char expected, unsigned char a
205211
extern void CHECK_EQUAL_C_SBYTE_LOCATION(signed char expected, signed char actual, const char* text, const char* fileName, size_t lineNumber);
206212
extern void CHECK_EQUAL_C_STRING_LOCATION(const char* expected, const char* actual, const char* text, const char* fileName, size_t lineNumber);
207213
extern void CHECK_EQUAL_C_POINTER_LOCATION(const void* expected, const void* actual, const char* text, const char* fileName, size_t lineNumber);
214+
extern void CHECK_EQUAL_C_MEMCMP_LOCATION(const void* expected, const void* actual, size_t size, const char* text, const char* fileName, size_t lineNumber);
208215
extern void CHECK_EQUAL_C_BITS_LOCATION(unsigned int expected, unsigned int actual, unsigned int mask, size_t size, const char* text, const char* fileName, size_t lineNumber);
209216
extern void FAIL_TEXT_C_LOCATION(const char* text, const char* fileName, size_t lineNumber);
210217
extern void FAIL_C_LOCATION(const char* fileName, size_t lineNumber);

src/CppUTest/TestHarness_c.cpp

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -99,6 +99,11 @@ void CHECK_EQUAL_C_POINTER_LOCATION(const void* expected, const void* actual, co
9999
UtestShell::getCurrent()->assertPointersEqual(expected, actual, text, fileName, lineNumber, UtestShell::getCurrentTestTerminatorWithoutExceptions());
100100
}
101101

102+
extern void CHECK_EQUAL_C_MEMCMP_LOCATION(const void* expected, const void* actual, size_t size, const char* text, const char* fileName, size_t lineNumber)
103+
{
104+
UtestShell::getCurrent()->assertBinaryEqual(expected, actual, size, text, fileName, lineNumber, UtestShell::getCurrentTestTerminatorWithoutExceptions());
105+
}
106+
102107
extern void CHECK_EQUAL_C_BITS_LOCATION(unsigned int expected, unsigned int actual, unsigned int mask, size_t size, const char* text, const char* fileName, size_t lineNumber)
103108
{
104109
UtestShell::getCurrent()->assertBitsEqual(expected, actual, mask, size, text, fileName, lineNumber, UtestShell::getCurrentTestTerminatorWithoutExceptions());

tests/CppUTest/TestHarness_cTest.cpp

Lines changed: 39 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -581,6 +581,45 @@ TEST(TestHarness_c, checkPointerText)
581581
CHECK(!hasDestructorOfTheDestructorCheckedBeenCalled);
582582
}
583583

584+
static void failMemcmpMethod_()
585+
{
586+
HasTheDestructorBeenCalledChecker checker;
587+
unsigned char expectedData[] = { 0x00, 0x01, 0x02, 0x03 };
588+
unsigned char actualData[] = { 0x00, 0x01, 0x03, 0x03 };
589+
590+
CHECK_EQUAL_C_MEMCMP(expectedData, actualData, sizeof(expectedData));
591+
}
592+
593+
TEST(TestHarness_c, checkMemcmp)
594+
{
595+
CHECK_EQUAL_C_MEMCMP("TEST", "TEST", 5);
596+
fixture->setTestFunction(failMemcmpMethod_);
597+
fixture->runAllTests();
598+
fixture->assertPrintContains("expected <00 01 02 03>\n\tbut was <00 01 03 03>");
599+
fixture->assertPrintContains("arness_c");
600+
CHECK(!hasDestructorOfTheDestructorCheckedBeenCalled);
601+
}
602+
603+
static void failMemcmpTextMethod_()
604+
{
605+
HasTheDestructorBeenCalledChecker checker;
606+
unsigned char expectedData[] = { 0x00, 0x01, 0x02, 0x03 };
607+
unsigned char actualData[] = { 0x00, 0x01, 0x03, 0x03 };
608+
609+
CHECK_EQUAL_C_MEMCMP_TEXT(expectedData, actualData, sizeof(expectedData), "MemcmpTestText");
610+
}
611+
612+
TEST(TestHarness_c, checkMemcmpText)
613+
{
614+
CHECK_EQUAL_C_MEMCMP_TEXT("TEST", "TEST", 5, "Text");
615+
fixture->setTestFunction(failMemcmpTextMethod_);
616+
fixture->runAllTests();
617+
fixture->assertPrintContains("expected <00 01 02 03>\n\tbut was <00 01 03 03>");
618+
fixture->assertPrintContains("arness_c");
619+
fixture->assertPrintContains("Message: MemcmpTestText");
620+
CHECK(!hasDestructorOfTheDestructorCheckedBeenCalled);
621+
}
622+
584623
static void failBitsMethod_()
585624
{
586625
HasTheDestructorBeenCalledChecker checker;

0 commit comments

Comments
 (0)