| # ===--- gyb_benchmark_support.py --------------------*- coding: utf-8 -*-===// |
| # |
| # This source file is part of the Swift.org open source project |
| # |
| # Copyright (c) 2014 - 2017 Apple Inc. and the Swift project authors |
| # Licensed under Apache License v2.0 with Runtime Library Exception |
| # |
| # See https://swift.org/LICENSE.txt for license information |
| # See https://swift.org/CONTRIBUTORS.txt for the list of Swift project authors |
| |
| import os |
| import re |
| |
| |
| script_dir = os.path.dirname(os.path.realpath(__file__)) |
| perf_dir = os.path.realpath(os.path.join(script_dir, '../benchmark')) |
| single_source_dir = os.path.join(perf_dir, 'single-source') |
| multi_source_dir = os.path.join(perf_dir, 'multi-source') |
| |
| |
| def all_files(directory, extension): # matching: [directory]/**/*[extension] |
| return [ |
| os.path.join(root, f) |
| for root, _, files in os.walk(directory) |
| for f in files if f.endswith(extension) |
| ] |
| |
| |
| # CMakeList single-source |
| test_files = all_files(single_source_dir, '.swift') |
| tests = sorted(os.path.basename(x).split('.')[0] for x in test_files) |
| |
| |
| # CMakeList multi-source |
| class MultiSourceBench(object): |
| def __init__(self, path): |
| self.name = os.path.basename(path) |
| self.files = [x for x in os.listdir(path) |
| if x.endswith('.swift')] |
| |
| |
| multisource_benches = [ |
| MultiSourceBench(os.path.join(multi_source_dir, x)) |
| for x in os.listdir(multi_source_dir) |
| if os.path.isdir(os.path.join(multi_source_dir, x)) |
| ] if os.path.isdir(multi_source_dir) else [] |
| |
| |
| def get_run_funcs(filepath): |
| content = open(filepath).read() |
| return re.findall(r'func run_(.*?)\(', content) |
| |
| |
| def find_run_funcs(): |
| swift_files = all_files(single_source_dir, '.swift') |
| swift_files += all_files(multi_source_dir, '.swift') |
| return sorted([func for f in swift_files for func in get_run_funcs(f)]) |
| |
| |
| all_run_funcs = find_run_funcs() |