#include #include "../include/libasm.h" #include "string.h" #include "../include/list.h" #include #include void test_size_t(size_t expected_value, size_t value) { if (expected_value != value) printf("[FAILED] %zu != %zu", expected_value, value); else printf("[OK]"); } void test_int(int expected_value, int value) { if (expected_value != value) printf("[FAILED] %d != %d", expected_value, value); else printf("[OK]"); } void test_str(const char *expected_value, const char *value) { if (strcmp(expected_value, value)) printf("[FAILED] %s != %s", expected_value, value); else printf("[OK]"); } void multiple_test_int(size_t (*normal_func)(const char*), size_t (*own_func)(const char*), const char **values) { for (size_t i = 0; values[i] != NULL; i++) { printf("test: %s ", values[i]); test_int(normal_func(values[i]), own_func(values[i])); printf("\n"); } } void multiple_test_int_2(int (*normal_func)(const char *, const char *), int (*own_func)(const char *, const char *), const char *values[][2]) { for (size_t i = 0; values[i][0] != NULL; i++) { printf("test: %s==%s", values[i][0], values[i][1]); test_int(normal_func(values[i][0], values[i][1]), own_func(values[i][0], values[i][1])); printf("\n"); } } void multiple_test_strcpy(char *(*own_func)(char *, const char *), const char * const *values) { char tmp[4096]; for (size_t i = 0; values[i] != NULL; i++) { printf("test: %s", values[i]); test_size_t((size_t) strcpy(tmp, values[i]), (size_t) own_func(tmp, values[i])); test_str(values[i], tmp); printf("\n"); } } void multiple_test_atoi_base(char *(*own_func)(char *, const char *), const char * const *values[2]) { char tmp[4096]; for (size_t i = 0; values[i] != NULL; i++) { printf("test: %s", values[i]); printf("\n"); } } void destroy_list(t_list *root, void *(destroy_data)(void *)) { t_list *current = root; t_list *prev; while (current != NULL) { prev = current; if (current->data) destroy_data(current->data); current = current->next; free(prev); } } t_list *create_list(size_t len) { t_list *root; t_list *current = root; root = malloc(sizeof(t_list)); if (root == NULL) return NULL; current = root; for (size_t i = 0; i < len; i++) { current->next = malloc(sizeof(t_list)); current->data = (void *) i; if (current->next == NULL) { destroy_list(current, NULL); return NULL; } current = current->next; } current->next = NULL; return root; } #define nb_random_test 10 #define nb_specific_test 1 void multiple_test_list_size() { size_t len; t_list *root; size_t specific_size[nb_specific_test] = {0}; srand(time(NULL)); for (size_t i = 0; i < nb_random_test + nb_specific_test; i++) { len = i < nb_specific_test ? specific_size[i] : rand() % 100; root = create_list(len); if (root == NULL) return; test_int(len, ft_list_size(root)); printf("\n"); } } void multiple_test_push_front() { size_t len; t_list *root; srand(time(NULL)); for (size_t i = 0; i < nb_random_test; i++) { len = rand() % 100; root = create_list(len); if (root == NULL) return; ft_list_push_front(&root, (void *) 101); printf("data: "); test_size_t((size_t) root->data, 101); printf(" data-next: "); test_size_t((size_t) root->next->data, 0); printf(" list-size: "); test_int(len + 1, ft_list_size(root)); printf("\n"); } } void multiple_test_strdup(const char * const *values) { char *tmp; for (size_t i = 0; values[i] != NULL; i++) { tmp = ft_strdup(values[i]); test_str(tmp, values[i]); free(tmp); printf("\n"); } } int main() { printf("STRLEN\n"); const char *strlen_tests[] = {"yo", "", "bonjour", "co\0fgf", NULL}; multiple_test_int(strlen, ft_strlen, strlen_tests); printf("\n"); printf("STRCMP\n"); const char *strcmp_tests[][2] = {{"w", "z"}, {"bonjour", "bonjour"}, {"", ""}, {"bonjour", "salut"}, {"co\0fgf", "co\0fgf"}, NULL}; multiple_test_int_2(strcmp, ft_strcmp, strcmp_tests); printf("\n"); printf("STRCPY\n"); const char *strcpy_tests[] = {"yo", "", "bonjour", "co\0fgf", NULL}; multiple_test_strcpy(ft_strcpy, strcpy_tests); printf("\n"); printf("STRDUP\n"); const char *strdup_tests[] = {"yo", "", "bonjour", "co\0fgf", NULL}; multiple_test_strdup(strdup_tests); printf("\n"); /* printf("ATOI_BASE\n"); const char *atoi_base_tests[][2] = {{"0123", ""}, {"0123", "0"}, {"0123", "0123456789"}, {"bonjour", "bonjour"}, {"", ""}, {"bonjour", "salut"}, {"co\0fgf", "co\0fgf"}, NULL}; multiple_test_int_2(strcmp, ft_strcmp, strcmp_tests); printf("\n");*/ printf("FT_LIST_SIZE\n"); multiple_test_list_size(); printf("\n"); printf("FT_LIST_PUSH_FRONT\n"); multiple_test_push_front(); printf("\n"); }