#!/usr/bin/env perl
use strict;
use warnings;

###############################################################################################
# Script pour une comparaison entre deux fichiers de même extension                           #
# Auteur: Erwan KERGOURLAY                                                                    #
# Script qui compare un fichier de références avec le fichier résultat sortit par Herezh      #
###############################################################################################


my $version = "1."; 

#------------------- écriture de l'entete à l'écran -----------------#
print  ("\n");
print  ("\n" . '#############################################################################');
print  ("\n" . '#                                                                           #');
print  ("\n" . '#				comparaison.pl                                              #');
print  ("\n" . '#############################################################################');
print  ("\n" . '#  licence GPL, 		       erwan.kergourlay@univ-ubs.fr                 #');
print  ("\n" . '#                                                                           #');
print  ("\n" . '#  version '."$version".'                                                   #');
print  ("\n" . '#############################################################################');
print  ("\n\n\n");
#------------------- fin écriture de l'entete à l'écran -----------------#

my $HZ=$ARGV[0];

print("La version d'herezh testée est: $HZ \n");

#------------------- déclaration des variables -----------------#

    my $valeur;

    #**Déclaration des variables qui contiennent les fichiers de références**#
    #------------------------------------------------------------------------#
    my $fichier_her_ref = "cube_soude.her.ref1";
    my $fichier_lis_ref = "cube_soude.lis.ref1";
    #------------------------------------------------------------------------#

    #**Déclaration des variables qui contiennent les fichiers résultats sortis par Herezh**#
    #------------------------------------------------------------------------#
        #**Avec vérification que le fichier existe, sinon une erreure est générée et la comparaison ne peut pas être faites**#
        #**Utilisation de l'opérateur de comparaison de chaînes de caractère**#
    #------------------------------------------------------------------------#
    my $fichier_her_test = "cube_soude.her";
    my $fichier_lis_test = "cube_soude.lis";

    if( -e "$fichier_her_test" && -e "$fichier_lis_test") #commande -e permet de voir si le fichier existe
    {
        #print("Les fichiers .her et .lis ont été créés lors du test de la version d'Herezh \n");
        $valeur=0;
    }
    else
    {
        #print("Les fichiers .her et .lis n'ont pas été créés lors du test de la version d'Herezh \n");
        $valeur=1;
    }

    #**Déclaration des fichiers temporaires*#
    #------------------------------------------------------------------------#
    my $fichier_temp_her_ref = "fichier_temp_her_ref.txt";
    my $fichier_temp_her_test = "fichier_temp_her_test.txt";

    my $fichier_temp_lis_ref = "fichier_temp_lis_ref.txt";
    my $fichier_temp_lis_test = "fichier_temp_lis_test.txt";

#------------------- fin déclaration des variables -----------------#


#------------------- programme de comparaison -----------------#

