xref: /petsc/config/report_tests.py (revision 68f6ad6b5f525c8a805a05d6246924521f937343)
18ccd5183SScott Kruger#!/usr/bin/env python
28ccd5183SScott Krugerimport glob, os
38ccd5183SScott Krugerimport optparse
48ccd5183SScott Kruger"""
58ccd5183SScott KrugerQuick script for parsing the output of the test system and summarizing the results.
68ccd5183SScott Kruger"""
78ccd5183SScott Kruger
88ccd5183SScott Krugerdef summarize_results(directory):
98ccd5183SScott Kruger  ''' Loop over all of the results files and summarize the results'''
108ccd5183SScott Kruger  startdir=os.path.realpath(os.path.curdir)
118ccd5183SScott Kruger  os.chdir(directory)
128ccd5183SScott Kruger  summary={'total':0,'success':0,'failed':0,'failures':'','todo':0,'skip':0}
138ccd5183SScott Kruger  for cfile in glob.glob('*.counts'):
148ccd5183SScott Kruger    sh=open(cfile,"r"); fileStr=sh.read(); sh.close()
158ccd5183SScott Kruger    for line in fileStr.split('\n'):
168ccd5183SScott Kruger      if not line: break
178ccd5183SScott Kruger      try:
188ccd5183SScott Kruger        var,val=line.split()
198ccd5183SScott Kruger        if not val.strip(): continue
208ccd5183SScott Kruger        val=int(val)
218ccd5183SScott Kruger      except:
228ccd5183SScott Kruger        var=line.split()[0]
23a2766241SScott Kruger        lval=len(line.split())-1
24a2766241SScott Kruger        if lval==0: continue
25a2766241SScott Kruger        val=line.split()[1]
26a2766241SScott Kruger        if not val.strip(): continue
27a2766241SScott Kruger        append=" ("+str(lval)+"), " if lval>1 else ", "
28a2766241SScott Kruger        val=val+append
29a2766241SScott Kruger
308ccd5183SScott Kruger      summary[var]=summary[var]+val
318ccd5183SScott Kruger
32*68f6ad6bSScott Kruger  print "\n# -------------"
33*68f6ad6bSScott Kruger  print "#   Summary    "
34*68f6ad6bSScott Kruger  print "# -------------"
35a2766241SScott Kruger  print "# FAILED "+summary['failures'].rstrip(', ')
368ccd5183SScott Kruger  total=str(summary['total'])
378ccd5183SScott Kruger
388ccd5183SScott Kruger  for t in "success failed todo skip".split():
398ccd5183SScott Kruger    percent=summary[t]/float(summary['total'])*100
408ccd5183SScott Kruger    prcnt="{:3.1f}".format(percent)
418ccd5183SScott Kruger    print "# "+t+" "+ str(summary[t])+"/"+total+" tests ("+prcnt+'%)'
428ccd5183SScott Kruger  return
438ccd5183SScott Kruger
448ccd5183SScott Krugerdef main():
458ccd5183SScott Kruger    parser = optparse.OptionParser(usage="%prog [options]")
468ccd5183SScott Kruger    parser.add_option('-d', '--directory', dest='directory',
478ccd5183SScott Kruger                      help='Directory containing results of petsc test system',
488ccd5183SScott Kruger                      default='counts')
498ccd5183SScott Kruger    options, args = parser.parse_args()
508ccd5183SScott Kruger
518ccd5183SScott Kruger    # Process arguments
528ccd5183SScott Kruger    if len(args) > 0:
538ccd5183SScott Kruger      parser.print_usage()
548ccd5183SScott Kruger      return
558ccd5183SScott Kruger
568ccd5183SScott Kruger    directory=options.directory
578ccd5183SScott Kruger    if not os.path.isdir(directory):
588ccd5183SScott Kruger      print directory+' is not a directory'
598ccd5183SScott Kruger      return
608ccd5183SScott Kruger
618ccd5183SScott Kruger    summarize_results(directory)
628ccd5183SScott Kruger
638ccd5183SScott Krugerif __name__ == "__main__":
648ccd5183SScott Kruger        main()
65