From dd8ecf50db539c415c1330f043a247ed33c1b8fd Mon Sep 17 00:00:00 2001 From: augustin64 Date: Fri, 19 Apr 2024 09:05:42 +0200 Subject: [PATCH] Add tests --- TP/TP2/rendu/Makefile | 14 +++++- TP/TP2/rendu/make.sh | 25 ++++++++++ TP/TP2/rendu/tests/fail/bad_copy.c | 48 +++++++++++++++++++ TP/TP2/rendu/tests/fail/bad_free.c | 27 +++++++++++ TP/TP2/rendu/{test.c => tests/success/main.c} | 22 ++++----- 5 files changed, 123 insertions(+), 13 deletions(-) create mode 100755 TP/TP2/rendu/make.sh create mode 100644 TP/TP2/rendu/tests/fail/bad_copy.c create mode 100644 TP/TP2/rendu/tests/fail/bad_free.c rename TP/TP2/rendu/{test.c => tests/success/main.c} (50%) diff --git a/TP/TP2/rendu/Makefile b/TP/TP2/rendu/Makefile index 8b54c7f..b7e3850 100644 --- a/TP/TP2/rendu/Makefile +++ b/TP/TP2/rendu/Makefile @@ -1,10 +1,20 @@ SRC = $(wildcard *.c) OBJ = $(filter-out build/main.o build/test.o, $(SRC:%.c=build/%.o)) FLAGS = -Wall -Wextra -g -O3 +TEST_SRCDIR = tests -all: build/test +FAIL_TESTS_SRC += $(wildcard $(TEST_SRCDIR)/fail/*.c) +SUCC_TESTS_SRC += $(wildcard $(TEST_SRCDIR)/success/*.c) +TESTS_OBJ = $(FAIL_TESTS_SRC:$(TEST_SRCDIR)/fail/%.c=build/test-fail-%) $(SUCC_TESTS_SRC:$(TEST_SRCDIR)/success/%.c=build/test-success-%) -build/test: test.c $(OBJ) +all: build-tests + +build-tests: $(TESTS_OBJ) + +build/test-fail-%: tests/fail/%.c $(OBJ) + gcc $^ -o $@ $(FLAGS) + +build/test-success-%: tests/success/%.c $(OBJ) gcc $^ -o $@ $(FLAGS) build/%.o: %.c %.h diff --git a/TP/TP2/rendu/make.sh b/TP/TP2/rendu/make.sh new file mode 100755 index 0000000..f7c1644 --- /dev/null +++ b/TP/TP2/rendu/make.sh @@ -0,0 +1,25 @@ +#!/bin/bash + +test_failed () { + exit 1 +} + +make build-tests + +for file in build/test-fail-*; do + echo "===== $file ====="; + $file &>/dev/null + if [ $? -eq 0 ]; then + echo "$file should have failed" + test_failed + fi +done + +for file in build/test-success-*; do + echo "===== $file ====="; + $file &>/dev/null + if [ $? -ne 0 ]; then + echo "$file failed" + test_failed + fi +done \ No newline at end of file diff --git a/TP/TP2/rendu/tests/fail/bad_copy.c b/TP/TP2/rendu/tests/fail/bad_copy.c new file mode 100644 index 0000000..1370995 --- /dev/null +++ b/TP/TP2/rendu/tests/fail/bad_copy.c @@ -0,0 +1,48 @@ +#include +#include + +#include "../../vmap.h" + +int main() { + Memory* mem = memory_init(-1); + int pid1 = 12; + int pid2 = 24; + + char* real1 = malloc(sizeof(char)*32); + real1[0] = 'h'; + real1[1] = 'e'; + real1[2] = 'l'; + real1[3] = 'l'; + real1[4] = 'o'; + real1[5] = '!'; + real1[6] = '\0'; + + + + char* data1 = my_malloc(mem, 32*sizeof(char), pid1); + char* data2 = my_malloc(mem, 32*sizeof(char), pid2); + + vmap_copy_from_memory(mem, real1, data1, 8, pid1); + + + my_copy(mem, data1, data2, 32*sizeof(char), pid1); //! src and dst have different PIDs + + char* real = malloc(sizeof(char)*32); + + vmap_copy_to_memory(mem, data2, real, 7, pid2); + + if (strcmp(real, real1)) { + printf("%d\n", strcmp(real, real1)); + fprintf(stderr, "copy test failed\n"); + return 1; + } + + + free(real); + free(real1); + + my_free(mem, data1, pid1); + my_free(mem, data2, pid2); + + return 0; +} diff --git a/TP/TP2/rendu/tests/fail/bad_free.c b/TP/TP2/rendu/tests/fail/bad_free.c new file mode 100644 index 0000000..4e1ec36 --- /dev/null +++ b/TP/TP2/rendu/tests/fail/bad_free.c @@ -0,0 +1,27 @@ +#include +#include + +#include "../../vmap.h" + +int main() { + Memory* mem = memory_init(-1); + int pid1 = 12; + int pid2 = 24; + + char* real1 = malloc(sizeof(char)*32); + real1[0] = 'h'; + real1[1] = 'e'; + real1[2] = 'l'; + real1[3] = 'l'; + real1[4] = 'o'; + real1[5] = '!'; + real1[6] = '\0'; + + char* data1 = my_malloc(mem, 32*sizeof(char), pid1); + char* data2 = my_malloc(mem, 32*sizeof(char), pid2); + + my_free(mem, data1, pid1); + my_free(mem, data2, pid1); //! bad PID + + return 0; +} diff --git a/TP/TP2/rendu/test.c b/TP/TP2/rendu/tests/success/main.c similarity index 50% rename from TP/TP2/rendu/test.c rename to TP/TP2/rendu/tests/success/main.c index 2cdb95c..43f7492 100644 --- a/TP/TP2/rendu/test.c +++ b/TP/TP2/rendu/tests/success/main.c @@ -1,11 +1,11 @@ #include #include -#include "vmap.h" +#include "../../vmap.h" int main() { - // Add more tests here - VMap* vmap = vmap_init(); + Memory* mem = memory_init(-1); + int pid = 12; char* real1 = malloc(sizeof(char)*32); real1[0] = 'h'; @@ -16,18 +16,18 @@ int main() { real1[5] = '!'; real1[6] = '\0'; - char* data1 = my_malloc(vmap, 32*sizeof(char)); - char* data2 = my_malloc(vmap, 32*sizeof(char)); + char* data1 = my_malloc(mem, 32*sizeof(char), pid); + char* data2 = my_malloc(mem, 32*sizeof(char), pid); - vmap_copy_from_memory(vmap, real1, data1, 8); + vmap_copy_from_memory(mem, real1, data1, 8, pid); - my_copy(vmap, data1, data2, 32*sizeof(char)); + my_copy(mem, data1, data2, 32*sizeof(char), pid); char* real = malloc(sizeof(char)*32); - vmap_copy_to_memory(vmap, data2, real, 7); + vmap_copy_to_memory(mem, data2, real, 7, pid); - if (strcmp(real1, real1)) { + if (strcmp(real, real1)) { printf("%d\n", strcmp(real, real1)); fprintf(stderr, "copy test failed\n"); return 1; @@ -36,8 +36,8 @@ int main() { free(real); free(real1); - my_free(vmap, data1); - my_free(vmap, data2); + my_free(mem, data1, pid); + my_free(mem, data2, pid); return 0; }