11// no-compile: refcount
22#include < cassert>
3+ #include < cstdlib>
34#include < cstring>
45
56static void test_memcpy () {
@@ -74,6 +75,44 @@ static void test_strncmp() {
7475 assert (std::strncmp (buf, p, 6 ) == 0 );
7576}
7677
78+ static void test_memchr () {
79+ const char data[] = {0x10 , 0x20 , 0x30 , 0x40 };
80+ const void *r = std::memchr (data, 0x30 , 4 );
81+ assert (r == &data[2 ]);
82+ assert (std::memchr (data, 0x99 , 4 ) == nullptr );
83+ const void *p = data;
84+ std::size_t n = 4 ;
85+ assert (std::memchr (p, 0x10 , n) == p);
86+ }
87+
88+ static void test_strrchr () {
89+ const char *s = " hello world" ;
90+ const char *r = std::strrchr (s, ' l' );
91+ assert (r != nullptr );
92+ assert (*r == ' l' );
93+ assert (r == s + 9 );
94+ assert (std::strrchr (s, ' z' ) == nullptr );
95+ char buf[] = {' a' , ' b' , ' a' , ' \0 ' };
96+ assert (std::strrchr (buf, ' a' ) == &buf[2 ]);
97+ }
98+
99+ static void test_strdup () {
100+ char *d = strdup (" hello" );
101+ assert (d != nullptr );
102+ assert (std::strcmp (d, " hello" ) == 0 );
103+ std::free (d);
104+ const char *p = " world" ;
105+ char buf[] = {' a' , ' b' , ' c' , ' \0 ' };
106+ char *d2 = strdup (p);
107+ assert (d2 != nullptr );
108+ assert (std::strcmp (d2, p) == 0 );
109+ std::free (d2);
110+ char *d3 = strdup (buf);
111+ assert (d3 != nullptr );
112+ assert (std::strcmp (d3, buf) == 0 );
113+ std::free (d3);
114+ }
115+
77116int main () {
78117 test_memcpy ();
79118 test_memset ();
@@ -83,5 +122,8 @@ int main() {
83122 test_strlen ();
84123 test_strcmp ();
85124 test_strncmp ();
125+ test_memchr ();
126+ test_strrchr ();
127+ test_strdup ();
86128 return 0 ;
87129}
0 commit comments