aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--Makefile9
-rw-r--r--ft_strlen_test.c40
-rw-r--r--helper.c29
-rw-r--r--libasm_test.h56
4 files changed, 130 insertions, 4 deletions
diff --git a/Makefile b/Makefile
index 1ab26f8..fc5fc11 100644
--- a/Makefile
+++ b/Makefile
@@ -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