diff --git a/src/field.h b/src/field.h
index 34dd513faace05dfc54467a53db72bb155645ddb..01b6729fb5caf56a3dee485b875e6e4acbeaf82b 100644
--- a/src/field.h
+++ b/src/field.h
@@ -18,6 +18,10 @@ bool compute_e(charge_t c, vec2 p, double eps, vec2 *e);
 // Return false if for some qiP, norm(qiP) < eps
 bool compute_total_normalized_e(charge_t *charges, int num_charges, vec2 p, double eps, vec2 *e);
 
+bool line_reach_charge(vec2 pos, charge_t * charges, double num_charges, double dx);
+
+bool is_in_screen(coordinates_t pos);
+
 void draw_everything(
 		struct gfx_context_t *ctxt,
 		charge_t *charges,
diff --git a/src/field_tests.c b/src/field_tests.c
index 51577278c148336fc8ae1ca67b3aeebec4355826..80281a1a35c02ea753efd6fd50aab4a49d355640 100644
--- a/src/field_tests.c
+++ b/src/field_tests.c
@@ -34,7 +34,6 @@ bool dbl_eq(double a, double b)
 
 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),
@@ -70,26 +69,107 @@ test_result t_compute_e_0()
 
 test_result t_compute_total_normalized_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.037974, 0.999279),
+		vec2_create(-0.178064, -0.984019),
+		vec2_create(-0.108527, -0.994093),
+		vec2_create(1.000000, 0.000000),
+		vec2_create(0.192772, -0.981244)
+	};
+
+	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[2] = {
+			charge_create(-0.25, vec2_create(0.75, 0.5)),
+			charge_create(0.25, vec2_create(0.25, 0.5))
+		};
+
+		vec2 res = vec2_create_zero();
+		compute_total_normalized_e(c, 2, 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_total_normalized 0"};
 }
 
-test_result t_compute_delta_x_0()
+test_result t_line_reach_charge_0()
 {
+	charge_t c[2] = {
+			charge_create(-0.25, vec2_create(0.75, 0.5)),
+			charge_create(0.25, vec2_create(0.25, 0.5))
+		};
+
+    vec2 test_position[] = {
+		vec2_create(0.231, 0.481),
+		vec2_create(0.731, 0.519),
+		vec2_create(0.78, 0.5),
+		vec2_create(0.75, 0.5),
+		vec2_create(0.25, 0.5),
+		vec2_create(0.24, 0.49)
+	};
+    
+	bool results[] = {false, false, false, true, true, true};
+
+	uint32_t nb_tests = sizeof(results) / sizeof(bool);
     bool passed = true;
 
-    return (test_result){.passed = passed, .name = "Test compute_delta_x 0"};
+    for (uint32_t i = 0; i < nb_tests; i++)
+    {
+        if (line_reach_charge(test_position[i], c, 2, 25) != results[i]){
+            passed = false;
+            break;
+        }
+    }
+    return (test_result){.passed = passed, .name = "Test line_reach_charge 0"};
 }
 
 test_result t_is_in_screen_0()
 {
     bool passed = true;
 
+	coordinates_t p[] = {
+		coordinates_create(99 / WID * 100, 1 / HEI * 100),
+		coordinates_create(50 / WID * 100, 50 / HEI * 100),
+		coordinates_create(1 / WID * 100, 99 / HEI * 100),
+		coordinates_create(WID, HEI),
+		coordinates_create(-1, HEI / 2),
+		coordinates_create(WID / 2, -1),
+		coordinates_create(-1, -1),
+		coordinates_create(WID + 10, HEI/2),
+		coordinates_create(WID / 2, HEI + 10),
+		coordinates_create(WID + 10, HEI + 10)
+	};
+	bool results[] = {true, true, true, true, false, false, false, false, false, false};
+
+	uint32_t nb_tests = sizeof(results) / sizeof(bool);
+
+	for (size_t i = 0; i < nb_tests; i++)
+	{
+		if(is_in_screen(p[i]) != results[i]){
+			passed = false;
+			break;
+		}
+	}
+
     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};
+const unit_test_t tests[] = {t_compute_e_0, t_compute_total_normalized_e_0, t_line_reach_charge_0, t_is_in_screen_0};
 
 int main()
 {