From 0469c0c2c6e82390ea59ad9d124ab10ee1cc9cdf Mon Sep 17 00:00:00 2001
From: jD91mZM2 <me@krake.one>
Date: Tue, 9 Oct 2018 16:47:57 +0200
Subject: [PATCH] Add tests for memcmp and fix a teeny tiny bug

---
 src/header/string/mod.rs         |  2 +-
 tests/expected/string/mem.stdout |  1 +
 tests/string/mem.c               | 52 +++++++++++++++++++++-----------
 3 files changed, 37 insertions(+), 18 deletions(-)

diff --git a/src/header/string/mod.rs b/src/header/string/mod.rs
index 497a2bbe..879fb893 100644
--- a/src/header/string/mod.rs
+++ b/src/header/string/mod.rs
@@ -95,7 +95,7 @@ pub unsafe extern "C" fn memcmp(s1: *const c_void, s2: *const c_void, n: usize)
     let mut b = b as *const u8;
     for _ in 0..rem {
         if *a != *b {
-            return a as c_int - b as c_int;
+            return *a as c_int - *b as c_int;
         }
         a = a.offset(1);
         b = b.offset(1);
diff --git a/tests/expected/string/mem.stdout b/tests/expected/string/mem.stdout
index d2f4e1f8..1d74e9a7 100644
--- a/tests/expected/string/mem.stdout
+++ b/tests/expected/string/mem.stdout
@@ -1,3 +1,4 @@
 # mem #
 Correct memchr
 Correct memccpy
+Correct memcmp
diff --git a/tests/string/mem.c b/tests/string/mem.c
index 3cc42784..121a8f5f 100644
--- a/tests/string/mem.c
+++ b/tests/string/mem.c
@@ -3,22 +3,40 @@
 #include <string.h>
 
 int main(int argc, char ** argv) {
-	printf("# mem #\n");
-	char arr[100];
-	memset(arr, 0, 100); // Compiler builtin, should work
-	arr[50] = 1;
-	if ((size_t)memchr((void *)arr, 1, 100) - (size_t)arr != 50) {
-		printf("Incorrect memchr\n");
-		exit(1);
-	}
-	printf("Correct memchr\n");
-	char arr2[51];
-	memset(arr2, 0, 51); // Compiler builtin, should work
-	memccpy((void *)arr2, (void *)arr, 1, 100);
-	if (arr[50] != 1) {
-		printf("Incorrect memccpy\n");
-		exit(1);
-	}
-	printf("Correct memccpy\n");
+    puts("# mem #");
+    char arr[100];
+    memset(arr, 0, 100); // Compiler builtin, should work
+    arr[50] = 1;
+    if ((size_t)memchr((void *)arr, 1, 100) - (size_t)arr != 50) {
+        puts("Incorrect memchr");
+        exit(1);
+    }
+    puts("Correct memchr");
+    char arr2[51];
+    memset(arr2, 0, 51); // Compiler builtin, should work
+    memccpy((void *)arr2, (void *)arr, 1, 100);
+    if (arr[50] != 1) {
+        puts("Incorrect memccpy");
+        exit(1);
+    }
+    puts("Correct memccpy");
+    int res;
+    if ((res = memcmp("hello world", "hello world", 11))) {
+        printf("Incorrect memcmp (1), expected 0 found %d\n", res);
+        exit(1);
+    }
+    if ((res = memcmp("hello world", "hello worlt", 11)) >= 0) {
+        printf("Incorrect memcmp (2), expected -, found %d\n", res);
+        exit(1);
+    }
+    if ((res = memcmp("hello world", "hallo world", 5)) <= 0) {
+        printf("Incorrect memcmp (3), expected +, found %d\n", res);
+        exit(1);
+    }
+    if ((res = memcmp("hello world", "henlo world", 5)) >= 0) {
+        printf("Incorrect memcmp (4), expected -, found %d\n", res);
+        exit(1);
+    }
+    puts("Correct memcmp");
     return 0;
 }
-- 
GitLab