Last active
October 12, 2021 07:28
-
-
Save ayaderaghul/0317d44267f61f04c6ed6e2feea77943 to your computer and use it in GitHub Desktop.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#include <stdlib.h> | |
#include "libft.h" | |
char *ft_strmapi(char const *s, char (*f)(unsigned int, char)) | |
{ | |
unsigned long i; | |
unsigned long l; | |
char *str; | |
l = ft_strlen(s); | |
str = (char*)malloc(sizeof(char) * (l + 1)); | |
if (str == 0) | |
return (str); | |
i = 0; | |
while (i < l) | |
{ | |
str[i] = (*f)(i, str[i]); | |
++i; | |
} | |
str[i] = 0; | |
return (str); | |
} | |
char f_strmapi(unsigned i, char c) { return (c + i); } | |
void test_ft_strmapi_basic(void *ptr) { | |
char * (*ft_strmapi)(const char *, char (*)(unsigned, char)) = ptr; | |
SET_EXPLANATION("your strmapi does not work"); | |
SANDBOX_RAISE( | |
char *b = "override this !"; | |
char b2[0xF0]; | |
size_t size = strlen(b); | |
for (size_t i = 0; i < size; i++) | |
b2[i] = f_strmapi(i, b[i]); | |
b2[size] = 0; | |
char *ret = ft_strmapi(b, f_strmapi); | |
if (!strcmp(b2, ret)) | |
exit(TEST_SUCCESS); | |
SET_DIFF(ret, b2); | |
exit(TEST_FAILED); | |
); | |
} | |
void test_ft_strmapi_zero(void *ptr) { | |
char * (*ft_strmapi)(const char *, char (*)(unsigned, char)) = ptr; | |
SET_EXPLANATION("your strmapi did not set \\0 at the end of the string"); | |
SANDBOX_RAISE( | |
char *b = "override this !"; | |
char b2[0xF0]; | |
size_t size = strlen(b); | |
for (size_t i = 0; i < size; i++) | |
b2[i] = f_strmapi(i, b[i]); | |
b2[size] = 0; | |
MALLOC_MEMSET; | |
char *ret = ft_strmapi(b, f_strmapi); | |
MALLOC_RESET; | |
if (!memcmp(b2, ret, size + 1)) | |
exit(TEST_SUCCESS); | |
SET_DIFF(ret, b2); | |
exit(TEST_FAILED); | |
); | |
} | |
void test_ft_strmapi_size(void *ptr) { | |
char * (*ft_strmapi)(const char *, char (*)(unsigned, char)) = ptr; | |
SET_EXPLANATION("your strmapi did not set \\0 at the end of the string"); | |
SANDBOX_RAISE( | |
char *b = "override this !"; | |
size_t size = strlen(b); | |
int ret_size; | |
MALLOC_SIZE; | |
ft_strmapi(b, f_strmapi); | |
MALLOC_RESET; | |
ret_size = get_last_malloc_size(); | |
if ((int)size + 1 == ret_size) | |
exit(TEST_SUCCESS); | |
SET_DIFF_INT((int)size + 1, ret_size); | |
exit(TEST_KO); | |
); | |
} | |
void test_ft_strmapi_free(void *ptr) { | |
char * (*ft_strmapi)(const char *, char (*)(unsigned, char)) = ptr; | |
SET_EXPLANATION("your strmapi does not malloc ?"); | |
SANDBOX_RAISE( | |
char *b = "override this !"; | |
char b2[0xF0]; | |
size_t size = strlen(b); | |
for (size_t i = 0; i < size; i++) | |
b2[i] = f_strmapi(i, b[i]); | |
b2[size] = 0; | |
STDOUT_TO_BUFF; | |
char *newstr = ft_strmapi(b, f_strmapi); | |
if (!strcmp(newstr, b2)) | |
exit(TEST_SUCCESS); | |
free(newstr); | |
write(1, "", 1); | |
VOID_STDOUT; | |
SET_DIFF(b2, newstr); | |
exit(TEST_FAILED); | |
); | |
} |
pgiammel
commented
Apr 20, 2018
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment