[llvm] 5c24411 - [lit] Avoid re-iterating result codes in different places
Michael Kruse via llvm-commits
llvm-commits at lists.llvm.org
Wed Jun 17 13:25:16 PDT 2020
If you make breaking changes could you please also ensure that it
continues to work with all LLVM subprojects (in this case:
llvm-test-suite).
Since there is a PyPi package for lit (https://pypi.org/project/lit/),
breaking changes may have an effect to non-LLVM projects as well, but
I don't know much compatibility guarantees we make.
Michael
Am Mi., 17. Juni 2020 um 13:41 Uhr schrieb Julian Lettner via
llvm-commits <llvm-commits at lists.llvm.org>:
>
>
> Author: Julian Lettner
> Date: 2020-06-17T11:40:19-07:00
> New Revision: 5c244115c98acf61a5d5b867c590a34a6be6f5b9
>
> URL: https://github.com/llvm/llvm-project/commit/5c244115c98acf61a5d5b867c590a34a6be6f5b9
> DIFF: https://github.com/llvm/llvm-project/commit/5c244115c98acf61a5d5b867c590a34a6be6f5b9.diff
>
> LOG: [lit] Avoid re-iterating result codes in different places
>
> Let's have one canonical place to define ResultCode instances and their
> labels.
>
> Also make ResultCode's `__init__` function self-registering to better
> support custom ResultCodes.
>
> Added:
>
>
> Modified:
> llvm/utils/lit/lit/Test.py
> llvm/utils/lit/lit/main.py
> llvm/utils/lit/tests/Inputs/custom-result-category/format.py
>
> Removed:
>
>
>
> ################################################################################
> diff --git a/llvm/utils/lit/lit/Test.py b/llvm/utils/lit/lit/Test.py
> index 4c94e9806a16..a38ea4e7717a 100644
> --- a/llvm/utils/lit/lit/Test.py
> +++ b/llvm/utils/lit/lit/Test.py
> @@ -1,6 +1,5 @@
> import itertools
> import os
> -from xml.sax.saxutils import quoteattr
> from json import JSONEncoder
>
> from lit.BooleanExpression import BooleanExpression
> @@ -10,35 +9,50 @@
> class ResultCode(object):
> """Test result codes."""
>
> + # All result codes (including user-defined ones) in declaration order
> + _all_codes = []
> +
> + @staticmethod
> + def all_codes():
> + return ResultCode._all_codes
> +
> # We override __new__ and __getnewargs__ to ensure that pickling still
> # provides unique ResultCode objects in any particular instance.
> _instances = {}
> - def __new__(cls, name, isFailure):
> +
> + def __new__(cls, name, label, isFailure):
> res = cls._instances.get(name)
> if res is None:
> cls._instances[name] = res = super(ResultCode, cls).__new__(cls)
> return res
> +
> def __getnewargs__(self):
> - return (self.name, self.isFailure)
> + return (self.name, self.label, self.isFailure)
>
> - def __init__(self, name, isFailure):
> + def __init__(self, name, label, isFailure):
> self.name = name
> + self.label = label
> self.isFailure = isFailure
> + ResultCode._all_codes.append(self)
>
> def __repr__(self):
> return '%s%r' % (self.__class__.__name__,
> (self.name, self.isFailure))
>
> -PASS = ResultCode('PASS', False)
> -FLAKYPASS = ResultCode('FLAKYPASS', False)
> -XFAIL = ResultCode('XFAIL', False)
> -FAIL = ResultCode('FAIL', True)
> -XPASS = ResultCode('XPASS', True)
> -UNRESOLVED = ResultCode('UNRESOLVED', True)
> -UNSUPPORTED = ResultCode('UNSUPPORTED', False)
> -TIMEOUT = ResultCode('TIMEOUT', True)
> -SKIPPED = ResultCode('SKIPPED', False)
> -EXCLUDED = ResultCode('EXCLUDED', False)
> +
> +# Successes
> +EXCLUDED = ResultCode('EXCLUDED', 'Excluded', False)
> +SKIPPED = ResultCode('SKIPPED', 'Skipped', False)
> +UNSUPPORTED = ResultCode('UNSUPPORTED', 'Unsupported', False)
> +PASS = ResultCode('PASS', 'Passed', False)
> +FLAKYPASS = ResultCode('FLAKYPASS', 'Passed With Retry', False)
> +XFAIL = ResultCode('XFAIL', 'Expectedly Failed', False)
> +# Failures
> +UNRESOLVED = ResultCode('UNRESOLVED', 'Unresolved', True)
> +TIMEOUT = ResultCode('TIMEOUT', 'Timed Out', True)
> +FAIL = ResultCode('FAIL', 'Failed', True)
> +XPASS = ResultCode('XPASS', 'Unexpectedly Passed', True)
> +
>
> # Test metric values.
>
>
> diff --git a/llvm/utils/lit/lit/main.py b/llvm/utils/lit/lit/main.py
> index e1a6f2260965..860c584fbdf4 100755
> --- a/llvm/utils/lit/lit/main.py
> +++ b/llvm/utils/lit/lit/main.py
> @@ -259,46 +259,24 @@ def print_histogram(tests):
> lit.util.printHistogram(test_times, title='Tests')
>
>
> -def add_result_category(result_code, label):
> - assert isinstance(result_code, lit.Test.ResultCode)
> - category = (result_code, label)
> - result_codes.append(category)
> -
> -
> -result_codes = [
> - # Passes
> - (lit.Test.EXCLUDED, 'Excluded'),
> - (lit.Test.SKIPPED, 'Skipped'),
> - (lit.Test.UNSUPPORTED, 'Unsupported'),
> - (lit.Test.PASS, 'Passed'),
> - (lit.Test.FLAKYPASS, 'Passed With Retry'),
> - (lit.Test.XFAIL, 'Expectedly Failed'),
> - # Failures
> - (lit.Test.UNRESOLVED, 'Unresolved'),
> - (lit.Test.TIMEOUT, 'Timed Out'),
> - (lit.Test.FAIL, 'Failed'),
> - (lit.Test.XPASS, 'Unexpectedly Passed')
> -]
> -
> -
> def print_results(tests, elapsed, opts):
> - tests_by_code = {code: [] for code, _ in result_codes}
> + tests_by_code = {code: [] for code in lit.Test.ResultCode.all_codes()}
> for test in tests:
> tests_by_code[test.result.code].append(test)
>
> - for (code, label) in result_codes:
> - print_group(code, label, tests_by_code[code], opts.show_results)
> + for code in lit.Test.ResultCode.all_codes():
> + print_group(tests_by_code[code], code, opts.show_results)
>
> print_summary(tests_by_code, opts.quiet, elapsed)
>
>
> -def print_group(code, label, tests, show_results):
> +def print_group(tests, code, show_results):
> if not tests:
> return
> if not code.isFailure and code not in show_results:
> return
> print('*' * 20)
> - print('%s Tests (%d):' % (label, len(tests)))
> + print('{} Tests ({}):'.format(code.label, len(tests)))
> for test in tests:
> print(' %s' % test.getFullName())
> sys.stdout.write('\n')
> @@ -308,8 +286,9 @@ def print_summary(tests_by_code, quiet, elapsed):
> if not quiet:
> print('\nTesting Time: %.2fs' % elapsed)
>
> - codes = [c for c in result_codes if not quiet or c.isFailure]
> - groups = [(label, len(tests_by_code[code])) for code, label in codes]
> + codes = [c for c in lit.Test.ResultCode.all_codes()
> + if not quiet or c.isFailure]
> + groups = [(c.label, len(tests_by_code[c])) for c in codes]
> groups = [(label, count) for label, count in groups if count]
> if not groups:
> return
>
> diff --git a/llvm/utils/lit/tests/Inputs/custom-result-category/format.py b/llvm/utils/lit/tests/Inputs/custom-result-category/format.py
> index b0c97ec71bb9..0ef1bf24f833 100644
> --- a/llvm/utils/lit/tests/Inputs/custom-result-category/format.py
> +++ b/llvm/utils/lit/tests/Inputs/custom-result-category/format.py
> @@ -1,11 +1,8 @@
> import lit
> import lit.formats
>
> -CUSTOM_PASS = lit.Test.ResultCode('CUSTOM_PASS', False)
> -CUSTOM_FAILURE = lit.Test.ResultCode('CUSTOM_FAILURE', True)
> -
> -lit.main.add_result_category(CUSTOM_PASS, "My Passed")
> -lit.main.add_result_category(CUSTOM_FAILURE, "My Failed")
> +CUSTOM_PASS = lit.Test.ResultCode('CUSTOM_PASS', 'My Passed', False)
> +CUSTOM_FAILURE = lit.Test.ResultCode('CUSTOM_FAILURE', 'My Failed', True)
>
>
> class MyFormat(lit.formats.ShTest):
>
>
>
> _______________________________________________
> llvm-commits mailing list
> llvm-commits at lists.llvm.org
> https://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-commits
More information about the llvm-commits
mailing list