my_printf

Présentation par Loïc BRANSTETT

Le 04/12/2018

Sommaire

  1. Présentation du projet
  2. Organisation
  3. Architecture
  4. Tests automatisé
  5. Bonus
  6. Questions ?

Présentation du projet

  • printf like
  • print formatted
image/svg+xml Input: printf("Color %s, Number %d, Float %4.2f", "red", 123456, 3.14); Output: Color red, Number 123456, Float 3.14

Organisation

Timeline

Architecture

my_printf -> my_vsnprintf

  • v: va_list (Listes des arguments)
  • s: buffer (Mémoire tampon)
  • n: lenght (Longueur maximal)
  • printf: print format (Format)

Traitement caractères par caractères

Stockage des informations dans une structure

Stockage a l'aide de bit mask

Traitement du flag puis "affichage"

Tests automatisé

[===] Synthèse: Testés: 79 | Validés: 79 | Échoués: 0 | Plantages: 0

#include <criterion/criterion.h>
#include <criterion/redirect.h>
#include "my_printf.h"

void redirect_all_std(void)
{
    cr_redirect_stdout();
    cr_redirect_stderr();
}

Test(my_printf, put_string, .init=redirect_all_std)
{
    cr_assert_eq(my_printf("%s", "SALUT"), 5);
    cr_assert_stdout_eq_str("SALUT");
}

Test(my_printf, put_string_false, .init=redirect_all_std)
{
    cr_assert_eq(my_printf("%s\n"), 7);
    cr_assert_stdout_eq_str("(null)\n");
}

Tests automatisé

------------------------------------------------------------------------------
                           GCC Code Coverage Report
Directory: .
------------------------------------------------------------------------------
File                                       Lines    Exec  Cover   Missing
------------------------------------------------------------------------------
my.c                                          13      13   100%   
my_printf.c                                   33      28    84%   44-48
my_vsnprintf.c                                74      69    93%   50-52,69-70
my_vsnprintf_eval.c                           26      26   100%   
my_vsnprintf_eval_numbers.c                   47      44    93%   20-21,44
my_vsnprintf_eval_strings.c                   44      44   100%   
my_vsnprintf_ntoa.c                           66      57    86%   18,35-37,42-46
my_vsnprintf_numbers.c                        21      20    95%   41
my_vsnprintf_out.c                            17      14    82%   37,41-42
tests/test_my_printf.c                       318     318   100%   
------------------------------------------------------------------------------
TOTAL                                        659     633    96%
------------------------------------------------------------------------------

Bonus

Documentation avec Doxygen (html, html interactif, pdf, man)

Bonus

Fonctions analogues

Bonus

Flags supplémentaire

  • %n
  • .(nombre) et (nombre)
  • .* et *
  • j et z
  • (espace)

Bonus

Questions ?

FIN

my_printf

By urgau-1

my_printf

  • 240