if($valeur==0)
{
    #---On commence par faire une lecture du fichier .her de référence et le fichier .her de test---#
    #---On extrait de ces fichiers uniquement les parties données puis on va les comparer entre-elles par rapport à des fichiers temporaires---#
    open (HER_REF, "$fichier_her_ref");
    open (HER_TEST, "$fichier_her_test");
    
    open (FICHIER_TEMP_HER_REF,">$fichier_temp_her_ref");
    open (FICHIER_TEMP_HER_TEST,">$fichier_temp_her_test");
    
        while(<HER_REF>)
        {
            my $ligne_ref = $_; #on déclare une variable qui va sauvegarder la ligne en cours
            chomp($ligne_ref); #on retire à la fin de cette ligne, le retour à la ligne
            $ligne_ref=~ s/^[ \t]+//mg; #on supprimme toutes les combinaisons de tabulation et d'espace
    
            #Si on n'a pas de '#' et 'noeuds' et 'elements', la condition est validée
            if(index($ligne_ref,'#') == -1 && index($ligne_ref,'noeuds') == -1 && index($ligne_ref,'elements') == -1)
            {
                my @tab_ref = split (/\s+/,$ligne_ref);
                
                if(defined($tab_ref[0]))
                {
                    print FICHIER_TEMP_HER_REF ("@tab_ref \n");
                }
            }
        }
    close FICHIER_TEMP_HER_REF;
    close HER_REF;
    
        while(<HER_TEST>)
        {
            my $ligne_test = $_;
            chomp($ligne_test);
            $ligne_test=~ s/^[ \t]+//mg;
    
            if(index($ligne_test,'#') == -1 && index($ligne_test,'noeuds') == -1 && index($ligne_test,'elements') == -1)
            {
                my @tab_test = split (/\s+/,$ligne_test);
                
                if(defined($tab_test[0]))
                {
                    print FICHIER_TEMP_HER_TEST ("@tab_test \n");
                }
            }
        }
    close FICHIER_TEMP_HER_TEST;
    close HER_TEST;

    #---On commence par faire une lecture du fichier .lis de référence et le fichier .lis de test---#
    #---On extrait de ces fichiers uniquement les parties données puis on va les comparer entre-elles par rapport à des fichiers temporaires---#
    open (LIS_REF, "$fichier_lis_ref");
    open (LIS_TEST, "$fichier_lis_test");
    
    open (FICHIER_TEMP_LIS_REF,">$fichier_temp_lis_ref");
    open (FICHIER_TEMP_LIS_TEST,">$fichier_temp_lis_test");
    
    while(<LIS_REF>)
    {
        my $ligne_ref = $_; #on déclare une variable qui va sauvegarder la ligne en cours
        chomp($ligne_ref); #on retire à la fin de cette ligne, le retour à la ligne
        $ligne_ref=~ s/^[ \t]+//mg; #on supprimme toutes les combinaisons de tabulation et d'espace
        
        #Si on n'a pas de '#' et 'noeuds' et 'elements', la condition est validée
        if(index($ligne_ref,'#') == -1)
        {
            my @tab_ref = split (/\s+/,$ligne_ref);
            
            if(defined($tab_ref[0]))
            {
                print FICHIER_TEMP_LIS_REF ("@tab_ref \n");
            }
        }
    }
    close FICHIER_TEMP_LIS_REF;
    close LIS_REF;
    
    while(<LIS_TEST>)
    {
        my $ligne_test = $_;
        chomp($ligne_test);
        $ligne_test=~ s/^[ \t]+//mg;
        
        if(index($ligne_test,'#') == -1)
        {
            my @tab_test = split (/\s+/,$ligne_test);
            
            if(defined($tab_test[0]))
            {
                print FICHIER_TEMP_LIS_TEST ("@tab_test \n");
            }
        }
    }
    close FICHIER_TEMP_LIS_TEST;
    close LIS_TEST;
    
    #---On verifie si les deux fichiers .her sont identiques---#
    system ("cmp $fichier_temp_her_test $fichier_temp_her_ref");
    if ( $? == 0 )
    {
        print("Les deux fichiers .her sont identiques\n");
        $valeur=$valeur+2; #on ajoute 2 dans le cas où le fichier .her est correct
    }
    elsif ( $? != 0 )
    {
        print("Les deux fichiers .her sont différents\n");
        $valeur=$valeur+1; #on ajoute 1 dans le cas où le fichier .her est incorrect
    }
    
    #---On verifie si les deux fichiers .lis sont identiques---#
    system ("cmp $fichier_temp_lis_test $fichier_temp_lis_ref");
    if ( $? == 0 )
    {
        print("Les deux fichiers .lis sont identiques\n");
        $valeur=$valeur+3; #on ajoute 3 dans le cas où le fichier .lis est correct
    }
    elsif ( $? != 0 )
    {
        print("Les deux fichiers .lis sont différents\n");
        $valeur=$valeur+1; #on ajoute 1 dans le cas où le fichier .lis est incorrect
    }

}

#------------------- Fin programme de comparaison -----------------#


#------------------- Bilan comparaison fichier -----------------#
    #----Remarques----#
    # Si valeur=1, alors les nouveaux fichiers .her et .lis n'ont pas été créés.
    # Si valeur=2, alors le fichier .her et le fichier .lis sont incorrects.
    # Si valeur=3, alors le fichier .her est correct mais le fichier .lis est incorrect.
    # Si valeur=4, alors le fichier .her est incorrect mais le fichier .lis est correct.
    # Si valeur=5, alors les deux fichiers sont corrects
    #----Fin remarques----#
if($valeur==1)
{
    print("Les fichiers $fichier_her_test et $fichier_lis_test n'ont pas été créés avec la version d'herezh testée: $HZ\n");
    print ("resultat verification: ECHEC\n");
}
elsif($valeur==2)
{
    print("Le fichier $fichier_her_test a bien été créé mais son contenu est différent du fichier $fichier_her_ref et le fichier $fichier_lis_test a bien été créé mais son contenu est différent du fichier $fichier_lis_ref\n");
    print ("resultat verification: ECHEC\n");
}
elsif($valeur==3)
{
    print("Le fichier $fichier_her_test a bien été créé et son contenu est similaire au fichier $fichier_her_ref mais le fichier $fichier_lis_test a bien été créé mais son contenu est différent du fichier $fichier_lis_ref\n");
    print ("resultat verification: ECHEC\n");
}
elsif($valeur==4)
{
    print("Le fichier $fichier_her_test a bien été créé mais son contenu est différent du fichier $fichier_her_ref et le fichier $fichier_lis_test a bien été créé et son contenu est similaire au fichier $fichier_lis_ref\n");
    print ("resultat verification: ECHEC\n");
}
elsif($valeur==5)
{
    print("Le fichier $fichier_her_test a bien été créé et son contenu est similaire au fichier $fichier_her_ref et le fichier $fichier_lis_test a bien été créé et son contenu est similaire au fichier $fichier_lis_ref\n");
    print ("resultat verification: OK\n");
}
#------------------- Fin bilan comparaison fichier -----------------#

#------------------- Ménage dans le répertoire -----------------#
system ("rm -f $fichier_her_test $fichier_lis_test $fichier_temp_her_test $fichier_temp_her_ref $fichier_temp_lis_test $fichier_temp_lis_ref");

