2
0
Fork 0

refonte du script de lancement de la batterie. Cette nouvelle version s appelle verifier_exeHZ.pl et offre des options supplementaires de lancement. L ancienne version est renommee en verifier_exeHZ.zsh et reste disponible. Actualisation de la doc doc_procedure_verification.pdf

This commit is contained in:
troufflard 2015-07-15 11:42:40 +00:00
parent d04fa1bf54
commit cd56f89923
10 changed files with 605 additions and 55 deletions

37
Doc/README Normal file
View file

@ -0,0 +1,37 @@
dans ce repertoire, tout ce qui concerne la documentation :
-------------------------------------------------------------------------
1) documentation principale
-------------------------------------------------------------------------
> contenu : explication du fonctionnement de la batterie de tests
(organisation, execution, ajout de nouveaux tests, etc...)
> fichiers concernes :
- doc_procedure_verification.tex
> commandes a executer pour generer cette documentation
a) compilation pdflatex classique du document doc_procedure_verification.tex
rq : en resultat => fichier doc_procedure_verification.pdf
b) deplacer le fichier doc_procedure_verification.pdf vers la racine du projet
pour remplacer l ancienne version
-------------------------------------------------------------------------
2) catalogue des tests
-------------------------------------------------------------------------
> contenu : listing et resume des tests actuellement presents dans la batterie
> fichiers concernes :
- ../Perl/genere_catalogue_tests.pl
> commandes a executer pour generer cette documentation
a) se placer dans le repertoire contenant le repertoire Batterie
(ou autre repertoire contenant des tests)
b) executer script : Perl/genere_catalogue_tests.pl
rq : en resultat => fichier catalogue_tests.pdf contenant l ensemble des
tests (Test_R et Test_L) presents dans toute l arborescence
depuis le repertoire de lancement du script
c) deplacer le fichier catalogue_tests.pdf vers la racine du projet
pour remplacer l ancienne version
(((( rq : bien sur, cette etape c) est inutile si le script a ete lance a
la racine du projet ))))

View file

