aboutsummaryrefslogtreecommitdiffstats
path: root/strrstr.c
diff options
context:
space:
mode:
authorMattias Andrée <maandree@kth.se>2018-08-12 22:02:07 +0200
committerMattias Andrée <maandree@kth.se>2018-08-12 22:04:32 +0200
commit1054a875c7f96e5799c8bfbf8a73e41dd064b606 (patch)
tree48184e8d2f0c15bae01aee97eaf57247c34e968a /strrstr.c
parentAdd tests (diff)
downloadlibsimple-1054a875c7f96e5799c8bfbf8a73e41dd064b606.tar.gz
libsimple-1054a875c7f96e5799c8bfbf8a73e41dd064b606.tar.bz2
libsimple-1054a875c7f96e5799c8bfbf8a73e41dd064b606.tar.xz
Add memrmem, strrstr, and strrcasestr
Signed-off-by: Mattias Andrée <maandree@kth.se>
Diffstat (limited to '')
-rw-r--r--strrstr.c70
1 files changed, 70 insertions, 0 deletions
diff --git a/strrstr.c b/strrstr.c
new file mode 100644
index 0000000..5d64744
--- /dev/null
+++ b/strrstr.c
@@ -0,0 +1,70 @@
+/* See LICENSE file for copyright and license details. */
+#include "libsimple.h"
+
+
+char *
+libsimple_strrstr(const char *hay, const char *sub)
+{
+ return libsimple_memrmem(hay, strlen(hay), sub, strlen(sub));
+}
+
+
+#ifdef TEST
+#include <assert.h>
+
+int
+main(void)
+{
+ assert(!strcmp(libsimple_strrstr("test", "test"), "test"));
+ assert(!strcmp(libsimple_strrstr("", ""), ""));
+ assert(!strcmp(libsimple_strrstr("test", ""), ""));
+ assert(!libsimple_strrstr("", "test"));
+ assert(!libsimple_strrstr("t", "test"));
+ assert(!strcmp(libsimple_strrstr("test", "t"), "t"));
+ assert(!strcmp(libsimple_strrstr("test", "e"), "est"));
+ assert(!strcmp(libsimple_strrstr("test", "s"), "st"));
+ assert(!libsimple_strrstr("test", "x"));
+ assert(!strcmp(libsimple_strrstr("test", "te"), "test"));
+ assert(!strcmp(libsimple_strrstr("test", "es"), "est"));
+ assert(!strcmp(libsimple_strrstr("test", "st"), "st"));
+ assert(!libsimple_strrstr("test", "xx"));
+ assert(!strcmp(libsimple_strrstr("abc", "c"), "c"));
+ assert(!strcmp(libsimple_strrstr("abc", "bc"), "bc"));
+ assert(!strcmp(libsimple_strrstr("abc", "abc"), "abc"));
+ assert(!strcmp(libsimple_strrstr("abcabc", "bc"), "bc"));
+
+ assert(!strcmp(libsimple_strrcasestr("TEST", "test"), "TEST"));
+ assert(!strcmp(libsimple_strrcasestr("TEST", ""), ""));
+ assert(!libsimple_strrcasestr("T", "test"));
+ assert(!strcmp(libsimple_strrcasestr("TEST", "t"), "T"));
+ assert(!strcmp(libsimple_strrcasestr("TEST", "e"), "EST"));
+ assert(!strcmp(libsimple_strrcasestr("TEST", "s"), "ST"));
+ assert(!libsimple_strrcasestr("TEST", "x"));
+ assert(!strcmp(libsimple_strrcasestr("TEST", "te"), "TEST"));
+ assert(!strcmp(libsimple_strrcasestr("TEST", "es"), "EST"));
+ assert(!strcmp(libsimple_strrcasestr("TEST", "st"), "ST"));
+ assert(!libsimple_strrcasestr("TEST", "xx"));
+ assert(!strcmp(libsimple_strrcasestr("ABC", "c"), "C"));
+ assert(!strcmp(libsimple_strrcasestr("ABC", "bc"), "BC"));
+ assert(!strcmp(libsimple_strrcasestr("ABC", "abc"), "ABC"));
+ assert(!strcmp(libsimple_strrcasestr("ABCABC", "bc"), "BC"));
+
+ assert(!strcmp(libsimple_strrcasestr("test", "TEST"), "test"));
+ assert(!libsimple_strrcasestr("", "TEST"));
+ assert(!libsimple_strrcasestr("t", "TEST"));
+ assert(!strcmp(libsimple_strrcasestr("test", "T"), "t"));
+ assert(!strcmp(libsimple_strrcasestr("test", "E"), "est"));
+ assert(!strcmp(libsimple_strrcasestr("test", "S"), "st"));
+ assert(!libsimple_strrcasestr("test", "X"));
+ assert(!strcmp(libsimple_strrcasestr("test", "TE"), "test"));
+ assert(!strcmp(libsimple_strrcasestr("test", "ES"), "est"));
+ assert(!strcmp(libsimple_strrcasestr("test", "ST"), "st"));
+ assert(!libsimple_strrcasestr("test", "XX"));
+ assert(!strcmp(libsimple_strrcasestr("abc", "C"), "c"));
+ assert(!strcmp(libsimple_strrcasestr("abc", "BC"), "bc"));
+ assert(!strcmp(libsimple_strrcasestr("abc", "ABC"), "abc"));
+ assert(!strcmp(libsimple_strrcasestr("abcabc", "BC"), "bc"));
+ return 0;
+}
+
+#endif