diff --git a/src/field_tests.c b/src/field_tests.c
index 8f26ef5e8dbc89f8f100f0b6cffb7c40d185b354..51577278c148336fc8ae1ca67b3aeebec4355826 100644
--- a/src/field_tests.c
+++ b/src/field_tests.c
@@ -1,7 +1,121 @@
 #include <stdlib.h>
 #include <stdio.h>
+#include <math.h>
+#include <stdbool.h>
+#include "field.h"
 
-int main() {
-	printf("Field_tests\n");
-	return EXIT_SUCCESS;
+typedef struct _test_result
+{
+    bool passed;
+    const char *name;
+} test_result;
+
+typedef test_result (*unit_test_t)(void);
+
+void print_in_color(char *color, char *text)
+{
+    printf("\033%s", color);
+    printf("%s", text);
+    printf("\033[0m");
+}
+void print_in_red(char *text)
+{
+    print_in_color("[0;31m", text);
+}
+void print_in_green(char *text)
+{
+    print_in_color("[0;32m", text);
+}
+
+bool dbl_eq(double a, double b)
+{
+    return fabs(a - b) < 1e-6;
+}
+
+test_result t_compute_e_0()
+{
+
+    double test_charge_q[] = {0.25, -0.25, -0.75, 0.9, 0.5};
+    vec2 test_position[] = {
+		vec2_create(0.25, 0.6),
+		vec2_create(0.01, 0.01),
+		vec2_create(0.9, 0.9),
+		vec2_create(0.5, 0.5),
+		vec2_create(0.25, 0.25)
+	};
+    vec2 awaited_result[] = {
+		vec2_create(0, 224700000000.000122),
+		vec2_create(3320060992.530107, 6778457859.748968),
+		vec2_create(-9855843283.957649, -6065134328.589322),
+		vec2_create(129427200000, 0),
+		vec2_create(0, -71904000000)
+	};
+
+	uint32_t nb_tests = sizeof(test_charge_q) / sizeof(double);
+    bool passed = true;
+
+    for (uint32_t i = 0; i < nb_tests; i++)
+    {
+		charge_t c = charge_create(test_charge_q[i], vec2_create(0.25, 0.5));
+		vec2 res = vec2_create_zero();
+		compute_e(c, test_position[i], 0.01, &res);
+        if (!vec2_is_approx_equal(res, awaited_result[i], 0.0001))
+        {
+            passed = false;
+            break;
+        }
+    }
+    return (test_result){.passed = passed, .name = "Test compute_e 0"};
+}
+
+test_result t_compute_total_normalized_e_0()
+{
+    bool passed = true;
+    return (test_result){.passed = passed, .name = "Test compute_total_normalized 0"};
+}
+
+test_result t_compute_delta_x_0()
+{
+    bool passed = true;
+
+    return (test_result){.passed = passed, .name = "Test compute_delta_x 0"};
+}
+
+test_result t_is_in_screen_0()
+{
+    bool passed = true;
+
+    return (test_result){.passed = passed, .name = "Test is_in_screen 0"};
+}
+
+// Add or remove your test function name here
+const unit_test_t tests[] = {t_compute_e_0, t_compute_total_normalized_e_0, t_compute_delta_x_0, t_is_in_screen_0};
+
+int main()
+{
+    uint32_t nb_tests = sizeof(tests) / sizeof(unit_test_t);
+    char message[256];
+    bool all_passed = true;
+
+    for (uint32_t i = 0; i < nb_tests; i++)
+    {
+        printf("Running test n°%d: ...\n", i);
+        test_result r = tests[i]();
+        if (r.passed)
+        {
+            sprintf(message, "\t- %s : OK", r.name);
+            print_in_green(message);
+        }
+        else
+        {
+            all_passed = false;
+            sprintf(message, "\t- %s : FAILED", r.name);
+            print_in_red(message);
+        }
+        printf("\n");
+    }
+    if (all_passed)
+        print_in_green("\nTests suite result : OK\n");
+    else
+        print_in_red("\nTests suite result : FAILED\n");
 }