/* semplice programma di test delle liste ordinate
 * si generano dei numeri casuali li si inseriscono
 * successivamente si ricercano e infine si rimuovono */

#include<stdio.h>
#include<stdlib.h>
#include<time.h>
#include"lista.h"


int main(int argc, char **argv){

 int ii,jj,tt;
 type_lista a;
 int num;
 int esito;

 /* inizializzazione */
 num=atoi(argv[1]);
 srand(clock());
 srand(22);
 creaLISTA(num);

 /* inserimento numeri */
 for(ii=0;ii<num;++ii){
  printf("%d\r", ii);
  inserisciinLISTA(rand()*32000.0f/RAND_MAX);
  }
 printf("\nInseriti %d numeri\n", elementiinLISTA());

 /* ricerca numeri */
 tt=0;
 for(ii=0;ii<num;++ii){
  printf("%d\r", ii);
  a=rand()*32000.0f/RAND_MAX;
  esito=trovainLISTA(a,&jj);
  if(esito==LISTA_OK)
     ++tt;
  }
 printf("Ho trovato %d dei %d numeri cercati\n",tt,num);

 /* cancellazione numeri */
 tt=0;
 for(ii=0;ii<num;++ii){
  printf("%d\r", ii);
  a=rand()*32000.0f/RAND_MAX;
  esito=trovainLISTA(a,&jj);
  if(esito==LISTA_OK){
    ++tt;
    rimuovidaLISTA(jj);
   }
  }
 printf("Ho rimosso %d dei %d numeri cercati\n",tt,num);
 printf("\n");

 return 0;
}

/* Performance su Pentium MMX 200MHz con
 * lista basata su array di 32000 elementi
 *
 * time   seconds  calls  name    
 *
 * 66.61  16.40    32000  inserisciinLISTA
 * 32.25   7.94    10401  rimuovidaLISTA
 *  0.81   0.20    64000  trovainLISTA
 *  0.32   0.08           main
 *  0.00   0.00        1  creaLISTA
 * 
 * Stesso ma con ottimizzazioni
 *
 * 56.42   4.04    32000  inserisciinLISTA
 * 40.64   2.91    10407  rimuovidaLISTA
 *  2.65   0.19    64000  trovainLISTA
 *  0.28   0.02           main
 *  0.00   0.00        1  creaLISTA
 */