138 lines
5.1 KiB
Python
138 lines
5.1 KiB
Python
#!/usr/bin/env python3
|
|
#
|
|
# Copyright (c) 2014-2019, Intel Corporation
|
|
# All rights reserved.
|
|
#
|
|
# Redistribution and use in source and binary forms, with or without
|
|
# modification, are permitted provided that the following conditions are
|
|
# met:
|
|
#
|
|
# * Redistributions of source code must retain the above copyright
|
|
# notice, this list of conditions and the following disclaimer.
|
|
#
|
|
# * Redistributions in binary form must reproduce the above copyright
|
|
# notice, this list of conditions and the following disclaimer in the
|
|
# documentation and/or other materials provided with the distribution.
|
|
#
|
|
# * Neither the name of Intel Corporation nor the names of its
|
|
# contributors may be used to endorse or promote products derived from
|
|
# this software without specific prior written permission.
|
|
#
|
|
#
|
|
# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS
|
|
# IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
|
|
# TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A
|
|
# PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER
|
|
# OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
|
|
# EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
|
|
# PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
|
|
# PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
|
|
# LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
|
|
# NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
|
|
# SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
|
|
|
# // Authors: Anton Mitrokhin
|
|
|
|
from optparse import OptionParser
|
|
from common import *
|
|
import pickle, re
|
|
|
|
|
|
|
|
def read_test_table(filename):
|
|
with open(filename, 'r') as fp:
|
|
tt = pickle.load(fp)
|
|
return tt
|
|
|
|
|
|
def print_with_specific_results(tests, runfailed, compfailed):
|
|
for test in tests:
|
|
for test_case in test.test_cases:
|
|
if test_case.result == TestResult(runfailed, compfailed):
|
|
print(test.name.rjust(40) + repr(test_case).rjust(50))
|
|
|
|
|
|
|
|
def check_rev_in_tt(tt, rev, tt_location):
|
|
if not rev in list(tt.table.keys()):
|
|
print("Unable to locate", rev, "in table", tt_location)
|
|
print("Available LLVM revisions:", list(tt.table.keys()))
|
|
exit(0)
|
|
|
|
|
|
if __name__ == '__main__':
|
|
# parsing options
|
|
class MyParser(OptionParser):
|
|
def format_epilog(self, formatter):
|
|
return self.epilog
|
|
|
|
examples = ("Examples:\n" +
|
|
"Load test_table object\n\tregression_read.py -l 'test_table.dump'\n" +
|
|
"Show runfailed, compfailed and succeed tests in rev '213493'\n\t" +
|
|
"regression_read.py -l 'test_table.dump' -r '213493' --succeed --runfailed --compfailed\n" +
|
|
"Show regression between two revisions\n\t" +
|
|
"regression_read.py -l 'test_table.dump' -R '210929 213493'\n")
|
|
|
|
parser = MyParser(usage="Usage: regression_read.py -l [options]", epilog=examples)
|
|
parser.add_option('-l', '--load-tt', dest='load_tt',
|
|
help='load TestTable() from file', default=None)
|
|
parser.add_option('-r', '--revision', dest='revision',
|
|
help='show only specified revision', default=None)
|
|
parser.add_option('--runfailed', dest='runfailed',
|
|
help='show runfailed tests', default=False, action='store_true')
|
|
parser.add_option('--compfailed', dest='compfailed',
|
|
help='show compfailed tests', default=False, action='store_true')
|
|
parser.add_option('--succeed', dest='succeed',
|
|
help='show succeed tests', default=False, action='store_true')
|
|
parser.add_option('-R', '--regression', dest='regression',
|
|
help='show regression between two specified revisions', default="")
|
|
|
|
(options, args) = parser.parse_args()
|
|
if (options.load_tt == None):
|
|
parser.print_help()
|
|
exit(0)
|
|
|
|
tt = read_test_table(options.load_tt)
|
|
print("Available LLVM revisions:", list(tt.table.keys()))
|
|
|
|
if options.revision != None:
|
|
check_rev_in_tt(tt, options.revision, options.load_tt)
|
|
revisions = [options.revision]
|
|
else:
|
|
revisions = list(tt.table.keys())
|
|
|
|
|
|
# print test cases
|
|
if (options.succeed):
|
|
print("\n\n Succeed:")
|
|
for rev in revisions:
|
|
print("Revision %s" % (rev))
|
|
print_with_specific_results(tt.table[rev], 0, 0)
|
|
|
|
if (options.runfailed):
|
|
print("\n\n Runfailed:")
|
|
for rev in revisions:
|
|
print("Revision %s" % (rev))
|
|
print_with_specific_results(tt.table[rev], 1, 0)
|
|
|
|
if (options.compfailed):
|
|
print("\n\n Compfailed:")
|
|
for rev in revisions:
|
|
print("Revision %s" % (rev))
|
|
print_with_specific_results(tt.table[rev], 0, 1)
|
|
|
|
|
|
# print regression
|
|
if options.regression != "":
|
|
regr_revs = re.split('\ ', options.regression)
|
|
if len(regr_revs) != 2:
|
|
print("Invalid input:", regr_revs)
|
|
exit(0)
|
|
|
|
check_rev_in_tt(tt, regr_revs[0], options.load_tt)
|
|
check_rev_in_tt(tt, regr_revs[1], options.load_tt)
|
|
|
|
print(tt.regression(regr_revs[0], regr_revs[1]))
|
|
|
|
|