a propos dernier commit : le script Perl/test.pl a ete modifie de maniere a permettre plusieurs types de verification pour un meme test. Desormais, un test peut etre l objet a la fois d une verif de .maple et d une verif par script .verif; actualisation de la doc doc_procedure_verification.pdf pour mentionner ce fait (voir evolution des mises a jour)
This commit is contained in:
parent
8bd0e7c604
commit
85aa431472
3 changed files with 45 additions and 23 deletions
|
@ -332,11 +332,16 @@ L'ex
|
|||
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
|
||||
\subsubsection{Vérification}\label{subsubsection_verification}
|
||||
|
||||
Pour chaque calcul, une vérification est faite pour déterminer si le test est réussi ou non. Le rapport de test contient les indicateurs \verb|OK| ou \verb|ECHEC|. Il y a actuellement 3 types de vérification possible :
|
||||
Pour chaque calcul, une vérification est faite pour déterminer si le test est réussi ou non. Le rapport de test contient les indicateurs \verb|OK| ou \verb|ECHEC|. Il y plusieurs types de vérification possibles. Plusieurs types de vérification peuvent \^etre faites pour un m\^eme test.
|
||||
|
||||
Liste des possibilités :
|
||||
\begin{itemize}
|
||||
\item[$\bullet$] comparaison des données sorties au format maple :
|
||||
\begin{itemize}
|
||||
\item[] il s'agit du mode de vérification par défaut. Le fichier \verb|.CVisu|[i] définit les sorties au format maple. Le répertoire de test contient alors un fichier \verb|.maple.ref|[i] qui définit les valeurs de référence. Si l'écart absolu et relatif entre les données de référence et les données du calcul sont inférieures à une tolérance, alors le test est réussi. Les tolérances par défaut sont en absolu 1e-6 et en relatif 1e-3. Il est possible de choisir librement les tolérances dans un fichier \verb|.precision|[i]. Pour une grandeur $X$ générée à l'issue du calcul [i] et sa valeur de référence $X_{ref}$ contenue dans le fichier \verb|.maple.ref|[i], le test est réussi si les relations de comparaison suivantes sont respectées :
|
||||
\item[] Ce mode de vérification est exécuté si il y a la présence d'un fichier \verb|.maple.ref|[i].
|
||||
\vspace*{0.2cm}
|
||||
|
||||
Le fichier \verb|.CVisu|[i] définit les sorties au format maple. Le fichier \verb|.maple.ref|[i] définit les valeurs de référence. Si l'écart absolu et relatif entre les données de référence et les données du calcul sont inférieures à une tolérance, alors le test est réussi. Les tolérances par défaut sont en absolu 1e-6 et en relatif 1e-3. Il est possible de choisir librement les tolérances dans un fichier \verb|.precision|[i]. Pour une grandeur $X$ générée à l'issue du calcul [i] et sa valeur de référence $X_{ref}$ contenue dans le fichier \verb|.maple.ref|[i], le test est réussi si les relations de comparaison suivantes sont respectées :
|
||||
\begin{equation}
|
||||
\begin{array}{rrcl}
|
||||
\text{comparaison absolue :} & |X - X_{ref}| & \leq & \varepsilon_{absolu}\\
|
||||
|
@ -346,13 +351,16 @@ Pour chaque calcul, une v
|
|||
\\
|
||||
\bf IMPORTANT : \rm si les fichiers \verb|.maple| et \verb|.maple.ref| contiennent plusieurs lignes de données, seule la dernière ligne est traitée\\
|
||||
\end{itemize}
|
||||
\item[$\bullet$] comparaison libre définie par un script :
|
||||
\item[$\bullet$] comparaison libre définie par un script \verb|.verif|:
|
||||
\begin{itemize}
|
||||
\item[] la vérification peut \^etre librement définie par un script qui a pour fonction de renvoyer \verb|OK| ou \verb|ECHEC|. Ce script est un fichier exécutable d'extension \verb|.verif|[i], signifiant que le calcul n°[i] sera vérifié par un script libre.\\
|
||||
\item[] Ce mode de vérification est exécuté si il y a présence d'un fichier \verb|.verif|[i].
|
||||
\vspace*{0.2cm}
|
||||
|
||||
Cette vérification est définie par un script qui a pour fonction de renvoyer \verb|OK| ou \verb|ECHEC|. Ce script est un fichier exécutable d'extension \verb|.verif|[i], signifiant que le calcul n°[i] sera l'objet d'une vérification par un script libre.\\
|
||||
\end{itemize}
|
||||
\item[$\bullet$] vérification simple de l'exécution :
|
||||
\begin{itemize}
|
||||
\item[] en l'absence de fichier \verb|.maple.ref| ou de script \verb|.verif|, la vérification est considérée \verb|OK| si le calcul s'est lancé normalement et terminé normalement (que le calcul ait convergé ou non).
|
||||
\item[] en l'absence de fichier \verb|.maple.ref| et de script \verb|.verif|, la vérification est considérée \verb|OK| si le calcul s'est lancé et a renvoyé la main au terminal (que le calcul ait convergé ou non). Il y a tout de m\^eme quelques vérifications de l'affichage pour y trouver des indicateurs d'erreur, ce qui provoquera le cas échéant un ECHEC.
|
||||
\end{itemize}
|
||||
\end{itemize}
|
||||
|
||||
|
@ -1145,6 +1153,12 @@ pour ces 2 scripts, une gestion des signaux d'interruption \verb|INT| et \verb|T
|
|||
\item[-] modif du script \verb|test.pl| : ajout d'un nouveau message d'erreur fatal dans la liste des erreurs à repérer dans le fichier de redirection \verb|.log|. Désormais, si Herezh++ produit un message de la forme "\verb|erreur (...message...) detectee|", le test est considéré comme \verb|ECHEC|
|
||||
\end{itemize}%tiret
|
||||
|
||||
~\\
|
||||
\item[$\bullet$] 2016-10-11 (Julien Troufflard) :
|
||||
\begin{itemize}
|
||||
\item[-] modif du script \verb|test.pl| : désormais, les vérifications ne sont plus mutuellement exclusives. Un m\^eme test peut très bien \^etre l'objet à la fois d'une vérification de \verb|.maple| et d'une vérification libre par script \verb|.verif|. Légère modif de l'affichage dans le rapport de tests de manière à rendre clair les cas où un test est l'objet de plusieurs vérifications.
|
||||
\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 "-"
|
||||
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
|
||||
|
|
44
Perl/test.pl
44
Perl/test.pl
|
@ -788,29 +788,34 @@ BOUCLE_TEST:for(my $no_test=1; $no_test<=$nb_CVisu; $no_test++) {
|
|||
|
||||
#saisie du resultat (on s attend a trouver une chaine de la forme "resultat verification : STATUS" dans le .log)
|
||||
my $resu_verif = '';
|
||||
my $commentaire = '';
|
||||
open(FIC, "<$script_verif.log");
|
||||
while(<FIC>) {
|
||||
next if(not /^\s*resultat\s+verification\s*:\s*(\S+)/i);#rq : recherche insensible a la casse
|
||||
$resu_verif = $1;
|
||||
(my $reste_chaine = $_) =~ s/^\s*resultat\s+verification\s*:\s*\S+\s*//;
|
||||
chomp($reste_chaine);
|
||||
$commentaire = "cause : $reste_chaine" if(defined $reste_chaine);
|
||||
last;
|
||||
}
|
||||
close(FIC);
|
||||
|
||||
#verif du resultat (doit etre ECHEC ou OK)
|
||||
($resu_verif eq 'OK' or $resu_verif eq 'ECHEC') or do {
|
||||
printRapport(" -> ECHEC : resultat non conforme de la verification via le script $script_verif. Cause possible : la chaine \"resultat verification : ...\" n a pas ete trouvee ou alors le resultat n etait ni OK, ni ECHEC\n\n");
|
||||
printRapport(" -> resultat .verif : ECHEC (resultat non conforme de la verification via le script $script_verif. Cause possible : la chaine \"resultat verification : ...\" n a pas ete trouvee ou alors le resultat n etait ni OK, ni ECHEC)\n\n");
|
||||
print "**Erreur Test $repertoire_test/.CVisu$no_test : resultat non conforme de la verification via le script $script_verif. Cause possible : la chaine \"resultat verification : ...\" n a pas ete trouvee ou alors le resultat n etait ni OK, ni ECHEC\n";
|
||||
last BOUCLE_TEST;
|
||||
};
|
||||
|
||||
printRapport(" -> $resu_verif (resultat fourni par le script de verification $script_verif)\n\n");
|
||||
printRapport(" -> resultat .verif : $resu_verif ($commentaire) (resultat fourni par le script de verification $script_verif)\n\n");
|
||||
}#if(-e $script_verif)
|
||||
|
||||
|
||||
#################################################################################
|
||||
#cas d une verification classique (comparaison entre .maple et .maple.ref[$no_test])
|
||||
# rq : on suppose qu il s agit d une verification classique si il y a la presence d un fichier .maple.ref
|
||||
#################################################################################
|
||||
elsif(-e "$fichier_temp_maple.ref$no_test") {
|
||||
if(-e "$fichier_temp_maple.ref$no_test") {
|
||||
|
||||
##############################################################
|
||||
# pretraitement
|
||||
|
@ -939,22 +944,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);
|
||||
}
|
||||
|
||||
$sortie_rapport .= " -> grandeur testee : colonne \[$no_colonne_maple\]\n";
|
||||
$sortie_rapport .= " -> grandeur testee : colonne \[$no_colonne_maple\]\n";
|
||||
|
||||
#############################
|
||||
#comparaison absolue };
|
||||
#############################
|
||||
#---OK
|
||||
if(abs($diff_absolue) <= $precision_absolue) {
|
||||
$sortie_rapport .= " - comparaison absolue (precision : $precision_absolue) -> OK\n";
|
||||
$sortie_rapport .= " - comparaison absolue (precision : $precision_absolue) -> OK\n";
|
||||
}
|
||||
#---ECHEC
|
||||
else {
|
||||
$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";
|
||||
$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";
|
||||
}
|
||||
|
||||
#############################
|
||||
|
@ -962,19 +967,19 @@ 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/) {
|
||||
$sortie_rapport .= " - 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) {
|
||||
$sortie_rapport .= " - comparaison relative (precision : $precision_relative\%) -> OK\n";
|
||||
$sortie_rapport .= " - comparaison relative (precision : $precision_relative\%) -> OK\n";
|
||||
}
|
||||
#---ECHEC
|
||||
else {
|
||||
$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";
|
||||
$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";
|
||||
}
|
||||
|
||||
|
||||
|
@ -983,11 +988,11 @@ BOUCLE_TEST:for(my $no_test=1; $no_test<=$nb_CVisu; $no_test++) {
|
|||
|
||||
#si il y a au moins 1 ECHEC => ecriture de tout le contenu de $sortie_rapport
|
||||
if($is_grandeur_ECHEC) {
|
||||
printRapport($sortie_rapport);
|
||||
printRapport(" -> comparaison .maple : ECHEC\n\n$sortie_rapport");
|
||||
}
|
||||
#sinon, on signale que tout est OK
|
||||
else {
|
||||
printRapport(" -> pour toutes les grandeurs testees : OK\n\n");
|
||||
printRapport(" -> comparaison .maple : OK (pour toutes les grandeurs testees)\n\n");
|
||||
}
|
||||
|
||||
|
||||
|
@ -999,7 +1004,10 @@ BOUCLE_TEST:for(my $no_test=1; $no_test<=$nb_CVisu; $no_test++) {
|
|||
#################################################################################
|
||||
#cas sans verification
|
||||
#################################################################################
|
||||
else {
|
||||
#pas de verification si les conditions suivantes sont TOUTES remplies :
|
||||
# - pas de fichier .verif
|
||||
# - pas de fichier .maple.ref
|
||||
if(not (-e $script_verif) and not (-e "$fichier_temp_maple.ref$no_test")) {
|
||||
printRapport(" -> OK (pas de verification pour ce test)\n\n");
|
||||
}
|
||||
|
||||
|
|
Binary file not shown.
Loading…
Reference in a new issue