aboutsummaryrefslogtreecommitdiffstats
path: root/tests/test_cmp.c
diff options
context:
space:
mode:
authorThomas Vanbesien <tvanbesi@proton.me>2026-02-21 15:49:06 +0100
committerThomas Vanbesien <tvanbesi@proton.me>2026-02-21 15:51:44 +0100
commit671a58519ef6207b54947ff70eea497ff7eb58ae (patch)
tree783a971119bfed965113b84bc306ba941e884663 /tests/test_cmp.c
parentd699849b2360f90c61f645c5d4d4232cd3e1c962 (diff)
downloadLibft-671a58519ef6207b54947ff70eea497ff7eb58ae.tar.gz
Libft-671a58519ef6207b54947ff70eea497ff7eb58ae.zip
Restructure project layout and clean up test suite
Move sources to src/, header to inc/, and tests to tests/src/. Update Makefiles and .gitignore for the new layout. Refactor test harness: add crash-wrapper macros (_S_CRASH, _S_CRASH_I, _S_CRASH_V, _S_CRASH_BUF) replacing 58 hand-written wrappers, add shared _s_test_int_range helper eliminating duplicate _s_test_func, add _S_RAND_ITERS constant, move srand() to main() in all test binaries, and add Doxygen comments to test_utils.h.
Diffstat (limited to 'tests/test_cmp.c')
-rw-r--r--tests/test_cmp.c279
1 files changed, 0 insertions, 279 deletions
diff --git a/tests/test_cmp.c b/tests/test_cmp.c
deleted file mode 100644
index eea0aea..0000000
--- a/tests/test_cmp.c
+++ /dev/null
@@ -1,279 +0,0 @@
-#include "../libft.h"
-#include "test_utils.h"
-
-static void
-_s_ft_memchr_null (void)
-{
- _s_sink = (size_t)ft_memchr (NULL, 'a', 10);
-}
-static void
-_s_libc_memchr_null (void)
-{
- _s_sink = (size_t)memchr (NULL, 'a', 10);
-}
-static void
-_s_ft_memcmp_null_s1 (void)
-{
- _s_sink_i = ft_memcmp (NULL, "abc", 3);
-}
-static void
-_s_libc_memcmp_null_s1 (void)
-{
- _s_sink_i = memcmp (NULL, "abc", 3);
-}
-static void
-_s_ft_memcmp_null_s2 (void)
-{
- _s_sink_i = ft_memcmp ("abc", NULL, 3);
-}
-static void
-_s_libc_memcmp_null_s2 (void)
-{
- _s_sink_i = memcmp ("abc", NULL, 3);
-}
-static void
-_s_ft_strncmp_null_s1 (void)
-{
- _s_sink_i = ft_strncmp (NULL, "abc", 3);
-}
-static void
-_s_libc_strncmp_null_s1 (void)
-{
- _s_sink_i = strncmp (NULL, "abc", 3);
-}
-static void
-_s_ft_strncmp_null_s2 (void)
-{
- _s_sink_i = ft_strncmp ("abc", NULL, 3);
-}
-static void
-_s_libc_strncmp_null_s2 (void)
-{
- _s_sink_i = strncmp ("abc", NULL, 3);
-}
-
-/* ======================================
- * memchr
- * ====================================== */
-
-static void
-_s_test_memchr (void)
-{
- char buf[] = "Hello, World!";
- char all[256];
- int i;
- char label[64];
-
- printf ("-- memchr --\n");
-
- /* NULL */
- _s_check_both_crash ("memchr NULL", _s_ft_memchr_null, _s_libc_memchr_null);
-
- /* find existing char */
- _s_check ("find 'W'", ft_memchr (buf, 'W', 13) == memchr (buf, 'W', 13));
-
- /* find first byte */
- _s_check ("find 'H'", ft_memchr (buf, 'H', 13) == memchr (buf, 'H', 13));
-
- /* find last byte */
- _s_check ("find '!'", ft_memchr (buf, '!', 13) == memchr (buf, '!', 13));
-
- /* not found */
- _s_check ("not found 'z'",
- ft_memchr (buf, 'z', 13) == memchr (buf, 'z', 13));
-
- /* n=0 */
- _s_check ("n=0", ft_memchr (buf, 'H', 0) == NULL);
-
- /* char beyond n */
- _s_check ("beyond n", ft_memchr (buf, '!', 5) == memchr (buf, '!', 5));
-
- /* search for null byte */
- _s_check ("find '\\0'", ft_memchr (buf, '\0', 14) == memchr (buf, '\0', 14));
-
- /* int truncation to unsigned char */
- _s_check ("int truncation",
- ft_memchr (buf, 'H' + 256, 13) == memchr (buf, 'H' + 256, 13));
-
- /* all byte values */
- for (i = 0; i < 256; i++)
- all[i] = i;
- for (i = 0; i < 256; i++)
- {
- snprintf (label, sizeof (label), "byte %d", i);
- _s_check (label, ft_memchr (all, i, 256) == memchr (all, i, 256));
- }
-
- /* randomized */
- srand (time (NULL));
- for (i = 0; i < 50; i++)
- {
- unsigned char rnd[256];
- int len = rand () % 256 + 1;
- int c = rand () % 256;
- int j;
- for (j = 0; j < len; j++)
- rnd[j] = rand () % 256;
- snprintf (label, sizeof (label), "random len=%d c=%d", len, c);
- _s_check (label, ft_memchr (rnd, c, len) == memchr (rnd, c, len));
- }
-}
-
-/* ======================================
- * memcmp
- * ====================================== */
-
-static void
-_s_test_memcmp (void)
-{
- int i;
- unsigned char a[256];
- unsigned char b[256];
- size_t len;
- int pos;
- char label[64];
-
- printf ("-- memcmp --\n");
-
- /* NULL */
- _s_check_both_crash ("memcmp NULL s1", _s_ft_memcmp_null_s1,
- _s_libc_memcmp_null_s1);
- _s_check_both_crash ("memcmp NULL s2", _s_ft_memcmp_null_s2,
- _s_libc_memcmp_null_s2);
-
- /* equal */
- _s_check ("equal", _s_sign (ft_memcmp ("abc", "abc", 3))
- == _s_sign (memcmp ("abc", "abc", 3)));
-
- /* first less */
- _s_check ("less", _s_sign (ft_memcmp ("abc", "abd", 3))
- == _s_sign (memcmp ("abc", "abd", 3)));
-
- /* first greater */
- _s_check ("greater", _s_sign (ft_memcmp ("abd", "abc", 3))
- == _s_sign (memcmp ("abd", "abc", 3)));
-
- /* n=0 */
- _s_check ("n=0", _s_sign (ft_memcmp ("abc", "xyz", 0))
- == _s_sign (memcmp ("abc", "xyz", 0)));
-
- /* difference at last byte */
- _s_check ("diff at end", _s_sign (ft_memcmp ("abcd", "abce", 4))
- == _s_sign (memcmp ("abcd", "abce", 4)));
-
- /* unsigned comparison: 0 vs 200 */
- {
- unsigned char x[] = { 0 };
- unsigned char y[] = { 200 };
- _s_check ("unsigned 0 vs 200",
- _s_sign (ft_memcmp (x, y, 1)) == _s_sign (memcmp (x, y, 1)));
- }
-
- /* randomized */
- srand (time (NULL));
- for (i = 0; i < 50; i++)
- {
- len = rand () % 255 + 1;
- for (pos = 0; pos < (int)len; pos++)
- a[pos] = b[pos] = rand () % 256;
- /* introduce a random difference sometimes */
- if (i % 2 == 0)
- {
- pos = rand () % len;
- b[pos] = (a[pos] + 1 + rand () % 255) % 256;
- }
- snprintf (label, sizeof (label), "random len=%zu", len);
- _s_check (label, _s_sign (ft_memcmp (a, b, len))
- == _s_sign (memcmp (a, b, len)));
- }
-}
-
-/* ======================================
- * strncmp
- * ====================================== */
-
-static void
-_s_test_strncmp (void)
-{
- int i;
- char a[128];
- char b[128];
- int len;
- char label[64];
-
- printf ("-- strncmp --\n");
-
- /* NULL */
- _s_check_both_crash ("strncmp NULL s1", _s_ft_strncmp_null_s1,
- _s_libc_strncmp_null_s1);
- _s_check_both_crash ("strncmp NULL s2", _s_ft_strncmp_null_s2,
- _s_libc_strncmp_null_s2);
-
- /* equal strings */
- _s_check ("equal", _s_sign (ft_strncmp ("abc", "abc", 3))
- == _s_sign (strncmp ("abc", "abc", 3)));
-
- /* less */
- _s_check ("less", _s_sign (ft_strncmp ("abc", "abd", 3))
- == _s_sign (strncmp ("abc", "abd", 3)));
-
- /* greater */
- _s_check ("greater", _s_sign (ft_strncmp ("abd", "abc", 3))
- == _s_sign (strncmp ("abd", "abc", 3)));
-
- /* n=0 */
- _s_check ("n=0", _s_sign (ft_strncmp ("abc", "xyz", 0))
- == _s_sign (strncmp ("abc", "xyz", 0)));
-
- /* n larger than strings */
- _s_check ("n > len", _s_sign (ft_strncmp ("abc", "abc", 100))
- == _s_sign (strncmp ("abc", "abc", 100)));
-
- /* difference beyond n */
- _s_check ("diff beyond n", _s_sign (ft_strncmp ("abcX", "abcY", 3))
- == _s_sign (strncmp ("abcX", "abcY", 3)));
-
- /* empty strings */
- _s_check ("both empty",
- _s_sign (ft_strncmp ("", "", 5)) == _s_sign (strncmp ("", "", 5)));
-
- /* one empty */
- _s_check ("s1 empty", _s_sign (ft_strncmp ("", "a", 5))
- == _s_sign (strncmp ("", "a", 5)));
- _s_check ("s2 empty", _s_sign (ft_strncmp ("a", "", 5))
- == _s_sign (strncmp ("a", "", 5)));
-
- /* different lengths, equal prefix */
- _s_check ("shorter s1", _s_sign (ft_strncmp ("ab", "abc", 5))
- == _s_sign (strncmp ("ab", "abc", 5)));
-
- /* unsigned comparison */
- _s_check ("unsigned", _s_sign (ft_strncmp ("\xff", "\x01", 1))
- == _s_sign (strncmp ("\xff", "\x01", 1)));
-
- /* randomized */
- for (i = 0; i < 50; i++)
- {
- len = rand () % 64 + 1;
- for (int j = 0; j < len; j++)
- a[j] = b[j] = 'A' + rand () % 26;
- a[len] = '\0';
- b[len] = '\0';
- if (i % 2 == 0)
- b[rand () % len] = 'A' + rand () % 26;
- snprintf (label, sizeof (label), "random n=%d", len);
- _s_check (label, _s_sign (ft_strncmp (a, b, len))
- == _s_sign (strncmp (a, b, len)));
- }
-}
-
-int
-main (void)
-{
- printf ("=== comparison functions ===\n");
- _s_test_memchr ();
- _s_test_memcmp ();
- _s_test_strncmp ();
- _s_print_results ();
- return (_s_fail != 0);
-}