diff --git a/slides/munit.md b/slides/munit.md
index 44b39dd93e7ea9dc51e2004d979893d7bf6f5534..fcec7fe316442c0fe0b986c0cbe1bf0edcc22d81 100644
--- a/slides/munit.md
+++ b/slides/munit.md
@@ -72,7 +72,8 @@ Ici on utilisera:
 
 # Petit tuto $\mu$nit
 
-Structure possible de tests:
+* Pour plus d'informations voir [ce lien](https://nemequ.github.io/munit/). 
+* Structure possible de tests:
 
 ~~~{.mermaid format=png}
 graph TD;
@@ -88,7 +89,8 @@ graph TD;
     munit.o --> tests
 ~~~
 
-*Exercice:* Écrire un `Makefile` avec une cible `tests` qui compile et exécute les tests.
+**Exercice:** Écrire un `Makefile` avec une cible `tests` qui compile et 
+exécute les tests.
 
 # Utilisation simple
 
@@ -122,6 +124,152 @@ ERROR> tests.c:5: assertion failed:
     add(1, -2) == -1 (-2 == -1)
 ```
 
-Les `munit_assert_TYPE()`{.C} existent en plusieurs saveurs (`char`{.C}, `float`{.C}, ...). 
+Plusieurs saveurs de `munit_assert_TYPE()`{.C} (`char`{.C}, `float`{.C}, ...). 
+
+# Structure des tests (1/3)
+
+## Fonction de test
+
+* Chaque test doit être dans une fonction séparée.
+* Chaque fonctionnalité doit avoir sa propre fonction de test.
+* Le nom de la fonction doit ressembler à:
+    
+    ```C
+    // - MunitResult: type de retour du test
+    //     - MUNIT_OK, MUNIT_SKIP, MUNIT_FAIL, MUNIT_ERROR
+    // - nom_du_test: l'identifiant de la fonction
+    // - params: les paramètres du test
+    // - user_data_or_fixture: permet plus de flexibilité
+    MunitResult nom_du_test(const MunitParameter params[], 
+        void* user_data_or_fixture);
+    ```
+
+* On s'intéresse pas à `params` et `user_data_or_fixture`.
+* Le nombre de tests est arbitraire, maintenant voyons comment les exécuter.
+
+# Structure des tests (2/3)
+
+\footnotesize
+
+## Liste de tests
+
+* Les tests sont mis dans une liste:
+
+    ```C
+    MunitTest mes_tests[] = {
+        {
+            "/mon_super_test", /* nom humain du test */
+            nom_du_test, /* nom dela fonction de test */
+            NULL, /* setup */
+            NULL, /* tear_down */
+            MUNIT_TEST_OPTION_NONE, /* options */
+            NULL /* parameters */
+        },
+        // On peut rajouter plein d'autres tests
+        { NULL, NULL, NULL, NULL, MUNIT_TEST_OPTION_NONE, NULL  }
+        // La ligne ci-dessus indique qu'il n'y a pas d'autres tests
+        // Elle est obligatoire
+    };
+    ```
+* `setup`, `tear_down`, `options`, `parameters` servent à paramétrer les tests on les laisse à `NULL`{.C} ici.
+
+# Structure de tests (3/3)
+
+## Suite de tests
+
+* Quand on a notre liste de tests on peut les mettre dans une suite
+
+    ```C
+    const MunitSuite suite = {
+        "/ma_suite", /* name */
+        mes_tests, /* liste de tests */
+        NULL, /* suites */
+        1, /* iterations, pour les tests PRNG */
+        MUNIT_SUITE_OPTION_NONE /* options */
+    };
+    ```
+
+# On mélange et on secoue tout (1/2)
+
+\footnotesize
+
+## Fichier `tests.c`
+
+```C
+#include "munit/munit.h"
+MunitResult test_init( // fonction de test
+    const MunitParameter params[], void* user_data_or_fixture)
+{
+    stack init = stack_init();
+    munit_assert_ptr_equal(init, NULL);
+    return MUNIT_OK;
+}
+MunitTest test_suite_tests[] = { // liste de tests
+    {
+        "/test_init", /* name */
+        test_init, /* test */
+        NULL, /* setup */
+        NULL, /* tear_down */
+        MUNIT_TEST_OPTION_NONE, /* options */
+        NULL /* parameters */
+    },
+    /* La fin de la liste de tests */
+    { NULL, NULL, NULL, NULL, MUNIT_TEST_OPTION_NONE, NULL }
+};
+```
+
+# On mélange et on secoue tout (2/2)
+
+\footnotesize
+
+## Fichier `tests.c`
+
+```C
+/* La suite de tests qu'on va exécuter */
+const MunitSuite test_suite = {
+  /* Une chaîne de caractères mise avant chaque test de la suite. */
+  (char*) "",
+  /* La liste de tests. */
+  test_suite_tests,
+  /* Une autre suite, ici on a rien d'autre. */
+  NULL,
+  /* Le nombre de fois qu'on va exécuter les tests. Utile pour des tests 
+  random. */
+  1,
+  /* Des options qu'on utilise pas ici. */
+  MUNIT_SUITE_OPTION_NONE
+};
+
+int main(int argc, char** argv) {
+    /* On lance notre suite de tests: argc, argv pourraient être NULL. */
+    return munit_suite_main(&test_suite, NULL, argc, argv);
+}
+```
+
+# Comment inclure `munit` dans le code?
+
+\footnotesize
+
+Deux choix principaux:
+
+## Copier les fichiers depuis [ce lien](https://github.com/nemequ/munit)
+
+* On a besoin que des fichiers `munit.h` et `munit.c`.
+
+## L'utilisation de sous-modules git
+
+* Dans un repo git existant, ici `~/test`:
+
+    ```git
+    $ git submodule add https://github.com/nemequ/munit
+    Cloning into '~/test/munit'...
+    remote: Enumerating objects: 615, done.
+    remote: Total 615 (delta 0), reused 0 (delta 0), pack-reused 615
+    Receiving objects: 100% (615/615), 245.72 KiB | 2.61 MiB/s, done.
+    Resolving deltas: 100% (401/401), done.
+    $ ls -ltr
+    total 4
+    drwxr-xr-x 2 orestis orestis 4096 Mar 16 23:18 munit
+    ```