/**********************************************************************************

*                                                                                 *

*   NOME PROGRAMMA: auto_test.c                                                   *

*   AUTORE:         Buttolo Marco                                                 * 

*   SCOPO:          effettuare un semplicissimo test di verifica sul minore tra   *

*                   due numeri, in versione automatica.                           *

*                                                                                 *

**********************************************************************************/



#include <stdio.h>	        //direttive al preprocessore

#include <string.h>

#include <stdlib.h>

#include <CUnit/CUnit.h>    

#include <CUnit/Basic.h>

#include <CUnit/Console.h>

#include <CUnit/Automated.h>

#include <CUnit/CUCurses.h>



//prototipi di funzione

int compara(int, int);

void auto_test(void);

void stampa_risultato(int);

int inizializza_suite_successo(void);

int inizializza_suite_fallimento(void);



//entry point programma

int main()

{

   

   CU_pSuite pSuite = NULL;

   int numero1=2, numero2=4, risultato;	

   

   //chiamata funzione somma

   risultato=compara(numero1, numero2);

   system("clear");



   //inizializzazione registro di test

   if (CUE_SUCCESS != CU_initialize_registry())

      return CU_get_error();   //ritorna errore in caso di fallimento



   //aggiunta suite a registro

   pSuite = CU_add_suite("Suite_success", inizializza_suite_successo, inizializza_suite_fallimento);

   if (NULL == pSuite)

   {

      CU_cleanup_registry();

      return CU_get_error();

   }



   //aggiunta test alla suite

   if (NULL == CU_add_test(pSuite, "auto_test_1", auto_test))

   {

      CU_cleanup_registry();

      return CU_get_error();

   }

   

   //avvio dei test

   CU_basic_set_mode(CU_BRM_VERBOSE);

   CU_basic_run_tests();

   printf("\n");

   CU_basic_show_failures(CU_get_failure_list());

   printf("\n\n");



   //stampa risultato

   if(risultato==0)

   {

      stampa_risultato(risultato);

      CU_PASS("Attenzione: risultato nullo!!!"); 

   }

   else

   {

     CU_FAIL("Stampa corretta risultato");

   }



   //avvia test usando interfaccia automatica

   CU_automated_run_tests();

   //CU_list_tests_to_file();

      

   //pulizia registro

   CU_cleanup_registry();

   return CU_get_error();



}



/***************************************************************************

*                                                                          *

*   NOME FUNZIONE: inizializza_suite_successo()                            *

*   SCOPO:         funzione di inizializzazione suite in caso di successo. *

*                                                                          *

***************************************************************************/ 

int inizializza_suite_successo(void)

{

  return 0;

}



/***************************************************************************

*                                                                          *

*   NOME FUNZIONE: inizializza_suite_fallimento()                          *

*   SCOPO:         funzione di inizializzazione suite in caso di fail.     *

*                                                                          *

***************************************************************************/ 

int inizializza_suite_fallimento(void)

{ 

  return -1; 

}



/**************************************************************************

*                                                                         *

*   NOME FUNZIONE: compara().                                             *

*   SCOPO:         funzione che effettua una semplice comparazione tra    *

*                  due numeri                                             *

*                                                                         *

**************************************************************************/

int compara(int num1, int num2)

{

   return (num1 < num2) ? num1:num2;



}



/**************************************************************************

*                                                                         *

*   NOME FUNZIONE: stampa_risultato()                                     *

*   SCOPO:         funzione che stampa a video il risultato della comp.   *

*                                                                         *

**************************************************************************/

void stampa_risultato(int risultato)

{

  printf("\n Risultato=%d", risultato);

}



/***************************************************************************

*                                                                          *

*   NOME FUNZIONE: test_compara().                                         *

*   SCOPO:         effettua una serie di asserzioni di test.               *

*                                                                          *

***************************************************************************/

void auto_test(void)

{

      CU_ASSERT(compara(1,2) == 1);

      CU_ASSERT(compara(3,-2) == -2);

      CU_ASSERT(compara(2,2) == 2);

}