Exemple robustesse

text/x-c++src robustesse.cpp — 2.2 KB

Contenu du fichier

// #define NDEBUG

#include <cassert>  // pour utiliser assert
#include <cstdlib>  // pour utiliser EXIT_SUCCESS
#include <iostream>

#define ERROR_N_NEGATIVE -1
#define ERROR_N_TOO_BIG -2
#define ERROR_UNKNOWN -99

using namespace std;


int main()
{
    int factorielle (int n) ;

    const int VALEUR_N = 13;

    cout << "factorielle " << VALEUR_N << " = " << factorielle(VALEUR_N) << endl;

    return EXIT_SUCCESS;
}

int factorielle (int n)
{
    int validation(int);
    int calcul(int);

    int resultat = validation(n);

    switch ( resultat )
    {
        case ERROR_N_NEGATIVE :
            cout << "erreur : parametre negatif." << endl;
            break;
        case ERROR_N_TOO_BIG :
            cout << "erreur : parametre trop grand." << endl;
            break;
        case EXIT_SUCCESS :
            resultat = calcul(n); // nombre positif strictement
            break;
        default :
            cout << "erreur inconnue" << endl;
            resultat = ERROR_UNKNOWN;
    }

    return resultat;
}


int validation(int n)
{
    if (n < 0) return ERROR_N_NEGATIVE;
    if (n > 12) return ERROR_N_TOO_BIG;

    return EXIT_SUCCESS;
}


int calcul(int n)
{
    assert(n >= 0);
    assert(n <= 12);

    int resultat = 1 ;
    for (int i = 1; i <= n; i+=1)
    {
        resultat *= i ;
    }
    return resultat;
}

/** \brief lance la serie des tests unitaires et d'integrations
*/
int main_tests()
{
    int tests_factorielle (int min, int max);
    int tests_validation (int min, int max);
    int tests_calcul (int min, int max);

    const int MIN = -1;
    const int MAX = 13;

    tests_factorielle (MIN,MAX);
    tests_validation (MIN,MAX);
    tests_calcul (MIN,MAX);

    return EXIT_SUCCESS;
}

int tests_factorielle (int min, int max)
{
    int factorielle (int);

    for (int i = min; i <= max; i+=1)
    {
        cout << factorielle(i) << endl;
    }

    return EXIT_SUCCESS;
}

int tests_validation (int min, int max)
{
    int validation (int);

    for (int i = min; i <= max; i+=1)
    {
        cout << validation(i) << endl;
    }

    return EXIT_SUCCESS;
}

int tests_calcul (int min, int max)
{
    int calcul (int);

    for (int i = min; i <= max; i+=1)
    {
        cout << calcul(i) << endl;
    }

    return EXIT_SUCCESS;
}