@ -26,6 +26,12 @@
\usepackage{tikz}
\usetikzlibrary{trees}
\newcommand*{\TakeFourierOrnament}[1]{{%
\fontencoding{U}\fontfamily{futs}\selectfont\char#1}}
\newcommand*{\danger}{\TakeFourierOrnament{66}}
\addto\captionsfrench{\def\figurename{Figure}}
\addto\captionsfrench{\def\tablename{Tableau}}
%\usepackage{hangcaption}
@ -134,28 +140,51 @@ L'arborescence du projet CVS est la suivante :\\
\section{Lancement de la batterie de tests}
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
Le script \verb|verifier_exeHZ| permet de lancer la batterie de tests. Il 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.
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.\\
Le script \verb|verifier_exeHZ| prend un argument : le nom de l'exécutable Herezh++. Typiquement, cet exécutable est présent dans un répertoire pointé par la variable environnement \verb|$PATH|. Mais on peut également donner un chemin absolu ou relatif.\\
Avant de détailler l'utilisation de ces scripts, voici un résumé de la procédure pour lancer la batterie :
\begin{itemize}
\item[1-] se placer dans un répertoire contenant des tests et le répertoire \verb|Perl|
\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}
\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.
Le script \verb|verifier_exeHZ.zsh| prend un argument : le nom de l'exécutable Herezh++. Typiquement, cet exécutable est présent dans un répertoire pointé par la variable environnement \verb|$PATH|. Mais on peut également donner un chemin absolu ou relatif.\\
Exemples :
\begin{itemize}
\item[$\bullet$] cas d'un exécutable accessible via la variable environnement \verb|$PATH| :
\begin{itemize}
\item[] \verb|verifier_exeHZ HZppfast_Vn-1|
\item[] \verb|verifier_exeHZ HZppfast64|
\item[] \verb|verifier_exeHZ.zsh HZppfast_Vn-1|
\item[] \verb|verifier_exeHZ.zsh HZppfast64|
\end{itemize}
\item[$\bullet$] cas d'un exécutable spécifié par un chemin absolu ou relatif :
\begin{itemize}
\item[] \verb|verifier_exeHZ /Users/dupont/bin/HZpp|
\item[] \verb|verifier_exeHZ ./HZppfast|
\item[] \verb|verifier_exeHZ ../mon_rep/HZppfast|\\
\item[] \verb|verifier_exeHZ.zsh /Users/dupont/bin/HZpp|
\item[] \verb|verifier_exeHZ.zsh ./HZppfast|
\item[] \verb|verifier_exeHZ.zsh ../mon_rep/HZppfast|\\
\end{itemize}
\end{itemize}
La procédure pour lancer la batterie est donc :
\subsubsection*{\underline{Script \texttt{verifier\_exeHZ.pl}} :}
Le script \verb|verifier_exeHZ.pl| fonctionne de manière identique. Toutes les informations mentionnées pour \verb|verifier_exeHZ.zsh| sont valables pour \verb|verifier_exeHZ.pl|. Cette version offre des possibilités supplémentaires sous forme d'options. Ces options sont consultables en tapant \verb|verifier_exeHZ.pl -h| dans un terminal. En l'absence d'options, \verb|verifier_exeHZ.pl| fonctionne exactement comme \verb|verifier_exeHZ.zsh|.\\
Exemples d'options :
\begin{itemize}
\item[1-] se placer dans un répertoire contenant des tests et le répertoire \verb|Perl|.
\item[2-] exécuter le script \verb|verifier_exeHZ| en lui indiquant l'exécutable à tester
\item[$\bullet$] ne lancer que les tests rapides (option \verb|-R|) :
\begin{itemize}
\item[] \verb|verifier_exeHZ.pl -R HZppfast_Vn-1|
\end{itemize}
\item[$\bullet$] ne lancer que les tests longs (option \verb|-L|) :
\begin{itemize}
\item[] \verb|verifier_exeHZ.pl -L /Users/dupont/bin/HZpp|
\end{itemize}
\item[$\bullet$] ne lancer que les tests ayant un indicateur ECHEC dans un rapport de test (option \verb|-rpt nom_rapport|) :
\begin{itemize}
\item[] \verb|verifier_exeHZ.pl -rpt ./Rapport/rapport_test_R.txt HZppfast| \footnotesize (*)\normalsize
\item[] \hspace*{0.5cm} \footnotesize (*) Remarque : dans le cas de l'option \verb|-rpt|, le rapport de test s'appellera\\
\hspace*{3.1cm}\verb|Rapport/rapport_test_debugECHEC.txt|\normalsize\\
\end{itemize}
\end{itemize}
@ -209,15 +238,15 @@ On distingue actuellement deux sortes de tests selon le temps de calcul : les te
\subsection{Lancement et vérification d'un test}
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
\subsubsection{Lancement des calculs}
Le script \verb|verifier_exeHZ| a pour fonction de rechercher tous les répertoires de tests (répertoires commençant par \verb|Test_R| ou \verb|Test_L|. Chaque répertoire de test contient un unique fichier \verb|.info| et un certain nombre $N$ de fichiers \verb|.CVisu|[i] où [i] est un numéro de 1 à $N$. Pour chaque fichier \verb|.CVisu|[i], un calcul est lancé. Le premier calcul est celui correspondant au fichier \verb|.CVisu1|. Les calculs suivants pour [i]$>$1 sont des RESTART (si possible) du calcul précédent à partir du dernier incrément sauvegardé (selon option \verb|SAUVEGARDE| du fichier \verb|.info|).\\
\subsubsection{Lancement d'un test}
Le script \verb|verifier_exeHZ.zsh| ou \verb|verifier_exeHZ.pl| a pour fonction de rechercher les répertoires de tests (répertoires commençant par \verb|Test_R| ou \verb|Test_L|). Chaque répertoire de test contient un unique fichier \verb|.info| (vide ou non) et un certain nombre $N$ de fichiers \verb|.CVisu|[i] où [i] est un numéro de 1 à $N$. Pour chaque fichier \verb|.CVisu|[i], un calcul est lancé. Le premier calcul est celui correspondant au fichier \verb|.CVisu1|. Les calculs suivants pour [i]$>$1 sont des RESTART (si possible) du calcul précédent à partir du dernier incrément sauvegardé (selon option \verb|SAUVEGARDE| du fichier \verb|.info|).\\
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).
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
\subsubsection{Vérification}
\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 :
\begin{itemize}
@ -245,7 +274,7 @@ Pour chaque calcul, une v
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
\subsection{Contenu d'un répertoire de tests}\label{section_contenu_repertoire_test}
\subsection{Contenu d'un répertoire de test}\label{section_contenu_repertoire_test}
Un répertoire de tests contient des fichiers obligatoires et des fichiers facultatifs.\\
Les fichiers obligatoires sont :
@ -352,7 +381,7 @@ Les fichiers facultatifs d
\item[$\bullet$] Pour chaque calcul, il est nécessaire de créer un fichier \verb|.CVisu| (\verb|.CVisu1|, \verb|.CVisu2|, etc...) m\^eme si celui-ci est vide. Ces fichiers servent non seulement à Herezh++ mais également au script \verb|Perl/test.pl| pour repérer les calculs à lancer (un calcul par fichier \verb|.CVisu|).
\item[$\bullet$] tous les fichiers \verb|.CVisu|[i] et les fichiers facultatifs nécessaires à l'exécution d'un test (\verb|.verif|[i], \verb|.commande|[i], etc...) ont la m\^eme racine que le fichier \verb|.info| (par exemple, si on a le fichier \verb|nom_fichier.info|, l'éventuel fichier \verb|.verif1| doit avoir pour nom \verb|nom_fichier.verif1|)
\item[$\bullet$] le fichier \verb|README| contient obligatoirement les rubriques \it But du test \rm et \it Description du calcul \rm montrées sur la figure \ref{format_fichier_README}. Ces deux rubriques serviront à générer automatiquement une documentation pdf (catalogue de tests). Dans le m\^eme but, les rubriques \it Auteur \rm et \it Mots-cles\rm, qui ne sont pas obligatoires, donnent des informations précieuses (merci de les renseigner).
\item[] Remarque importante : ne pas écrire des lignes de tirets (\verb|---| et plus) dans le corps d'une rubrique.\\
\item[] \bf Remarque importante : \rm ne pas écrire des lignes de tirets (\verb|---| et plus) dans le corps d'une rubrique.\\
\end{itemize}
@ -395,27 +424,28 @@ Les fichiers facultatifs d
\label{arbo_repertoire_test}
\end{figure}
La sous-section \ref{section_commandes_CVS} est un rappel des commandes CVS de base. Les sous-sections \ref{section_fichiers_obligatoires} et \ref{section_fichiers_facultatifs} donnent des informations sur les fichiers obligatoires et les fichiers facultatifs en lien avec l'exécution du test. Notamment, certains fichiers ont un format bien précis pour \^etre exploitables. Ensuite, la sous-section \ref{section_exemples_tests} a pour but de balayer les cas les plus courant de tests et de donner des exemples.
La sous-section \ref{section_commandes_CVS} est un rappel des commandes CVS de base. Les sous-sections \ref{section_fichiers_obligatoires} et \ref{section_fichiers_facultatifs} donnent des informations sur les fichiers obligatoires et les fichiers facultatifs en lien avec l'exécution du test. Notamment, certains fichiers ont un format bien précis pour \^etre exploitables. Ensuite, la sous-section \ref{section_exemples_tests} a pour but de balayer les cas les plus courants de test et de donner des exemples.
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
\subsection{Commandes usuelles CVS}\label{section_commandes_CVS}
\begin{itemize}
\item[$\bullet$] importer le projet : \verb|cvs co Verif_Herezh|
\item[$\bullet$] actualiser sa version locale du projet : \verb|cvs update -dP| (*)
\item[$\bullet$] importer le projet : \verb|cvs co -P Verif_Herezh| (*)
\item[$\bullet$] actualiser sa version locale du projet : \verb|cvs update -dP| (**)
\item[$\bullet$] ajouter un fichier ou un répertoire :
\begin{itemize}
\item fichier texte : \verb|cvs add nom_fichier|
\item fichier binaire : \verb|cvs add -kb nom_fichier|
\end{itemize}
\item[$\bullet$] effacer un fichier (**) :
\item[$\bullet$] effacer un fichier (***) :
\begin{itemize}
\item[1)] effacer le fichier \verb|nom_fichier|
\item[2)] \verb|cvs remove nom_fichier|
\end{itemize}
\item[]
\item[] \footnotesize (*) \underline{Toujours actualiser sa version locale avant de modifier le projet}. Cette commande actualise le répertoire courant ainsi que tous ses sous-répertoires\normalsize
\item[] \footnotesize (**) a priori, c'est la m\^eme démarche pour effacer un répertoire, bien qu'il soit souvent constaté que le répertoire effacé persistait\normalsize\\
\item[] \footnotesize (*) l'option \verb|-P| est très recommandée car elle permet de supprimer automatiquement les répertoires vides dès l'import du projet (voir également remarque (***)).
\item[] \footnotesize (**) \underline{Toujours actualiser sa version locale avant de modifier le projet}. Cette commande actualise le répertoire courant ainsi que tous ses sous-répertoires\normalsize
\item[] \footnotesize (***) a priori, c'est la m\^eme démarche pour effacer un répertoire, bien qu'il soit souvent constaté que le répertoire effacé persistait m\^eme si il est vide.\normalsize\\
\end{itemize}
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
@ -423,7 +453,7 @@ La sous-section \ref{section_commandes_CVS} est un rappel des commandes CVS de b
\begin{itemize}
\item[$\bullet$] \verb|README| :\\
La trame du fichier est montrée sur la figure \ref{format_fichier_README}. La syntaxe de l'intitulé des deux rubriques obligatoires (en bleu) doit \^etre strictement respectée. Il est fortement encouragé de renseigner les rubriques \it Auteur \rm et \it Mots-cles\rm. Les autres rubriques sont indiquées à titre de proposition et pour des questions d'harmonie sur la forme d'un test à l'autre. Comme montré sur la figure \ref{format_fichier_README}, chaque titre de rubrique est précédé et suivi d'une ligne d'au moins trois tirets (\verb|---| et plus). Les lignes de tirets doivent \^etre réservées aux titres des rubriques (Ce motif sert à repérer la fin d'une rubrique. L'insertion d'une ligne de tirets dans le corps d'une rubrique mettra en défaut le script de génération automatique de la documentation!!).\\
La trame du fichier est montrée sur la figure \ref{format_fichier_README}. La syntaxe de l'intitulé des deux rubriques obligatoires (en bleu) doit \^etre strictement respectée. Il est fortement encouragé de renseigner les rubriques \it Auteur \rm et \it Mots-cles\rm. Les autres rubriques sont indiquées à titre de proposition et pour des questions d'harmonie sur la forme d'un test à l'autre. Comme montré sur la figure \ref{format_fichier_README}, chaque titre de rubrique est précédé et suivi d'une ligne d'au moins trois tirets (\verb|---| et plus). Les lignes de tirets doivent \^etre réservées aux titres des rubriques (Ce motif sert à repérer la fin d'une rubrique. L'insertion d'une ligne de tirets dans le corps d'une rubrique mettra en défaut le script de génération automatique du catalogue de tests!!).\\
\item[$\bullet$] \verb|.info| :
\begin{itemize}
\item[] Ce fichier est l'unique fichier d'extension \verb|.info| présent dans le répertoire. Il est obligatoire mais peut \^etre vide (par exemple dans le cas d'un création de fichier \verb|.info| avec l'option Herezh \verb|-n|).\\
@ -515,10 +545,11 @@ resultat verification : OK (ou ECHEC)
En plus de cette ligne, cet exécutable peut tout à fait afficher d'autres informations à titre facultatif.\\
Il est important de noter que cet exécutable reçoit 2 arguments lorsqu'il est appelé par le script \verb|Perl/test.pl| :
Il est important de noter que cet exécutable reçoit 2 arguments lorsqu'il est appelé. Le programmeur pourra donc utiliser s'il le souhaite les arguments suivants :
\begin{itemize}
\item[argument 1 :] nom de l'exécutable Herezh++ (en chemin absolu)
\item[argument 2 :] nom du fichier de redirection de l'affichage du calcul Herezh++ (fichier \verb|.log|)
\item[\hspace*{0.5cm} argument 1 :] nom de l'exécutable Herezh++ (en chemin absolu)
\item[\hspace*{0.5cm} argument 2 :] nom du fichier de redirection de l'affichage du calcul Herezh++\\
\hspace*{2.4cm} (fichier \verb|.log|)
\end{itemize}
Cet exécutable peut \^etre programmé dans n'importe quel langage, mais pour éviter les problèmes de compilateur, il est préférable d'éviter les langages nécessitant une compilation (par exemple : C, C++, Fortran, etc...). Il est préférables d'utiliser les langages interprétés (par exemple : sh, zsh, Perl, Python, etc...).\\
@ -540,7 +571,7 @@ HZppfast ligne_1 ligne_2 ... ligne_N | tee nom_calcul.log
%%
\item[$\bullet$] \verb|.maple.ref| :
\begin{itemize}
\item[] Ce fichier est utile pour la comparaison de données au format maple. Le nombre de colonnes de ce fichier doit \^etre en accord avec le fichier \verb|.maple| produit par la lecture du \verb|.CVisu| associé.
\item[] Ce fichier est utile pour la comparaison de données au format maple. Le nombre de colonnes de ce fichier doit \^etre en accord avec le fichier \verb|.maple| produit par la lecture du \verb|.CVisu| associé. Il peut contenir un nombre quelconque de lignes de données mais seule la dernière sera utilisée pour la comparaison de \verb|.maple| explicitée à la section \ref{subsubsection_verification}.
\end{itemize}
\end{itemize}
@ -611,11 +642,38 @@ L'arborescence pour ce genre de test devrait avoir la forme suivante :\\
\section{Évolution des mises à jour}
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
\begin{itemize}
\item[$\bullet$] 2015-06-29 (Julien Troufflard) :
\begin{itemize}
\item[-]création d'un nouveau script (\verb|Perl/genere_catalogue_tests.pl|). Il génère automatiquement une documentation sur les tests (résumé et index pour recherche par mots-clés). Ce document est placé à la racine du projet sous le nom \verb|documentation_tests.pdf|. Le mode de fonctionnement (lecture des fichiers README de chaque test) impose une nouvelle contrainte sur la forme des fichiers README (interdiction d'utiliser des lignes de 3 tirets ou plus dans le corps d'une rubrique README car ce motif signifie la fin d'une rubrique). Cette contrainte est le choix actuel mais peut \^etre modifié à tout moment en définissant une balise de fin de rubrique à utiliser dans les fichiers README (par exemple : \verb|fin_rubrique|) et en indiquant sa syntaxe dans la variable \verb|$MOTIF_FIN_RUBRIQUE| du script \verb|Perl/genere_catalogue_tests.pl|.\\
\item[-]Apparition d'une nouvelle rubrique README : \it Auteur \rm (renseigne le ou les auteurs du test avec prénom, nom, adresse mail). rubrique qui appara\^it dans la documentation des tests.
\item[-] création d'un nouveau script (\verb|Perl/genere_catalogue_tests.pl|). Il génère automatiquement une documentation sur les tests (résumé et index pour recherche par mots-clés). Ce document est placé à la racine du projet sous le nom \verb|documentation_tests.pdf|. Le mode de fonctionnement (lecture des fichiers README de chaque test) impose une nouvelle contrainte sur la forme des fichiers README (interdiction d'utiliser des lignes de 3 tirets ou plus dans le corps d'une rubrique README car ce motif signifie la fin d'une rubrique). Cette contrainte est le choix actuel mais peut \^etre modifié à tout moment en définissant une balise de fin de rubrique à utiliser dans les fichiers README (par exemple : \verb|fin_rubrique|) et en indiquant sa syntaxe dans la variable \verb|$MOTIF_FIN_RUBRIQUE| du script \verb|Perl/genere_catalogue_tests.pl|.\\
\item[-] Apparition d'une nouvelle rubrique README : \it Auteur \rm (renseigne le ou les auteurs du test avec prénom, nom, adresse mail). rubrique qui appara\^it dans la documentation des tests.\\
\end{itemize}%tiret
\item[$\bullet$] 2015-07-13 (Julien Troufflard) :
\begin{itemize}
\item[-] changement du nom du fichier de catalogue de tests (désormais s'appellera \verb|catalogue_test.pdf| au lieu de \verb|documentation_tests.pdf|)\\
\item[-] le fichier .pdf de la document utilisateur principale est désormais archivé sous CVS. Il s'appelle \verb|doc_procedure_verification.pdf| et est placé à la racine du projet (il s'agit simplement du fichier généré par \verb|Doc/doc_procedure_verification.tex|)\\
\end{itemize}%tiret
\item[$\bullet$] 2015-07-15 (Julien Troufflard) :
\begin{itemize}
\item[-] ajout d'une nouvelle version du script de lancement de la batterie. Cette nouvelle version en Perl s'appelle \verb|verifier_exeHZ.pl|. Elle reproduit la m\^eme chose que la version actuelle en zsh mais propose en plus des options pour éviter de lancer tous les tests. La version précédente \verb|verifier_exeHZ| est conservée mais renommée en \verb|verifier_exeHZ.zsh|. A terme, cette version zsh sera supprimée du projet CVS.\\
\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 "-"
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%\item[$\bullet$] AAAA-MM-JJ (Prénom Nom) :
%\begin{itemize}
%\item[-] blabla 1\\
%\item[-] blabla 2\\
%.
%.
%.
%\item[-] blabla N\\
%\end{itemize}%tiret
\end{itemize}%bullet

View file

@ -38,11 +38,17 @@ my $format_reel = '[+-]?[\.]?\d+[\.]?\d*(?:[eE][+-]?\d*)?';
#
#
# Notes aux utilisateurs :
# les repertoires de tests sont recherches dans toute l arborescence depuis l endroit ou
# ce script est lance (recherche de tous les repertoires commencant par Test_R ou Test_L)
# A noter que si un des repertoires ne contient pas de fichier README, le script s arrete sans
# creation du .pdf. De meme, si l un des fichiers README ne contient pas la rubrique "But du test"
# ou "Description du calcul"
# - les repertoires de tests sont recherches dans toute l arborescence depuis l endroit ou
# ce script est lance (recherche de tous les repertoires commencant par Test_R ou Test_L)
# A noter que si un des repertoires ne contient pas de fichier README, le script s arrete sans
# creation du .pdf. De meme, si l un des fichiers README ne contient pas la rubrique "But du test"
# ou "Description du calcul". Cette securite a ete mise pour obliger a tenir a jour les README,
# evitant ainsi l oubli de certains tests dont le README n aurait pas ete cree ou mal cree.
# - A noter egalement que les repertoires vides vont provoquer l arret du programme. Il s agit des
# repertoires de tests qui ont ete supprimes de la base CVS mais dont la presence persiste. Comme
# ils sont vides, il n y a pas de README d ou l arret du programme. Pour supprimer,
# ces repertoires vides, il suffit de faire "cvs update -dP" ou bien utiliser l option -P a l import du
# projet "cvs co -P Verif_Herezh"
#
# Notes aux developpeurs :
# - le choix de ne pas generer de pdf a la moindre defaillance d un fichier README a pour
@ -56,8 +62,8 @@ my $format_reel = '[+-]?[\.]?\d+[\.]?\d*(?:[eE][+-]?\d*)?';
# un certain nombre de caracteres ou de groupes de caracteres ne sont pas directement utilisables
# dans un fichier .tex
# (par exemple : <, >, _, etc... ou bien encore les exposants ^3.14159265)
# Le plus souvent, il suffit de rajouter des dollars autour des caracteres problematiques mais
# ce n est pas systematique.
# Le plus souvent, ce script rajoute des dollars autour des caracteres problematiques mais
# cette action ne resoud pas tous les problems.
# La gestion de ces caracteres se fait au cas par cas dans la subroutine translate_to_latex()
# au niveau du bloc "A FAIRE EVOLUER" (par substitution de caracteres s///g)
@ -75,7 +81,7 @@ my $format_reel = '[+-]?[\.]?\d+[\.]?\d*(?:[eE][+-]?\d*)?';
#--------------------------------------------------------------------------------
#nom du fichier catalogue de tests
#--------------------------------------------------------------------------------
my $NOM_PDF_CATALOGUE = "documentation_tests.pdf";
my $NOM_PDF_CATALOGUE = "catalogue_tests.pdf";
#--------------------------------------------------------------------------------
#encodage du fichier .tex temporaire (rq : notamment pour accepter les accents)
@ -161,7 +167,7 @@ if($is_absence_README) {
# a la fin, seul le .pdf restera, tous les fichiers intermediaires seront effaces)
#########################################################################################################
#on va creer un repertoire temporaire qui est sense s effacer automatiquement
#on va creer un repertoire temporaire qui est sense s effacer automatiquement grace a l utilisation de File::Temp->newdir
# le probleme est que si un signal d interruption est envoye (ctrl-c par exemple), le repertoire ne sera pas efface.
# donc, on va capturer certains signaux pour faire un appel a la subroutine sortie_programme()
$SIG{INT} = \&sortie_programme;#INT => capture signal : ctrl-c ou kill -2
@ -186,11 +192,19 @@ preambule_fic_tex_tmp($HANDLE_TEX);
#corps du texte (d abord les tests rapides, ensuite les tests longs)
#------------------------------------------------------------------------------------------
#--- tests rapides ---
afficher_ligne_tirets('print');
print " TESTS RAPIDES\n";
afficher_ligne_tirets('print');
sleep 1;#petite pause pour laisser a l utilisateur le temps de voir l affichage precedent
print $HANDLE_TEX "\\clearpage\n";
print $HANDLE_TEX "\\section{Tests rapides}\n";
recopie_README("R", $HANDLE_TEX, \@REP_TESTS_R, @LISTE_RUBRIQUES_README);
#--- tests longs ---
afficher_ligne_tirets('print');
print " TESTS LONGS\n";
afficher_ligne_tirets('print');
sleep 1;#petite pause pour laisser a l utilisateur le temps de voir l affichage precedent
print $HANDLE_TEX "\\clearpage\n";
print $HANDLE_TEX "\\section{Tests longs}\n";
recopie_README("L", $HANDLE_TEX, \@REP_TESTS_L, @LISTE_RUBRIQUES_README);
@ -216,8 +230,13 @@ close($HANDLE_TEX);
# 3- deuxieme pdflatex (table des matieres et index)
#------------------------------------------------------------------------------------------
print "\n";
afficher_ligne_tirets('print');
print "compilation pdflatex (1ere fois)\n";
afficher_ligne_tirets('print');
sleep 1;#petite pause pour laisser a l utilisateur le temps de voir l affichage precedent
#---
#-1ere comilation (pdflatex avec option -halt-on-error pour forcer a quitter a la moindre erreur)
#---
system("pdflatex -halt-on-error $racine_fic_latex.tex > toto.log");
#-verif presence .pdf
if(not -e "$racine_fic_latex.pdf") {
@ -231,8 +250,13 @@ system("pdflatex -halt-on-error $racine_fic_latex.tex > toto.log");
chdir "..";
sortie_programme();
}
#---
#-generation de l index
#---
afficher_ligne_tirets('print');
print "compilation index (makeindex)\n";
afficher_ligne_tirets('print');
sleep 1;#petite pause pour laisser a l utilisateur le temps de voir l affichage precedent
#-verif presence .idx
if(not -e "$racine_fic_latex.idx") {
warn "\nErreur (prog:$NOM_PROG) : le fichier index .idx n a pas ete cree\n";
@ -246,8 +270,13 @@ print "compilation index (makeindex)\n";
sortie_programme();
}
system("makeindex $racine_fic_latex.idx > toto.log");
#---
#-2eme compilation (pdflatex avec option -halt-on-error pour forcer a quitter a la moindre erreur)
#---
afficher_ligne_tirets('print');
print "compilation pdflatex (2eme fois)\n";
afficher_ligne_tirets('print');
sleep 1;#petite pause pour laisser a l utilisateur le temps de voir l affichage precedent
system("rm -f $racine_fic_latex.pdf");
system("pdflatex -halt-on-error $racine_fic_latex.tex > toto.log");
#-verif presence .pdf
@ -740,6 +769,9 @@ sub afficher_ligne_tirets {
#--------------------------------------------------
#subroutine d ecriture du preambule du fichier .tex temporaire
#--------------------------------------------------
#a noter que dans ce preambule :
# - il y a des declarations particulieres pour generer proprement un index par mots-cles renvoyant
# aux sections (au lieu des numeros de page). Il s agit de \usepackage{imakeidx}, \newcommand{\ind}, \newcommand{\inds}
sub preambule_fic_tex_tmp {
my $handle = shift;
@ -815,6 +847,7 @@ citecolor= green %couleur citation biblio
\newcommand{\inds}[2]{#1}
% exemple de sequence avec une section et 2 mots indexes concernant cette section :
% \section{Revelations : la face cachee du monde de la recherche}\label{section_1}\ind{scandale}{section_1}\ind{Capital_sur_M6}{section_1}
%commande suivante pour que l index figure dans la table des matieres
\makeindex[intoc]
\begin{document}

View file

@ -121,8 +121,8 @@ foreach my $arg (@ARGV) {
#affichage de l aide si option -h ou -help ou si il n y a pas assez d arguments
if($is_opt_help or $#ARGV < 1) {
print "USAGE (prog:$NOM_PROG)... \n";
print "Ce script Perl s'utilise avec 2 arguments : \n";
print " -> 1] Nom du repertoire Test dans lequel se situe un fichier '.info'.\n";
print "Ce script Perl s utilise avec 2 arguments : \n";
print " -> 1] Nom du repertoire Test dans lequel se situe un fichier \'.info\'.\n";
print " -> 2] Nom de l executable Herezh\n";
exit;
}

View file

@ -1,11 +1,11 @@
---------------------------------------
- RAPPORT DE TEST -
---------------------------------------
- version HZ++ : HZppfast 6.709
- version HZ++ : HZppfast 6.713
- Batterie de tests lancee
- le 22/06/2015
- a 16:47 (heure locale)
- le 13/07/2015
- a 18:48 (heure locale)
---------------------------------------
./Batterie/FONCTION_UNIQUE/LOI_DE_COMPORTEMENT/CP_venant_du_3D/Test_L_tunnel_ISOELAS_CP/.CVisu1

View file

@ -1,11 +1,11 @@
---------------------------------------
- RAPPORT DE TEST -
---------------------------------------
- version HZ++ : HZppfast 6.709
- version HZ++ : HZppfast 6.713
- Batterie de tests lancee
- le 22/06/2015
- a 16:47 (heure locale)
- le 13/07/2015
- a 18:47 (heure locale)
---------------------------------------
./Batterie/FONCTION_UNIQUE/CONTACT/Test_R_contact_axi_non_dynamique/.CVisu1
@ -94,12 +94,24 @@
- comparaison relative (precision : 1.e-3%) -> OK
-> grandeur testee : colonne [22]
- comparaison absolue (precision : 1.e-6) -> OK
- comparaison relative (precision : 1.e-3%) -> OK
- comparaison absolue (precision : 1.e-6) -> ECHEC
-> Valeur = 7.911199265281e+03
-> Valeur reference = 3.955599632662e+03
-> Difference = 3955.599633
- comparaison relative (precision : 1.e-3%) -> ECHEC
-> Valeur = 7.911199265281e+03
-> Valeur reference = 3.955599632662e+03
-> Difference relative = 100.000%
-> grandeur testee : colonne [23]
- comparaison absolue (precision : 1.e-6) -> OK
- comparaison relative (precision : 1.e-3%) -> OK
- comparaison absolue (precision : 1.e-6) -> ECHEC
-> Valeur = -5.715819369653e+00
-> Valeur reference = -2.857909684829e+00
-> Difference = -2.857910
- comparaison relative (precision : 1.e-3%) -> ECHEC
-> Valeur = -5.715819369653e+00
-> Valeur reference = -2.857909684829e+00
-> Difference relative = 100.000%
-> grandeur testee : colonne [24]
- comparaison absolue (precision : 1.e-6) -> OK
@ -248,7 +260,7 @@
- comparaison absolue (precision : 1.e-6) -> OK
- comparaison relative (precision : 1.e-3%) -> OK
./Batterie/FONCTION_UNIQUE/LOI_DE_COMPORTEMENT/MOONEY_RIVLIN_3D/Test_R_cisaillement/.CVisu1
./Batterie/FONCTION_UNIQUE/LOI_DE_COMPORTEMENT/MOONEY_RIVLIN_3D/Test_R_cube_MOONEY_RIVLIN_3D_cisaillement/.CVisu1
-> grandeur testee : colonne [1]
- comparaison absolue (precision : 1.e-6) -> OK
- comparaison relative (precision : 1.e-3%) -> OK
@ -273,7 +285,7 @@
- comparaison absolue (precision : 1.e-6) -> OK
- comparaison relative (precision : 1.e-3%) -> OK
./Batterie/FONCTION_UNIQUE/LOI_DE_COMPORTEMENT/MOONEY_RIVLIN_3D/Test_R_traction/.CVisu1
./Batterie/FONCTION_UNIQUE/LOI_DE_COMPORTEMENT/MOONEY_RIVLIN_3D/Test_R_cube_MOONEY_RIVLIN_3D_traction/.CVisu1
-> grandeur testee : colonne [1]
- comparaison absolue (precision : 1.e-6) -> OK
- comparaison relative (precision : 1.e-3%) -> OK

Binary file not shown.

410
verifier_exeHZ.pl Executable file
View file

@ -0,0 +1,410 @@
#!/usr/bin/perl
#!/usr/local/bin/perl
use strict;
use warnings;
use English;
use File::Basename;
use File::Spec::Functions qw(splitpath rel2abs);#($volume, $rep, $fic) = splitpath($path); $absolute_path = rel2abs($relative_path)
my $NOM_PROG = basename $PROGRAM_NAME;
#pattern d un reel pour les regex (desormais redondant avec $RE{num}{real} de Regexp::Common)
my $format_reel = '[+-]?[\.]?\d+[\.]?\d*(?:[eE][+-]?\d*)?';
##########################################################################
##########################################################################
##########################################################################
#
# RECUPERATION ET VERIFICATION DES ARGUMENTS ET OPTIONS DU SCRIPT
#
##########################################################################
##########################################################################
##########################################################################
#indicateur de l option -h ou -help => affichage aide
my $is_opt_help = 0;
foreach my $arg (@ARGV) {
if($arg =~ /-h/i or $arg =~ /-help/i) {
$is_opt_help = 1;
last;
}
}
#--------------------------------------------------------------------------
# affichage de l aide si option -h ou -help ou si il n y a pas assez d arguments
#--------------------------------------------------------------------------
if($is_opt_help or $#ARGV < 0) {
afficher_ligne_tirets('print');
print "Script $NOM_PROG \n";
afficher_ligne_tirets('print');
print " Description :\n";
print " Lancement de la batterie de verification Herezh\n";
print " Par defaut, ce script lance tous les tests disponibles dans l arborescence.\n";
print " Un certain nombre d options sont proposees pour modifier le fonctionnement.\n";
print "\n";
print " Pour les tests rapides : le rapport sera contenu dans Rapport/rapport_Test_R.txt\n";
print " Pour les tests longs : le rapport sera contenu dans Rapport/rapport_Test_L.txt\n";
print " En cas d option -rpt : le rapport sera contenu dans Rapport/rapport_test_debugECHEC.txt\n";
print "\n";
print " Usage : $NOM_PROG [-R] [-L] [-rpt fic_rapport] exeHZ\n";
print "\n";
print " Argument obligatoire :\n";
print " exeHZ : nom de l executable Herezh\n";
print "\n";
print " Options :\n";
print " -R : ne lancer que les tests rapides (Test_R)\n";
print "\n";
print " -L : ne lancer que les tests longs (Test_L)\n";
print "\n";
print " -rpt fic_rapport : seuls les tests presents dans le fichier de rapport\n";
print " fic_rapport et ayant un indicateur ECHEC seront lances\n";
print "\n";
print " Remarque :\n";
print " contrairement aux commandes linux classiques, les options de ce script\n";
print " peuvent etre placees n importe ou. Par exemple, les commandes suivantes\n";
print " fonctionnent de maniere equivalente :\n";
print " > $NOM_PROG -R HZppfast_Vn-1\n";
print " > $NOM_PROG HZppfast_Vn-1 -R\n";
afficher_ligne_tirets('print');
print "\n";
exit;
}
#--------------------------------------------------------------------------
# recuperation des arguments et options
#--------------------------------------------------------------------------
my $exeHZ;#argument obligatoire : nom de l executable Herezh
my $is_opt_R = 0;#indicateur de l option -R (0 par defaut; si egal 1 => lancement des tests rapides Test_R uniquement)
my $is_opt_L = 0;#indicateur de l option -L (0 par defaut; si egal 1 => lancement des tests longs Test_L uniquement)
my $fic_rapport;#option -rpt : nom du fichier de rapport a exploiter (non defini par defaut; si utilisation de l option -rpt => lancement uniquement des tests ayant echoue de ce rapport (ECHEC)
#On vide le contenu de @ARGV en conservant les arguments obligatoires dans @args et traiter les options au cas par cas
my $opt;
my @args;
while($#ARGV != -1) {
$opt = shift(@ARGV);
#option -R
if($opt eq '-R') {
$is_opt_R = 1;
}
#option -L
elsif($opt eq '-L') {
$is_opt_L = 1;
}
#option -rpt
elsif($opt eq '-rpt') {
($#ARGV != -1) or die "\nErreur (prog:$NOM_PROG, opt:-rpt) : l option -rpt necessite de specifier un nom de fichier rapport...\n\n";
$fic_rapport = shift(@ARGV);
#verif de l existence du fichier rapport
(-e $fic_rapport) or die "\nErreur (prog:$NOM_PROG, opt:-rpt) : fichier rapport $fic_rapport introuvable...\n\n";
}
#* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
#note aux developpeurs : AJOUTER ICI LE TRAITEMENT D UNE NOUVELLE OPTION
#* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
#cas d une option inconnue (on l ignore)
elsif($opt =~ /^-/) {
warn "Attention (prog:$NOM_PROG) : l option $opt est inconnue (et ignoree)...\n";
warn "(taper entree pour continuer...)\n";
<STDIN>;
}
#sinon on enregistre l argument dans @args
else {
push(@args, $opt);
}
}#while($#ARGV != -1)
#a ce stade, les arguments restants sont dans @args
($#args >= 0) or die "\nErreur (prog:$NOM_PROG) : arguments manquants ($NOM_PROG -h pour afficher l aide)...\n\n";
#premier argument obligatoire : nom de l executable Herezh
$exeHZ = shift(@args);
#* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
#note aux developpeurs : AJOUTER ICI DE NOUVELLES VERIF EN LIEN AVEC UNE NOUVELLE OPTION OU UN NOUVEL ARGUMENT
#* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
#--------------------------------------------------------------------------
# verification des arguments et options
#--------------------------------------------------------------------------
#validite de l executable Herezh
(verif_commande($exeHZ) ne '0') or die "\nErreur (prog:$NOM_PROG) : commande Herezh $exeHZ introuvable ou non executable...\n\n";
#option -R et -L mutuellement exclusives (si les 2 ont ete utilisees => erreur)
if($is_opt_R and $is_opt_L) {
die "\nErreur (prog:$NOM_PROG, opt:-R/-L) : interdiction d utiliser les options -R et -L en meme temps...\n\n";
}
#si option -rpt : verif de l existence et de la validite du fichier rapport $fic_rapport
if(defined $fic_rapport) {
#existence
(-e $fic_rapport) or die "\nErreur (prog:$NOM_PROG, opt:-rpt) : fichier $fic_rapport introuvable...\n\n";
#validite (par une heuristique : est valide si on y trouve la chaine "RAPPORT DE TEST", sensible a la casse)
my $fichier_valide = 0;
open(FIC, "<$fic_rapport");
while(<FIC>) {next if(not /RAPPORT DE TEST/); $fichier_valide = 1; last;}
close(FIC);
$fichier_valide or die "\nErreur (prog:$NOM_PROG, opt:-rpt) : fichier $fic_rapport existe mais n est pas un fichier de rapport genere par le script $NOM_PROG...\n\n";
}
#* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
#note aux developpeurs : AJOUTER ICI DE NOUVELLES VERIF EN LIEN AVEC UNE NOUVELLE OPTION OU UN NOUVEL ARGUMENT
#* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
##########################################################################
##########################################################################
##########################################################################
#
# LANCEMENT DES TESTS
#
##########################################################################
##########################################################################
##########################################################################
#verification prealable de la presence du repertoire Rapport
# > si existe deja mais est un fichier => arret avec message d erreur
if(-f "./Rapport") {
die "\nErreur (prog:$NOM_PROG) : la presence d un repertoire de nom Rapport est necessaire mais le repertoire contient deja un fichier de nom Rapport...\n\n";
}
# > si absent => on le cree
mkdir "./Rapport" if(not -e "./Rapport");
#--------------------------------------------------------------------------
# option -rpt => lancement uniquement des tests ayant echoue du rapport $fic_rapport (et sortie du programme)
#--------------------------------------------------------------------------
my @LISTE_TESTS_ECHEC;
if(defined $fic_rapport) {
open(FIC, "<$fic_rapport");
my $is_test_ECHEC;
my $nom_repertoire_test;
while(<FIC>) {
#si c est une ligne finissant par .CVisu[no], alors cette ligne contient un nom de repertoire de test
if(/^\s*(.+).CVisu\d+/) {
$nom_repertoire_test = $1;#on actualise le nom de repertoire de test courant
$is_test_ECHEC = 0;#on reset l indicateur d echec
#petite retouche cosmetique => suppression d eventuels / en fin de nom de repertoire
$nom_repertoire_test =~ s/\/+$//;
}
#si le mot ECHEC est trouve => on enregistre le repertoire (sauf si ca a deja ete fait precedemment)
elsif(/ECHEC/) {
push(@LISTE_TESTS_ECHEC, $nom_repertoire_test);
#dans la ligne suivante, on evite d enregistrer plusieurs fois un meme repertoire
pop(@LISTE_TESTS_ECHEC) if($#LISTE_TESTS_ECHEC >= 1 and $LISTE_TESTS_ECHEC[-1] eq $LISTE_TESTS_ECHEC[-2]);
}
}
close(FIC);
##print "$_\n" for @LISTE_TESTS_ECHEC; exit;
#si il n y a aucun test ECHEC dans @LISTE_TESTS_ECHEC => tant mieux! on affiche la bonne nouvelle et on exit
if($#LISTE_TESTS_ECHEC == -1) {
print "\n";
print "Aucun test ECHEC n a ete trouve dans le fichier $fic_rapport ...\n\n";
print " - arret -\n";
exit;
}
#sinon => lancement des tests
else {
#renommage d un eventuel rapport precedent en _OLD (et la liste des tests associee)
system("mv -f Rapport/rapport_test_debugECHEC.txt Rapport/rapport_test_debugECHEC_OLD.txt");
system("mv -f Rapport/Liste_Tests_debugECHEC.txt Rapport/Liste_Tests_debugECHEC.txt");
#creation du rapport temporaire
system("./Perl/genere_rapport.pl Rapport/rapport_test.txt $exeHZ");
#liste des tests
foreach my $rep_test (@LISTE_TESTS_ECHEC) {
system("echo $rep_test >> Rapport/Liste_Tests_debugECHEC.txt");
}
#lancement des tests (dont le resultat s ecrit dans le rapport temporaire)
foreach my $rep_test (@LISTE_TESTS_ECHEC) {
system("./Perl/test.pl $rep_test $exeHZ");
}
#creation du fichier rapport final
system("mv -f Rapport/rapport_test.txt Rapport/rapport_test_debugECHEC.txt");
#affichage du rapport
system("nedit Rapport/rapport_test_debugECHEC.txt &");
}
#on arrete le script
exit;
}#fin option -rpt
#--------------------
#lancement des tests rapides (sauf en cas d option -L)
#--------------------
unless($is_opt_L) {
#recherche des tests Test_R dans l arborescence (utilisation de find et suppression de chaque retour a la ligne avec chomp)
my @LISTE_TESTS_R = map {chomp; $_} qx(find . -name "Test_R*" -type d);
#si il n y a aucun test dans @LISTE_TESTS_R => on le signale
if($#LISTE_TESTS_R == -1) {
print "\n";
print "Aucun test rapide Test_R n a ete trouve...\n\n";
}
#sinon => lancement des tests
else {
#renommage d un eventuel rapport precedent en _OLD (et la liste des tests associee)
system("mv -f Rapport/rapport_test_R.txt Rapport/rapport_test_R_OLD.txt");
system("mv -f Rapport/Liste_Tests_R.txt Rapport/Liste_Tests_R.txt");
#creation du rapport temporaire
system("./Perl/genere_rapport.pl Rapport/rapport_test.txt $exeHZ");
#liste des tests
foreach my $rep_test (@LISTE_TESTS_R) {
system("echo $rep_test >> Rapport/Liste_Tests_R.txt");
}
#lancement des tests (dont le resultat s ecrit dans le rapport temporaire)
foreach my $rep_test (@LISTE_TESTS_R) {
system("./Perl/test.pl $rep_test $exeHZ");
}
#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 &");
}
}
#--------------------
#lancement des tests longs (sauf en cas d option -R)
#--------------------
unless($is_opt_R) {
#recherche des tests Test_L dans l arborescence (utilisation de find et suppression de chaque retour a la ligne avec chomp)
my @LISTE_TESTS_L = map {chomp; $_} qx(find . -name "Test_L*" -type d);
#si il n y a aucun test dans @LISTE_TESTS_L => on le signale
if($#LISTE_TESTS_L == -1) {
print "\n";
print "Aucun test long Test_L n a ete trouve...\n\n";
}
#sinon => lancement des tests
else {
#renommage d un eventuel rapport precedent en _OLD (et la liste des tests associee)
system("mv -f Rapport/rapport_test_L.txt Rapport/rapport_test_L_OLD.txt");
system("mv -f Rapport/Liste_Tests_L.txt Rapport/Liste_Tests_L.txt");
#creation du rapport temporaire
system("./Perl/genere_rapport.pl Rapport/rapport_test.txt $exeHZ");
#liste des tests
foreach my $rep_test (@LISTE_TESTS_L) {
system("echo $rep_test >> Rapport/Liste_Tests_L.txt");
}
#lancement des tests (dont le resultat s ecrit dans le rapport temporaire)
foreach my $rep_test (@LISTE_TESTS_L) {
system("./Perl/test.pl $rep_test $exeHZ");
}
#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 &");
}
}
##########################################################################
##########################################################################
##########################################################################
#
# SUBROUTINES
#
##########################################################################
##########################################################################
##########################################################################
#####################################################################################################
#subroutine permettant d ecrire une ligne de tirets de la largeur du terminal
#####################################################################################################
#
# en entree :
# - print ou warn (suivant que l on souhaite afficher avec print (donc vers STDOUT) ou warn (donc vers STDERR)
#
sub afficher_ligne_tirets {
use Term::ReadKey;
my $nb_char_largeur_terminal = ( GetTerminalSize() )[0];#largeur du terminal en nombre de caracteres (via package Term::ReadKey)
my $funct_disp = shift;
my $ligne_tirets = '';
$ligne_tirets .= '-' for(1 .. $nb_char_largeur_terminal);
print "$ligne_tirets\n" if($funct_disp eq 'print');
warn "$ligne_tirets\n" if($funct_disp eq 'warn');
}#sub afficher_ligne_tirets
#####################################################################################################
#subroutine qui recherche l existence d une commande et renvoie le premier path trouve (renvoie 0 si commande introuvable)
#####################################################################################################
# en entree :
# - nom de la commande
#
# en sortie :
# - chemin aboslu de la commande (0 si commande introuvable)
#
sub verif_commande {
my $cmd = shift;#nom de la commande
#cas d un chemin absolu ou relatif (si la commande commence par . ou /. Par exemple : ./HZpp ../HZppfast ou /Users/dupont/bin/HZppfast)
if($cmd =~ /^\./ or $cmd =~ /^\//) {
#on passe la commande en chemin absolu
$cmd = rel2abs($cmd);
return $cmd;
}
#sinon on regarde dans la variable environnement $PATH
foreach my $path (split(/\s*:\s*/, $ENV{PATH})) {
if(-x "$path/$cmd") {
#on s assure que c est un chemin absolu
$cmd = rel2abs("$path/$cmd");
return $cmd;
}
}
#on regarde a nouveau si la commande est en chemin absolu ou relatif
# (cas d une commande qui ne commence pas par . ou / et qui n est pas dans les PATH. Par exemple : rep/HZpp)
if(-x $cmd) {
#on passe la commande en chemin absolu
$cmd = rel2abs($cmd);
return $cmd;
}
#cas ou la commande est introuvable
return 0;
}#sub verif_commande

View file

@ -80,7 +80,7 @@ mv -f Rapport/rapport_test_R.txt Rapport/rapport_test_R_OLD.txt
###--- le chemin de tous ces répertoires /Test_R* ---###
###-------------------------------------------------------###
mv Rapport/Liste_Tests_R.txt Rapport/Liste_Tests_R_OLD.txt
foreach f (`find . -name "*Test_R*" -type d`)
foreach f (`find . -name "Test_R*" -type d`)
echo $f >> Rapport/Liste_Tests_R.txt
end
@ -94,7 +94,7 @@ end
#- Execution de "test.pl nom_repertoire type_calcul" -#
#- une fois que l'on est placé au bon endroit -#
#-----------------------------------------------------#
foreach f (`find . -name "*Test_R*" -type d`)
foreach f (`find . -name "Test_R*" -type d`)
./Perl/test.pl $f $cmd_herezh
end
@ -128,7 +128,7 @@ mv -f Rapport/rapport_test_L.txt Rapport/rapport_test_L_OLD.txt
###--- le chemin de tous ces répertoires /Test_L ---###
###-------------------------------------------------------###
mv Rapport/Liste_Tests_L.txt Rapport/Liste_Tests_L_OLD.txt
foreach f (`find . -name "*Test_L*" -type d`)
foreach f (`find . -name "Test_L*" -type d`)
echo $f >> Rapport/Liste_Tests_L.txt
end
@ -142,7 +142,7 @@ end
#- Execution de "test.pl nom_repertoire type_calcul" -#
#- une fois que l'on est placé au bon endroit -#
#-----------------------------------------------------#
foreach f (`find . -name "*Test_L*" -type d`)
foreach f (`find . -name "Test_L*" -type d`)
./Perl/test.pl $f $cmd_herezh
end