diff options
| -rw-r--r-- | Makefile | 9 | ||||
| -rw-r--r-- | ft_strlen_test.c | 40 | ||||
| -rw-r--r-- | helper.c | 29 | ||||
| -rw-r--r-- | libasm_test.h | 56 |
4 files changed, 130 insertions, 4 deletions
@@ -8,13 +8,16 @@ LDFLAGS = -L$(LIBASM_PATH) -lasm NAME = runtest SRC = main.c ft_strlen_test.c ft_strcpy_test.c ft_strcmp_test.c \ - ft_write_test.c ft_read_test.c ft_strdup_test.c + ft_write_test.c ft_read_test.c ft_strdup_test.c helper.c OBJ = $(SRC:.c=.o) +run: all + ./runtest + all: $(NAME) -$(NAME): $(OBJ) - $(CC) $(LDFLAGS) -o $@ $^ +$(NAME): libasm_all $(OBJ) + $(CC) $(LDFLAGS) -o $@ $(OBJ) %.o: %.c $(CC) $(CCFLAGS) -c -o $@ $< diff --git a/ft_strlen_test.c b/ft_strlen_test.c index 8c5d982..1e5caf0 100644 --- a/ft_strlen_test.c +++ b/ft_strlen_test.c @@ -1,7 +1,45 @@ #include "libasm_test.h" +static void +ft_strlen_test_segfault(void) +{ + TEST_ASM_FUNCTION(ft_strlen("")); + TEST_ASM_FUNCTION(ft_strlen("bon")); + TEST_ASM_FUNCTION(ft_strlen("bonjour")); + TEST_ASM_FUNCTION(ft_strlen("%c%s%p%x%X%e%f%g")); + TEST_ASM_FUNCTION(ft_strlen("the\0hidden")); + TEST_ASM_FUNCTION(ft_strlen("Lorem ipsum dolor sit amet, consectetur adipiscing\ +elit. Sed in malesuada purus. Etiam a scelerisque massa. Ut non euismod elit. Aliquam\ +bibendum dolor mi, id fringilla tellus pulvinar eu. Fusce vel fermentum sem. Cras\ +volutpat, eros eget rhoncus rhoncus, diam augue egestas dolor, vitae rutrum nisi\ +felis sed purus. Mauris magna ex, mollis non suscipit eu, lacinia ac turpis. Phasellus\ +ac tortor et lectus fermentum lobortis eu at mauris. Vestibulum sit amet posuere\ +tortor, sit amet consequat amet.")); +} + +#define FT_STRLEN_EXPECT(str) expect_int(strlen(str), ft_strlen(str)) + +static void +ft_strlen_test_compare(void) +{ + FT_STRLEN_EXPECT(""); + FT_STRLEN_EXPECT("bon"); + FT_STRLEN_EXPECT("bonjour"); + FT_STRLEN_EXPECT("%c%s%p%x%X%e%f%g"); + FT_STRLEN_EXPECT("the\0hidden"); + FT_STRLEN_EXPECT("Lorem ipsum dolor sit amet, consectetur adipiscing\ +elit. Sed in malesuada purus. Etiam a scelerisque massa. Ut non euismod elit. Aliquam\ +bibendum dolor mi, id fringilla tellus pulvinar eu. Fusce vel fermentum sem. Cras\ +volutpat, eros eget rhoncus rhoncus, diam augue egestas dolor, vitae rutrum nisi\ +felis sed purus. Mauris magna ex, mollis non suscipit eu, lacinia ac turpis. Phasellus\ +ac tortor et lectus fermentum lobortis eu at mauris. Vestibulum sit amet posuere\ +tortor, sit amet consequat amet."); +} + void ft_strlen_test(void) { - + test_name = "ft_strlen.s"; + ft_strlen_test_segfault(); + ft_strlen_test_compare(); } diff --git a/helper.c b/helper.c new file mode 100644 index 0000000..b2b2a18 --- /dev/null +++ b/helper.c @@ -0,0 +1,29 @@ +#include "libasm_test.h" + + +void +print_ok(void) +{ + printf("OK: %s\n", test_name); +} + +void +print_stack_alignment_error(void) +{ + printf("KO: [STACK ALIGNMENT]: %s\n", test_name); +} + +void +print_signaled_ko(void) +{ + printf("KO: [SEGFAULT]: %s\n", test_name); +} + +void +expect_int(int expected, int actual) +{ + if (actual != expected) + printf("KO: [COMPARE]: %s: expected: %d got: %d\n", test_name, expected, actual); + else + print_ok(); +} diff --git a/libasm_test.h b/libasm_test.h index 37577e5..c340903 100644 --- a/libasm_test.h +++ b/libasm_test.h @@ -1,6 +1,12 @@ #ifndef LIBASM_TEST_H # define LIBASM_TEST_H +# include <unistd.h> +# include <stdbool.h> +# include <stdlib.h> +# include <stdio.h> +# include <string.h> +# include <sys/wait.h> # include <stddef.h> /* @@ -55,4 +61,54 @@ void ft_strdup_test(void); +void +print_ok(void); +void +print_signaled_ko(void); +void +expect_int(int expected, int actual); + +int pid; +bool signaled; + +# define TEST_SEGFAULT(x) do { \ + if ((pid = fork()) < 0) \ + exit(EXIT_FAILURE); \ + if (pid == 0) { \ + do { x; } while(0); \ + exit(EXIT_SUCCESS); \ + } else { \ + wait(&pid); \ + signaled = WIFSIGNALED(pid); \ + } \ +} while(0); + + +// void *saved_sp; +// bool stack_alignment_error; +// +// # define TEST_STACK_ALIGNMENT(x) do { \ +// stack_alignment_error = false; \ +// saved_sp = asm ("sp"); \ +// do { x } while(0); \ +// stack_alignment_error = saved_sp != asm("sp")); \ +// } while (0); + +char *test_name; + +# define TEST_ASM_FUNCTION(x) do { \ + TEST_SEGFAULT(x); \ + if (signaled) \ + print_signaled_ko(); \ + else \ + print_ok(); \ +} while(0); + +// # define EXPECT(expected, actual) do { \ +// if (actual == expected) \ +// print_ok(); \ +// else \ +// printf("KO: [COMPARE]: expected: \""#expected"\" got: \""#actual"\"\n", test_name); \ +// while (0); + #endif |
