diff --git a/stack.c b/stack.c
index b5030a9ec22fd00d3809e5aa58339b3dfd7324c2..4137848141ec5250cf640707995a2ac8a6c13c0f 100644
--- a/stack.c
+++ b/stack.c
@@ -6,3 +6,28 @@
 #include "stack.h"
 #include <stdio.h>
 
+void stack_init(stack *s, int size) {
+
+}
+
+bool stack_is_empty(stack s) {
+    bool is_empty = true;
+
+    return is_empty;
+}
+
+void stack_push(stack *s, int val) {
+
+}
+
+void stack_pop(stack *s, int *val) {
+
+}
+
+void stack_peek(stack s, int *val) {
+
+}
+
+void stack_destroy(stack *s) {
+
+}
diff --git a/test.c b/test.c
index 79981ebd573403f85e7855d55988173755e46cc8..ae29034566f2481d6db64696c74a15d0fc93a6bf 100644
--- a/test.c
+++ b/test.c
@@ -7,7 +7,110 @@
 #include <stdbool.h>
 #include <stdio.h>
 
+void test_stack_init(stack *s, int size) {
+    printf("Testing stack_init()...\n");
+    stack_init(s, size);
+    assert(s != NULL);
+    assert(s->size == size);
+    printf("OK.\n");
+}
+
+void test_stack_destroy(stack *s) {
+    printf("Testing stack_destroy()...\n");
+    stack_destroy(s);
+    // TODO: Verify if s is already null or not
+    assert(s->data == NULL);
+    assert(s->top == -1);
+    printf("OK.\n");
+}
+
+void test_stack_is_empty(stack *s) {
+    printf("Testing stack_is_empty()...\n");
+    assert(stack_is_empty(*s) == true);
+    printf("OK.\n");
+}
+
+void test_stack_is_not_empty(stack *s) {
+    printf("Testing stack_is_not_empty()...\n");
+    assert(stack_is_empty(*s) == false);
+    printf("OK.\n");
+}
+
+void test_stack_peek(stack s, int *val) {
+    printf("Testing stack_peek()...\n");
+    stack_peek(s, val);
+    // TODO: Verify test
+    assert(val == &s.top);
+    printf("OK.\n");
+}
+
+void test_stack_push(stack *s, int val) {
+    printf("Testing stack_push()...\n");
+    stack_push(s, val);
+    // Testing push with remaining spaces
+    assert(s->top == val);
+    // Testing push on full stack
+    stack *stack_full;
+    int value_top_full_stack_value = 100;
+    stack_init(stack_full, 1);
+    stack_push(stack_full, value_top_full_stack_value);
+    stack_push(stack_full, val);
+    assert(stack_full->top == value_top_full_stack_value);
+    printf("OK.\n");
+}
+
+void test_stack_pop(stack *s, int *val) {
+    printf("Testing stack_pop()...\n");
+    int top_before_pop;
+    // Test with non-empty stack
+    if (s-> size == 0) {
+        // Add a value if the stack is empty
+        stack_push(s, 5);
+    }
+    top_before_pop = s->top;
+    stack_pop(s, val);
+    // TODO: Verify test
+    assert(val == &top_before_pop);
+
+    // Clear the stack
+    while(s->size != 0) {
+        stack_pop(s, val);
+    }
+    // Test pop when stack is empty
+    val = NULL;
+    stack_pop(s, val);
+    assert(val == NULL);
+
+    printf("OK.\n");
+}
+
 int main() {
+    stack *s, *non_empty_stack;
+    int size = 10, value_to_add = 7;
+    int *val;
+    printf("Starting the tests...\n");
+    // Test init and destroy
+    test_stack_init(s, size);
+    test_stack_destroy(s);
+
+    // Reinitialization
+    stack_init(s, size);
+    stack_init(non_empty_stack, 3);
+    non_empty_stack->data[0] = 1;
+    non_empty_stack->top = non_empty_stack->data[0];
+
+    // Test the other functions
+    test_stack_is_empty(s);
+    test_stack_is_not_empty(non_empty_stack);
+    test_stack_peek(*s, val);
+    test_stack_push(s, value_to_add);
+    test_stack_pop(s, val);
+
+    // Free the memory
+    stack_destroy(s);
+    stack_destroy(non_empty_stack);
+
+    // End the tests
     printf("The tests are completed and were successful !\n");
     return EXIT_SUCCESS;
 }