1 #@ MODIF test_fichier_ops Macro DATE 03/11/2004 AUTEUR MCOURTOI M.COURTOIS
2 # -*- coding: iso-8859-1 -*-
3 # CONFIGURATION MANAGEMENT OF EDF VERSION
4 # ======================================================================
5 # COPYRIGHT (C) 1991 - 2004 EDF R&D WWW.CODE-ASTER.ORG
6 # THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY
7 # IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY
8 # THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR
9 # (AT YOUR OPTION) ANY LATER VERSION.
11 # THIS PROGRAM IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, BUT
12 # WITHOUT ANY WARRANTY; WITHOUT EVEN THE IMPLIED WARRANTY OF
13 # MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. SEE THE GNU
14 # GENERAL PUBLIC LICENSE FOR MORE DETAILS.
16 # YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE
17 # ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER,
18 # 1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.
19 # ======================================================================
21 #-------------------------------------------------------------------------------
22 def test_fichier_ops(self, UNITE, FICHIER, NB_CHIFFRE, EPSILON, VALE_K, INFO, **args):
24 Macro TEST_FICHIER permettant de tester la non-regression d'un fichier
25 'a une tolerance' pres pour les nombres reels en calculant
31 # La macro compte pour 1 dans la numerotation des commandes
35 # On importe les definitions des commandes a utiliser dans la macro
36 # Le nom de la variable doit etre obligatoirement le nom de la commande
37 INFO_EXEC_ASTER = self.get_cmd('INFO_EXEC_ASTER')
38 DETRUIRE = self.get_cmd('DETRUIRE')
39 CREA_TABLE = self.get_cmd('CREA_TABLE')
40 TEST_TABLE = self.get_cmd('TEST_TABLE')
44 from types import StringType
45 from Macro.test_fichier_ops import md5file
47 # vérifie la syntaxe des expressions régulières fournies
49 if args['EXPR_IGNORE']:
50 if type(args['EXPR_IGNORE']) is StringType:
51 lexp = [args['EXPR_IGNORE']]
53 lexp = args['EXPR_IGNORE']
58 print '<F> <TEST_FICHIER> <INVALID_REGEXP> '+str(s)+' pour "'+exp+'"'
61 if len(l_regexp) < len(lexp):
62 self.cr.fatal(' <F> <TEST_FICHIER> Expression régulière invalide (voir <INVALID_REGEXP>)')
67 # vérifier que le fichier a été fermé
68 tinfo__ = INFO_EXEC_ASTER(LISTE_INFO='ETAT_UNITE', FICHIER=FICHIER)
70 if tinfo__['ETAT_UNITE',1].find('OUVERT')>-1:
71 print "<A> <TEST_FICHIER> LE FICHIER N'A PAS ETE FERME :\n",FICHIER
73 # fichier correctement fermé
75 # calcule le md5sum du fichier
76 ier, mdsum = md5file(FICHIER, NB_CHIFFRE, EPSILON, l_regexp, INFO)
79 texte_erreur='Fichier inexistant : '+FICHIER
81 texte_erreur='Erreur dans md5file, code retour = '+str(ier)
82 texte_erreur='<S> <TEST_FICHIER> '+texte_erreur
83 # aujourd'hui, je ne sais pas déclencher autre chose que <F>...
84 self.cr.fatal(texte_erreur)
87 # comparaison a la reference
89 print ' %-20s : %32s' % ('REFERENCE',VALE_K)
95 # produit le TEST_TABLE
96 tab1__=CREA_TABLE(LISTE=(_F(PARA='TEST',
101 if args['REFERENCE'] == 'NON_REGRESSION':
102 TEST_TABLE(UNITE=UNITE,
104 FILTRE=_F(NOM_PARA='TEST',
110 REFERENCE=args['REFERENCE'],
111 VERSION=args['VERSION'],)
113 TEST_TABLE(UNITE=UNITE,
115 FILTRE=_F(NOM_PARA='TEST',
121 REFERENCE=args['REFERENCE'],)
123 DETRUIRE(CONCEPT=_F(NOM=('tinfo__','tab1__'),),
124 ALARME='NON',INFO=1,)
128 #-------------------------------------------------------------------------------
129 def md5file(fich,nbch,epsi,regexp_ignore=[],info=0):
131 Cette methode retourne le md5sum d'un fichier en arrondissant les nombres
132 reels a la valeur significative.
134 fich : nom du fichier
135 nbch : nombre de decimales significatives
136 epsi : valeur en deca de laquelle on prend 0
137 regexp_ignore : liste d'expressions régulières permettant d'ignorer
140 code retour : 0 si ok, >0 sinon
149 # v0 2.6 s 20.4 s 196.6 s
150 # v1 2.0 s 10.3 s 94.9 s (pas de distinction entier/reel)
151 # remplacer le try/except par if re.search(...), 80% plus lent
152 if not os.path.isfile(fich):
155 format_float='%'+str(nbch+7)+'.'+str(nbch)+'g'
163 for exp in regexp_ignore:
164 if re.search(exp,ligne):
167 print ' >>>>>>>>>> IGNOREE <<<<<<<<<<',
170 #r=string.split(ligne)
171 # découpe des nombres collés : 1.34E-142-1.233D+09
172 r=string.split(re.sub('([0-9]+)\-','\g<1> -',ligne))
175 if abs(float(x))<epsi:
178 s=format_float % float(x)
182 print (' %'+str(nbch+7)+'s') % s,
190 print form % ('Fichier',fich)
191 print form % ('Nombre de lignes',str(i))
192 print form % ('Format des reels',format_float)
193 print form % ('Epsilon',str(epsi))
194 print form % ('md5sum',md5sum)