nouvelle possibilite (fonctionnelle mais a ameliorer) : possibilite d interrompre la batterie en cours avec ctr+c sans alterer les repertoires de tests (grace a des modifs du script Perl/test.pl) voir doc doc_procedure_verification.pdf section 3 pour la procedure et section 6 pour le detail des modifs; nouvel affichage dans le rapport de test : temps de calcul de chaque test (et legere modif de l en-tete du rapport avec affichage du nom de la machine)
This commit is contained in:
parent
a559c16fe9
commit
619bf47a3b
5 changed files with 193 additions and 56 deletions
|
@ -136,7 +136,7 @@ L'arborescence du projet CVS est la suivante :\\
|
|||
|
||||
|
||||
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
|
||||
\section{Lancement de la batterie de tests}
|
||||
\section{Lancement de la batterie de tests}\label{section_lancement_batterie_tests}
|
||||
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
|
||||
|
||||
Il y a actuellement deux scripts permettant de lancer la batterie de tests. Le script \verb|verifier_exeHZ.zsh| est la version originale historique. Le script \verb|verifier_exeHZ.pl| est une version plus récente offrant plus de possibilités sous forme d'options. Pour l'instant, ces deux scripts existent. A terme, si \verb|verifier_exeHZ.pl| s'avère satisfaisant, la version \verb|.zsh| dispara\^itra du projet.\\
|
||||
|
@ -147,6 +147,16 @@ Avant de d
|
|||
\item[2-] exécuter le script \verb|verifier_exeHZ.zsh| ou \verb|verifier_exeHZ.pl [...options...]| en lui indiquant l'exécutable à tester\\
|
||||
\end{itemize}
|
||||
|
||||
Le rapport obtenu après exécution de la batterie indique pour chaque test si il est réussi ainsi que le temps de calcul obtenu par la commande \verb|time|.\\
|
||||
|
||||
|
||||
{\color{blue} \noindent \bf \underline{Interrompre l'exécution de la batterie (**procédure temporaire**)} :\rm
|
||||
|
||||
En l'état actuel, il est possible de stopper l'exécution de la batterie avec \verb|ctrl+c|. Cependant, la gestion de cette interruption n'est pas encore bien gérée. Il faut faire un certain nombre de \verb|ctrl+c| jusqu'à ce que le programme s'arr\^ete (typiquement, il faut rester appuyer sur \verb|ctrl+c|). Ensuite, il faut vérifier s'il y a des processus Herezh++ qui persistent en fond de t\^ache et tuer ces processus (\verb|kill -9|). Ces processus sont faciles à repérer avec la commande \verb|ps| gr\^ace au nom de leur commande associée qui est de la forme : \verb|testHZ[un entier] -f fichier.info|. Et enfin, éventuellement, on peut effacer les répertoires temporaires encore présents dans \verb|/tmp| pour éviter leur accumulation (ces répertoires ont un nom de la forme : \verb|/tmp/test.pl_[un entier]|.
|
||||
|
||||
\bf NB : cette procédure d'interruption n'altère pas les répertoires originaux de tests de la batterie. Bien que non optimale, cette procédure est s\^ure et n'aura aucune influence sur le prochain lancement de la batterie.\rm
|
||||
}
|
||||
|
||||
\subsubsection*{\underline{Script \texttt{verifier\_exeHZ.zsh}} :}
|
||||
Le script \verb|verifier_exeHZ.zsh| lance automatiquement tous les tests présents dans le répertoire courant et ses sous-répertoires. Un test est un répertoire dont le nom commence par \verb|Test_R| ou \verb|Test_L| (voir section \ref{section_organisation_tests}). Le script peut \^etre lancé dans n'importe quel répertoire contenant le répertoire \verb|Perl|. Il produit un rapport de tests pour les tests \verb|Test_R| (tests rapides) et un rapport pour les tests \verb|Test_L| (tests longs). Ces rapports sont contenus dans le répertoire \verb|Rapport| (éventuellement créé si il n'existe pas au lancement) sous le nom \verb|rapport_test_R.txt| et \verb|rapport_test_L.txt|. Le script affiche automatiquement ces rapports si l'éditeur de texte \verb|nedit| est disponible.
|
||||
|
||||
|
@ -244,7 +254,8 @@ Le script \verb|verifier_exeHZ.zsh| ou \verb|verifier_exeHZ.pl| a pour fonction
|
|||
|
||||
Pour chaque calcul, un éventuel fichier d'extension \verb|.commande|[i] contient des commandes interactives pour répondre aux différents menus interactifs proposés par Herezh++. Par défaut, un calcul Herezh est exécuté avec l'option \verb|-f| suivie du nom du fichier \verb|.info| (calcul classique). Si le fichier \verb|.info| ne contient pas le mot-clé \verb|dimension|, l'option utilisée est \verb|-n| suivie du fichier \verb|.info| (création interactive d'un fichier .info). Il est également possible de définir complètement les arguments donnés à Herezh++ dans un fichier \verb|.argument|[i]. Pour plus d'informations sur les fichiers facultatifs, on peut se référer à la section \ref{section_fichiers_facultatifs}.\\
|
||||
|
||||
Une fois un test terminé, le répertoire du test est restauré dans son état d'origine (restauration de l'état initial du fichier \verb|.info| et suppression de tous les fichiers qui n'étaient pas présents à l'origine).
|
||||
L'exécution d'un test se fait dans un répertoire temporaire dans \verb|/tmp|. On s'assure ainsi que le contenu du répertoire d'origine ne sera jamais altéré, quelque soit le déroulement du test.\\
|
||||
|
||||
|
||||
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
|
||||
\subsubsection{Vérification}\label{subsubsection_verification}
|
||||
|
@ -757,6 +768,18 @@ remarque : modif
|
|||
2) possibilité d'insérer des formules et caractères mathématiques dans les fichiers \verb|README| entre simples \$ ou doubles \$\$ (voir section \ref{section_fichiers_obligatoires} concernant le fichier \verb|README|)\\
|
||||
\end{itemize}%tiret
|
||||
|
||||
\item[$\bullet$] 2015-11-25 (Julien Troufflard) :
|
||||
\begin{itemize}
|
||||
\item[-] modif script \verb|Perl/genere_rapport.pl| : modifification de l'en-t\^ete du rapport de tests avec notamment l'affichage du nom de la machine (via variable environnement \$HOST)
|
||||
\item[-] modif script \verb|Perl/test.pl| :\\
|
||||
1) gestion de bugs et améliorations diverses :\\
|
||||
- remplacement de "\verb|cp -nf|" par l'encha\^inement "\verb|rm -f|" + "\verb|cp|" (car dans certaines versions de \verb|cp|, l'option \verb|-n| n existe pas)\\
|
||||
- modification majeure : désormais, un test s'éxecute dans un repertoire de travail sur \verb|/tmp| (voir variable \verb|$repertoire_de_travail|). L'intér\^et majeur est de ne jamais modifier le répertoire d'origine du test quelque soit le déroulement du test. Cette stratégie permet actuellement d'interrompre la batterie avec \verb|ctrl+c| sans conséquence sur le contenu des répertoires de test (voir procédure d'interruption à la section \ref{section_lancement_batterie_tests}). De plus, une conséquence indirecte bénéfique de ceci est que m\^eme quand un test se déroule correctement, il se pouvait que certains fichiers soient légèrement modifiés (par exemple : le numéro de version Herezh en en-t\^ete du fichier \verb|cube_soude.her| du test \verb|FONCTION_UNIQUE/UTILITAIRES/Test_R_fusion-noeuds-voisins|). En conséquence, cela générait un archivage CVS supplémentaire avec envoi intempestif d'un mail aux membres du projet pour chacun de ces fichiers, alors qu'en realité, ils n'étaient pas fondamentalement et sciemment modifiés. Ce problème mineur est désormais résolu.\\
|
||||
- comparaison maple : désormais, si toutes les grandeurs d'un test sont OK, un affichage allégé est produit dans le rapport (juste une ligne pour indiquer que toutes les grandeurs sont OK sans détailler les comparaisons)\\
|
||||
2) affichage des temps de calcul :\\
|
||||
- dans la subroutine \verb|lancement_commande()| : lancement de Herezh via la tournure \verb/tsch -c "time HZ -f fic.info" | tee fic.log/ pour récuperer le temps CPU dans le fichier .log (l'utilisation de \verb|tcsh -c|, c'est uniquement pour que le résultat de \verb|time| soit bien récupéré sur \verb|STDOUT|, donc dans \verb|fic.log|)\\
|
||||
- juste après l'appel à \verb|lancement_commande()| $\Rightarrow$ saisie du temps de calcul dans le \verb|.log| et affichage dans le rapport de test (juste après le nom du test)\\
|
||||
\end{itemize}%tiret
|
||||
|
||||
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
|
||||
%template d ajout d une nouvelle mise à jour (composé d'une puce "bullet" avec Date et auteur de la modif, suivie d une série de puce "-"
|
||||
|
|
|
@ -68,6 +68,7 @@ else {#sinon => le label de la version sera : HZpp $no_version
|
|||
|
||||
#-------------------------------------------------
|
||||
#3) ecriture de l en-tete du fichier rapport
|
||||
# (rq : affichage eventuel du nom de la machine si la variable environnement $HOST existe)
|
||||
#-------------------------------------------------
|
||||
open (FSOR,">$file");
|
||||
print FSOR "---------------------------------------\n";
|
||||
|
@ -75,8 +76,13 @@ open (FSOR,">$file");
|
|||
print FSOR "---------------------------------------\n";
|
||||
print FSOR "- version HZ++ : $LABEL_VERSION\n";
|
||||
print FSOR "\n";
|
||||
print FSOR "- Batterie de tests lancee\n";
|
||||
print FSOR "- le $mjour/$mois/$annee\n";
|
||||
print FSOR "- a $heure:$min (heure locale)\n";
|
||||
print FSOR "- date : $mjour/$mois/$annee\n";
|
||||
print FSOR "- heure : $heure:$min (heure locale)\n";
|
||||
if(defined $ENV{'HOST'}) {
|
||||
print FSOR "- machine : $ENV{'HOST'}\n";
|
||||
}
|
||||
else {
|
||||
print FSOR "- machine : inconnue (variable environnement \"\$HOST\" non definie)\n";
|
||||
}
|
||||
print FSOR "---------------------------------------\n\n";
|
||||
close (FSOR);
|
||||
|
|
206
Perl/test.pl
206
Perl/test.pl
|
@ -83,13 +83,18 @@ my $TAILLE_MAX_FIC_REDIR = 250*1024*1024;#octets
|
|||
|
||||
|
||||
########################### Variables de fichier ###########################
|
||||
my $repertoire_racine = cwd; ###---Repertoire racine (celui dans lequel le script verifier_exeHZ a ete lance)
|
||||
my $repertoire_test; ###---Repertoire test
|
||||
my $fichier_test = 'test0'; ###---Fichier .info a tester
|
||||
my $fichier_rapport = 'rapport_test.txt'; ###---Fichier de rapport des tests
|
||||
my $fichier_temp_maple = 'xxx_princ.maple'; ###---Fichier pour recuperer $valeur
|
||||
my @fichiers; ###---Liste du contenu initial du repertoire de test
|
||||
my $repertoire_racine = cwd; ###---Repertoire racine (celui dans lequel le script verifier_exeHZ a ete lance)
|
||||
my $repertoire_test; ###---Repertoire test (il s agit du repertoire original, sachant que le test sera concretement execute dans le repertoire $repertoire_de_travail defini par la suite)
|
||||
my $fichier_test = 'test0'; ###---Fichier .info a tester
|
||||
my $fichier_rapport = 'rapport_test.txt'; ###---Fichier de rapport des tests
|
||||
my $fichier_temp_maple = 'xxx_princ.maple'; ###---Fichier pour recuperer $valeur
|
||||
my @fichiers; ###---Liste du contenu initial du repertoire de test
|
||||
|
||||
my $repertoire_de_travail = "/tmp/$NOM_PROG\_$$"; ###---Repertoire de travail dans lequel les tests vont etre reellement executes
|
||||
### (NE PAS MODIFIER LE FAIT QUE CE SOIT SUR /tmp ... au pire, il faut au moins que ce
|
||||
### soit un chemin absolu et vers un repertoire facilement disponible sur n importe quelle OS Mac ou Linux)
|
||||
### Le choix actuel (2015-11-25) a ete de nommer ce repertoire en fonction du nom de ce script suivi du pid
|
||||
### du processus, ce qui a priori le rend unique)
|
||||
########################### Variables executable Herezh ###########################
|
||||
my $exeHZ; ###---Executable Herezh
|
||||
my $hzchemin; ###---path vers l executable Herezh
|
||||
|
@ -182,6 +187,15 @@ $hzchemin = verif_commande($exeHZ);
|
|||
##########################################################################
|
||||
##########################################################################
|
||||
##########################################################################
|
||||
|
||||
#verification prealable que le repertoire de travail $repertoire_de_travail specifie dans l en-tete de ce script est bien un
|
||||
# repertoire en chemin absolu (si ce n est pas le cas, il pourrait y avoir de graves problemes d execution, donc autant bien verifier maintenant)
|
||||
($repertoire_de_travail =~ /^\s*\//) or do {
|
||||
printRapport("$repertoire_test\n -> ECHEC : le repertoire de travail ($repertoire_de_travail) specifie dans l en-tete du script $NOM_PROG doit etre en chemin absolu (veuillez modifier la variable \$repertoire_de_travail du script $0)\n\n");
|
||||
print "**Erreur Test $repertoire_test : le repertoire de travail ($repertoire_de_travail) specifie dans l en-tete du script $NOM_PROG doit etre en chemin absolu (veuillez modifier la variable \$repertoire_de_travail du script $0)\n";
|
||||
exit;
|
||||
};
|
||||
|
||||
print "\n";
|
||||
print " TYPE DE CALCUL = $exeHZ\n";
|
||||
print "############################################################\n";
|
||||
|
@ -199,7 +213,7 @@ print " Nom du repertoire racine = $repertoire_racine\n";
|
|||
print " Deplacement dans le repertoire Test\n";
|
||||
chdir ("$repertoire_test");
|
||||
|
||||
#liste du contenu initial du repertoire de test (rq : servira plus tard a retablir l etat d origine du repertoire avant de terminer ce script)
|
||||
#liste du contenu initial du repertoire de test
|
||||
@fichiers = glob("*");
|
||||
$_ = $#fichiers + 1;
|
||||
print " Nombre de fichiers dans le repertoire $repertoire_test = $_\n";
|
||||
|
@ -209,9 +223,6 @@ $fichier_test = glob("*.info");
|
|||
$fichier_test =~ s/.info$//;#suppression de l extension
|
||||
print " Nom du fichier teste dans le repertoire test = $fichier_test.info\n";
|
||||
|
||||
#sauvegarde du fichier .info d origine
|
||||
system ("cp -nf $fichier_test.info $fichier_test.info_OLD");
|
||||
|
||||
#nom du fichier .maple
|
||||
$fichier_temp_maple = $fichier_test."_princ.maple";
|
||||
|
||||
|
@ -263,11 +274,32 @@ print " Nombre de fichiers .CVisu dans le repertoire test = $nb_CVisu\n";
|
|||
##########################################################################
|
||||
#
|
||||
# (DEBUT) LANCEMENT DES TESTS (un test par fichier .CVisu)
|
||||
# rq : l execution des tests se fait dans le repertoire
|
||||
# de travail $repertoire_de_travail afin de ne jamais modifier le repertoire d origine
|
||||
#
|
||||
##########################################################################
|
||||
##########################################################################
|
||||
##########################################################################
|
||||
|
||||
#recopie du contenu du repertoire vers le repertoire temporaire (on nomme ce repertoire en fonction de la variable Perl $$ qui est le PID du processus actuel)
|
||||
system("rm -rf $repertoire_de_travail");#suppression si il existe deja (improbable!!)
|
||||
mkdir $repertoire_de_travail;#creation du repertoire
|
||||
#verif de sa creation
|
||||
(-d $repertoire_de_travail) or do {
|
||||
printRapport("$repertoire_test\n -> ECHEC : Impossible de creer le repertoire de travail $repertoire_de_travail\n\n");
|
||||
print "**Erreur Test $repertoire_test : Impossible de creer le repertoire de travail $repertoire_de_travail\n";
|
||||
exit;
|
||||
};
|
||||
#recopie des fichiers vers $repertoire_de_travail
|
||||
foreach my $fic (@fichiers) {
|
||||
#cas d un repertoire
|
||||
if(-d $fic) {system("cp -R $fic $repertoire_de_travail/.");}
|
||||
#cas d un fichier
|
||||
else {system("cp $fic $repertoire_de_travail/.");}
|
||||
}
|
||||
#deplacement dans le repertoire de travail
|
||||
chdir $repertoire_de_travail;
|
||||
|
||||
################################################
|
||||
#(debut) boucle de test (sur les numeros de .CVisu)
|
||||
################################################
|
||||
|
@ -281,7 +313,7 @@ BOUCLE_TEST:for(my $no_test=1; $no_test<=$nb_CVisu; $no_test++) {
|
|||
print "\n";
|
||||
|
||||
#ecriture du repertoire de test et .CVisu en cours dans le rapport
|
||||
printRapport("$repertoire_test/.CVisu$no_test\n");
|
||||
printRapport("\n\n$repertoire_test/.CVisu$no_test\n");
|
||||
|
||||
|
||||
#####################################################################################################
|
||||
|
@ -416,7 +448,7 @@ BOUCLE_TEST:for(my $no_test=1; $no_test<=$nb_CVisu; $no_test++) {
|
|||
#####################################################################################################
|
||||
|
||||
#recopie du .CVisu[$no_test] vers .CVisu
|
||||
system("cp -nf $fichier_test.CVisu$no_test $fichier_test.CVisu");
|
||||
system("rm -f $fichier_test.CVisu; cp $fichier_test.CVisu$no_test $fichier_test.CVisu");
|
||||
|
||||
#lancement de la commande via subroutine lancement_commande() dont les arguments sont :
|
||||
# 1- chemin complet vers l executable Herezh
|
||||
|
@ -432,6 +464,81 @@ BOUCLE_TEST:for(my $no_test=1; $no_test<=$nb_CVisu; $no_test++) {
|
|||
# - si le calcul ne s arretait pas alors qu il avait une activite cpu nulle => $status_calcul = "activite cpu nulle"
|
||||
|
||||
|
||||
#####################################################################################################
|
||||
#----------------------------------------------------------------------------------------------------
|
||||
# SAISIE DU TEMPS CPU DANS LE FICHIER .log
|
||||
#----------------------------------------------------------------------------------------------------
|
||||
#####################################################################################################
|
||||
#
|
||||
#commentaires : pour rappel, le temps de calcul est fournie par la commande time
|
||||
# on va afficher le temps CPU en un format plus lisible que celui fourni par time (i.e conversion en hh:mm:ss.sss)
|
||||
# la commande time renvoie 4 informations :
|
||||
# - temps cpu (un reel en secondes suivi de la lettre u)
|
||||
# - temps systeme (un reel en secondes suivi de la lettre s)
|
||||
# - temps reel (format variable selon sa taille : secondes, minutes:secondes ou heures:minutes:secondes)
|
||||
# - pourcentage utilisation processeur (un reel suivi du caractere %)
|
||||
# IMPORTANT : le "temps cpu" et le "temps systeme" sont a mettre en relation avec le "pourcentage utilisation processeur"
|
||||
# il y a a peu pres la relation :
|
||||
# "temps reel" = ("temps cpu" + "temps systeme")/"pourcentage utilisation processeur"
|
||||
#
|
||||
printRapport(" -------------------------------------------------------\n");
|
||||
my $is_time_ok = 0;#indicateur de presence du resultat de la commande time
|
||||
open(Flog, "<$fichier_test.log");
|
||||
while(<Flog>) {
|
||||
next if(not /($format_reel)u/);
|
||||
my $temps_cpu = $1;
|
||||
next if(not /($format_reel)s/);
|
||||
my $temps_systeme = $1;
|
||||
next if(not /($format_reel)\%/);
|
||||
my $pourcent_proc = $1;
|
||||
next if(not /((?:\d+:)?\d+:$format_reel)/);
|
||||
my @temps_reel = split(/:/, $1);
|
||||
|
||||
#commande time ok
|
||||
$is_time_ok = 1;
|
||||
|
||||
#conversion du "temps_cpu" (a mettre en relation avec le pourcentage processeur)
|
||||
$_[0] = int($temps_cpu/3600.);#nb heures
|
||||
$_[1] = int(($temps_cpu - $_[0]*3600.)/60.);#nb minutes
|
||||
$_[2] = sprintf("%.3f", $temps_cpu - $_[0]*3600. - $_[1]*60.);#secondes (avec les milliemes)
|
||||
for(my $i=0; $i<=2; $i++) {$_[$i] = "0$_[$i]" if($_[$i] < 10);}#retouche cosmetique : rajout d un 0 davant le nombre si il n est constitue que de 1 seul digit
|
||||
printRapport(" | temps cpu : $_[0]:$_[1]:$_[2] (processeur : $pourcent_proc\%)\n");
|
||||
|
||||
#conversion du "temps systeme" (a mettre en relation avec le pourcentage processeur)
|
||||
$_[0] = int($temps_systeme/3600.);#nb heures
|
||||
$_[1] = int(($temps_systeme - $_[0]*3600.)/60.);#nb minutes
|
||||
$_[2] = sprintf("%.3f", $temps_systeme - $_[0]*3600. - $_[1]*60.);#secondes (avec les milliemes)
|
||||
for(my $i=0; $i<=2; $i++) {$_[$i] = "0$_[$i]" if($_[$i] < 10);}#retouche cosmetique : rajout d un 0 davant le nombre si il n est constitue que de 1 seul digit
|
||||
printRapport(" | temps systeme : $_[0]:$_[1]:$_[2] (processeur : $pourcent_proc\%)\n");
|
||||
|
||||
#conversion en 2 etapes du "temps reel" qui n est pas au meme format que les 2 autres (et il faut gerer les cas ou il manque hh ou mm)
|
||||
# 1) on commence par etablir sa duree en secondes
|
||||
my $temps_reel_en_secondes;
|
||||
#cas ou le "temps reel" n est que en secondes
|
||||
if($#temps_reel == 0) {$temps_reel_en_secondes = $temps_reel[0];}
|
||||
#cas ou le "temps reel" est au format minutes:secondes
|
||||
elsif($#temps_reel == 1) {$temps_reel_en_secondes = $temps_reel[1] + 60.*$temps_reel[0];}
|
||||
#cas ou le "temps reel" est au format heures:minutes:secondes
|
||||
elsif($#temps_reel == 2) {$temps_reel_en_secondes = $temps_reel[2] + 60.*$temps_reel[1] + 3600.*$temps_reel[0];}
|
||||
#autre cas (improbable) => on met 0
|
||||
else {$temps_reel_en_secondes = 0;}
|
||||
# 2) maintenant, on traite la conversion comme vu precedemment
|
||||
$_[0] = int($temps_reel_en_secondes/3600.);#nb heures
|
||||
$_[1] = int(($temps_reel_en_secondes - $_[0]*3600.)/60.);#nb minutes
|
||||
$_[2] = sprintf("%.2f", $temps_reel_en_secondes - $_[0]*3600. - $_[1]*60.);#secondes (avec les centiemes)
|
||||
for(my $i=0; $i<=2; $i++) {$_[$i] = "0$_[$i]" if($_[$i] < 10);}#retouche cosmetique : rajout d un 0 davant le nombre si il n est constitue que de 1 seul digit
|
||||
printRapport(" | temps reel : $_[0]:$_[1]:$_[2]\n");
|
||||
}
|
||||
close(Flog);
|
||||
#cas ou le resultat de la commande time n a pas ete trouve dans le fichier .log (on ecrit juste un warning dans le rapport)
|
||||
if(not $is_time_ok) {
|
||||
printRapport(" (**Attention : impossible de saisir le temps de calcul)\n");
|
||||
printRapport("\n");
|
||||
}
|
||||
printRapport(" -------------------------------------------------------\n");
|
||||
printRapport("\n");
|
||||
|
||||
|
||||
#####################################################################################################
|
||||
#----------------------------------------------------------------------------------------------------
|
||||
# VERIFICATION DU TEST
|
||||
|
@ -607,6 +714,13 @@ BOUCLE_TEST:for(my $no_test=1; $no_test<=$nb_CVisu; $no_test++) {
|
|||
##############################################################
|
||||
# boucle de comparaison des donnees (test entre chaque valeur des listes @donnees_temp_maple et @donnees_ref_maple)
|
||||
##############################################################
|
||||
#Strategie :
|
||||
# on va accumuler les affichages dans la variable $sortie_rapport et regarder si une des grandeurs est ECHEC
|
||||
# si une des grandeurs est ECHEC => on affichera le contenu de la variable dans le rapport
|
||||
# sinon, si toutes les grandeurs sont OK => on fera un affichage leger sur une ligne pour dire que toutes les grandeurs sont OK
|
||||
my $sortie_rapport = '';#variable tampon qui contiendra l integralite des affichages des resultats de comparaison maple
|
||||
my $is_grandeur_ECHEC = 0;#indicateur de presence d au moins un ECHEC
|
||||
|
||||
for(my $i_valeur=0; $i_valeur<=$#donnees_temp_maple; $i_valeur++) {
|
||||
#numero de colonne dans le .maple
|
||||
my $no_colonne_maple = $i_valeur + 1;
|
||||
|
@ -641,29 +755,22 @@ BOUCLE_TEST:for(my $no_test=1; $no_test<=$nb_CVisu; $no_test++) {
|
|||
$diff_relative_pourcent = sprintf("%.${nb_decimales_prec_relative}f", 100.*($valeur_temp-$valeur_ref)/$valeur_ref);
|
||||
}
|
||||
|
||||
|
||||
#ouverture du rapport de test
|
||||
open (FSOR, ">> $repertoire_racine/Rapport/$fichier_rapport") || do {
|
||||
printRapport("$repertoire_test/.CVisu$no_test\n -> ECHEC : Impossible d'ouvrir $repertoire_racine/Rapport/$fichier_rapport\n\n");
|
||||
print "**Erreur Test $repertoire_test/.CVisu$no_test : Impossible d'ouvrir $repertoire_racine/Rapport/$fichier_rapport\n";
|
||||
last BOUCLE_TEST;
|
||||
};
|
||||
|
||||
print FSOR " -> grandeur testee : colonne \[$no_colonne_maple\]\n";
|
||||
$sortie_rapport .= " -> grandeur testee : colonne \[$no_colonne_maple\]\n";
|
||||
|
||||
#############################
|
||||
#comparaison absolue };
|
||||
#############################
|
||||
#---OK
|
||||
if(abs($diff_absolue) <= $PREC_ABSOLU) {
|
||||
print FSOR " - comparaison absolue (precision : $precision_absolue) -> OK\n";
|
||||
$sortie_rapport .= " - comparaison absolue (precision : $precision_absolue) -> OK\n";
|
||||
}
|
||||
#---ECHEC
|
||||
else {
|
||||
print FSOR " - comparaison absolue (precision : $precision_absolue) -> ECHEC\n";
|
||||
print FSOR " -> Valeur = $valeur_temp\n";
|
||||
print FSOR " -> Valeur reference = $valeur_ref\n";
|
||||
print FSOR " -> Difference = $diff_absolue\n";
|
||||
$is_grandeur_ECHEC = 1;
|
||||
$sortie_rapport .= " - comparaison absolue (precision : $precision_absolue) -> ECHEC\n";
|
||||
$sortie_rapport .= " -> Valeur = $valeur_temp\n";
|
||||
$sortie_rapport .= " -> Valeur reference = $valeur_ref\n";
|
||||
$sortie_rapport .= " -> Difference = $diff_absolue\n";
|
||||
}
|
||||
|
||||
#############################
|
||||
|
@ -671,23 +778,35 @@ BOUCLE_TEST:for(my $no_test=1; $no_test<=$nb_CVisu; $no_test++) {
|
|||
#############################
|
||||
#---cas d une comparaison impossible => affichage d un message d erreur (mais pas du mot ECHEC : ce n est pas un echec car la valeur de reference est egale a 0)
|
||||
if($diff_relative_pourcent =~ /impossible/) {
|
||||
print FSOR " - comparaison relative : impossible car valeur de reference egale a 0\n";
|
||||
$sortie_rapport .= " - comparaison relative : impossible car valeur de reference egale a 0\n";
|
||||
}
|
||||
#---OK
|
||||
elsif(abs($diff_relative_pourcent) <= $precision_relative) {
|
||||
print FSOR " - comparaison relative (precision : $precision_relative\%) -> OK\n";
|
||||
$sortie_rapport .= " - comparaison relative (precision : $precision_relative\%) -> OK\n";
|
||||
}
|
||||
#---ECHEC
|
||||
else {
|
||||
print FSOR " - comparaison relative (precision : $precision_relative\%) -> ECHEC\n";
|
||||
print FSOR " -> Valeur = $valeur_temp\n";
|
||||
print FSOR " -> Valeur reference = $valeur_ref\n";
|
||||
print FSOR " -> Difference relative = $diff_relative_pourcent\%\n";
|
||||
$is_grandeur_ECHEC = 1;
|
||||
$sortie_rapport .= " - comparaison relative (precision : $precision_relative\%) -> ECHEC\n";
|
||||
$sortie_rapport .= " -> Valeur = $valeur_temp\n";
|
||||
$sortie_rapport .= " -> Valeur reference = $valeur_ref\n";
|
||||
$sortie_rapport .= " -> Difference relative = $diff_relative_pourcent\%\n";
|
||||
}
|
||||
|
||||
|
||||
print FSOR "\n";
|
||||
$sortie_rapport .= "\n";
|
||||
}#for(my $i_valeur=0; $i_valeur<=$#donnees_temp_maple; $i_valeur++)
|
||||
|
||||
#si il y a au moins 1 ECHEC => ecriture de tout le contenu de $sortie_rapport
|
||||
if($is_grandeur_ECHEC) {
|
||||
printRapport($sortie_rapport);
|
||||
}
|
||||
#sinon, on signale que tout est OK
|
||||
else {
|
||||
printRapport(" -> pour toutes les grandeurs testees : OK\n\n");
|
||||
}
|
||||
|
||||
|
||||
close (FSOR);
|
||||
|
||||
}#elsif(-e $fichier_temp_maple)
|
||||
|
@ -712,7 +831,7 @@ BOUCLE_TEST:for(my $no_test=1; $no_test<=$nb_CVisu; $no_test++) {
|
|||
#suppression du fichier de redirection
|
||||
system("rm -f $fichier_test.log");
|
||||
|
||||
#suppression des eventuels fichiers resultats (ATTENTION : ne pas supprimer les fichiers .BI et .PI pour permettre un RESTART)
|
||||
#suppression des eventuels fichiers resultats (ATTENTION : ne pas supprimer les fichiers .BI et .PI pour permettre un RESTART au .CVisu suivant)
|
||||
#--- fichier .maple
|
||||
system ("rm -f $fichier_temp_maple");
|
||||
#--- fichiers Gmsh
|
||||
|
@ -752,7 +871,6 @@ BOUCLE_TEST:for(my $no_test=1; $no_test<=$nb_CVisu; $no_test++) {
|
|||
|
||||
|
||||
|
||||
|
||||
##########################################################################
|
||||
##########################################################################
|
||||
##########################################################################
|
||||
|
@ -767,18 +885,8 @@ BOUCLE_TEST:for(my $no_test=1; $no_test<=$nb_CVisu; $no_test++) {
|
|||
# derniers traitements avant retour au repertoire racine
|
||||
#####################################################################################################
|
||||
|
||||
#restauration du .info d origine
|
||||
system("mv -f $fichier_test.info_OLD $fichier_test.info");
|
||||
|
||||
#suppression de tout ce qui n etait pas present initialement dans le repertoire de test (fichiers et repertoires)
|
||||
my %TAB_FICHIER_INITIAL;
|
||||
#---on cree une table d indicateur de presence pour les fichiers initiaux (fichiers et repertoires contenus dans la liste @fichiers qui a ete constituee en debut de script)
|
||||
foreach my $fic (@fichiers) {$TAB_FICHIER_INITIAL{$fic} = 1;}
|
||||
#---et on supprime tout ce qui n a pas d indicateur
|
||||
foreach my $fic (glob("*")) {
|
||||
next if(defined($TAB_FICHIER_INITIAL{$fic}));#pas de suppression en cas d indicateur
|
||||
system("rm -rf $fic");
|
||||
}
|
||||
#suppression repertoire de travail
|
||||
system("rm -rf $repertoire_de_travail");
|
||||
|
||||
#####################################################################################################
|
||||
# retour au repertoire racine
|
||||
|
@ -862,7 +970,7 @@ sub lancement_commande {
|
|||
# rq : l utilite de ce lien est qu il permettra de rechercher les pid de processus en reperant ce nom unique genere aleatoirement (pour eviter de tuer d autres processus Herezh qui n ont rien a voir avec la batterie de test)
|
||||
##############################################################
|
||||
#creation d un nom aleatoire
|
||||
my $lien_symbolique_HZ = 'HZ'.int(rand(99999999999));
|
||||
my $lien_symbolique_HZ = 'testHZ'.int(rand(99999999999));
|
||||
#creation du lien symbolique
|
||||
system("ln -s $hzchemin_original $lien_symbolique_HZ");
|
||||
|
||||
|
@ -871,7 +979,7 @@ sub lancement_commande {
|
|||
#lancement du calcul Herezh dans un pipe
|
||||
# rq : redirection de l affichage dans le fichier $fredir_tee
|
||||
##############################################################
|
||||
open(PIPE, "|$lien_symbolique_HZ $commande | tee $fredir_tee");
|
||||
open(PIPE, "|tcsh -c \"time $lien_symbolique_HZ $commande\" | tee $fredir_tee");
|
||||
PIPE->autoflush(1);#forcer a vider le tampon (methode autoflush du package IO::Handle)
|
||||
|
||||
#ecriture des reponses interactives si le fichier $fic_commande existe
|
||||
|
|
Binary file not shown.
|
@ -282,7 +282,7 @@ unless($is_opt_L or $is_opt_rpt) {
|
|||
#creation du fichier rapport final
|
||||
system("mv -f Rapport/rapport_test.txt Rapport/rapport_test_R.txt");
|
||||
#affichage du rapport
|
||||
system("nedit Rapport/rapport_test_R.txt &");
|
||||
system("nedit Rapport/rapport_test_R.txt \&");
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -324,7 +324,7 @@ unless($is_opt_R or $is_opt_rpt) {
|
|||
#creation du fichier rapport final
|
||||
system("mv -f Rapport/rapport_test.txt Rapport/rapport_test_L.txt");
|
||||
#affichage du rapport
|
||||
system("nedit Rapport/rapport_test_L.txt &");
|
||||
system("nedit Rapport/rapport_test_L.txt \&");
|
||||
}
|
||||
}
|
||||
|
||||
|
|
Loading…
Reference in a new issue