Skip to content
Snippets Groups Projects
main.cpp 1.97 KiB
Newer Older
  • Learn to ignore specific revisions
  • david's avatar
    david committed
    #include<iostream>
    
    david's avatar
    david committed
    #include <chrono>
    
    david's avatar
    david committed
    #include<cstdlib>	
    #include "arraylist.hpp"
    #include "analyzer.hpp"
    
    
    
    david's avatar
    david committed
    using namespace std::chrono;
    
    
    
    david's avatar
    david committed
    int main(int argc, char ** argv){
      int i;
      // Tableau dynamique.
      ArrayList<int> a;
      // Analyse du temps pris par les opérations.
      Analyzer time_analysis;
      // Analyse du nombre de copies faites par les opérations.
      Analyzer copy_analysis;
    
      // Analyse de l'espace mémoire inutilisé.
      Analyzer memory_analysis;
    
    david's avatar
    david committed
      high_resolution_clock::time_point before, after;
    
    david's avatar
    david committed
      // Booléen permettant de savoir si une allocation a été effectuée.
      bool memory_allocation;
    
      for(i = 0; i < 1000000 ; i++){
        // Ajout d'un élément et mesure du temps pris par l'opération.
    
    david's avatar
    david committed
        before = high_resolution_clock::now();
    
    david's avatar
    david committed
        memory_allocation = a.append(i);
    
    david's avatar
    david committed
        after = high_resolution_clock::now();
    
    david's avatar
    david committed
    
        // Enregistrement du temps pris par l'opération
    
    david's avatar
    david committed
        auto duration = std::chrono::duration_cast<std::chrono::nanoseconds>(after - before);    
        time_analysis.append(static_cast<double>(duration.count()));
    
    david's avatar
    david committed
        // Enregistrement du nombre de copies efféctuées par l'opération.
        // S'il y a eu réallocation de mémoire, il a fallu recopier tout le tableau.
        copy_analysis.append( (memory_allocation)? i:1 );
    
        // Enregistrement de l'espace mémoire non-utilisé.
        memory_analysis.append( a.capacity() - a.size() );
    
    david's avatar
    david committed
      }
    
      // Affichage de quelques statistiques sur l'expérience.
      std::cerr<<"Total cost :"<<time_analysis.get_total_cost()<<std::endl;
      std::cerr<<"Average cost :"<<time_analysis.get_average_cost()<<std::endl;
      std::cerr<<"Variance :"<<time_analysis.get_variance()<<std::endl;
      std::cerr<<"Standard deviation :"<<time_analysis.get_standard_deviation()<<std::endl;    
    
    
      // Sauvegarde les données de l'expérience.
    
    david's avatar
    david committed
      time_analysis.save_values("../plots/dynamic_array_time_cpp.plot");
      copy_analysis.save_values("../plots/dynamic_array_copy_cpp.plot");
      memory_analysis.save_values("../plots/dynamic_array_memory_cpp.plot");
    
    david's avatar
    david committed
      
      return 0;
    }