diff --git a/Doc/doc_procedure_verification.tex b/Doc/doc_procedure_verification.tex index 375dc19..703402a 100644 --- a/Doc/doc_procedure_verification.tex +++ b/Doc/doc_procedure_verification.tex @@ -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 "-" %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% diff --git a/Perl/test.pl b/Perl/test.pl index 67e9a28..7a0506b 100755 --- a/Perl/test.pl +++ b/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() { 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"); } diff --git a/doc_procedure_verification.pdf b/doc_procedure_verification.pdf index 02ddbe3..43eb53d 100644 Binary files a/doc_procedure_verification.pdf and b/doc_procedure_verification.pdf differ