Merge pull request #9193 from palimondo/SR-4572

[benchmark] SR-4572 Remove jinja2 dependency from test harness generation
diff --git a/benchmark/CMakeLists.txt b/benchmark/CMakeLists.txt
index 4054fac..8300cc0 100644
--- a/benchmark/CMakeLists.txt
+++ b/benchmark/CMakeLists.txt
@@ -1,8 +1,7 @@
 # -*- mode: cmake -*-
 ################################################################################
 # WARNING: This file is automatically generated from templates and should not
-# be directly modified. Instead, make changes to
-# scripts/generate_harness/CMakeLists.txt_template and run
+# be directly modified. Instead, make changes to CMakeLists.text.gyb and run
 # scripts/generate_harness/generate_harness.py to regenerate this file.
 ################################################################################
 
diff --git a/benchmark/CMakeLists.txt.gyb b/benchmark/CMakeLists.txt.gyb
new file mode 100644
index 0000000..0e55a53
--- /dev/null
+++ b/benchmark/CMakeLists.txt.gyb
@@ -0,0 +1,186 @@
+# -*- mode: cmake -*-
+% # Ignore the following warning. This _is_ the correct file to edit.
+################################################################################
+# WARNING: This file is automatically generated from templates and should not
+# be directly modified. Instead, make changes to CMakeLists.text.gyb and run
+# scripts/generate_harness/generate_harness.py to regenerate this file.
+################################################################################
+%{
+from gyb_benchmark_support import (
+  tests,
+  multisource_benches
+)
+}%
+
+cmake_minimum_required(VERSION 2.8.12)
+
+# Add path for custom CMake modules.
+list(APPEND CMAKE_MODULE_PATH
+    "$${CMAKE_CURRENT_SOURCE_DIR}/cmake/modules")
+
+include(AddSwiftBenchmarkSuite)
+
+set(SWIFT_BENCH_MODULES
+% for test in tests:
+    single-source/${test}
+% end
+)
+
+set(SWIFT_MULTISOURCE_BENCHES
+% for multisource_bench in multisource_benches:
+    multi-source/${multisource_bench.name}
+% end
+)
+
+% for multisource_bench in multisource_benches:
+set(${multisource_bench.name}_sources
+%   for file in multisource_bench.files:
+    multi-source/${multisource_bench.name}/${file}
+%   end
+)
+
+% end
+
+set(BENCH_DRIVER_LIBRARY_MODULES
+    utils/DriverUtils
+    utils/TestsUtils
+)
+
+set(BENCH_DRIVER_LIBRARY_FLAGS)
+if (SWIFT_RUNTIME_ENABLE_LEAK_CHECKER)
+  set(BENCH_DRIVER_LIBRARY_FLAGS -DSWIFT_RUNTIME_ENABLE_LEAK_CHECKER)
+endif()
+
+set(BENCH_LIBRARY_MODULES
+)
+
+add_definitions(-DSWIFT_EXEC -DSWIFT_LIBRARY_PATH -DONLY_PLATFORMS
+                -DSWIFT_OPTIMIZATION_LEVELS -DSWIFT_BENCHMARK_EMIT_SIB)
+
+if(NOT ONLY_PLATFORMS)
+  set(ONLY_PLATFORMS "macosx" "iphoneos" "appletvos" "watchos")
+endif()
+
+if(NOT SWIFT_EXEC)
+  runcmd(COMMAND "xcrun" "-f" "swiftc"
+         VARIABLE SWIFT_EXEC
+         ERROR "Unable to find Swift driver")
+endif()
+
+if(NOT SWIFT_LIBRARY_PATH)
+  get_filename_component(tmp_dir "$${SWIFT_EXEC}" DIRECTORY)
+  get_filename_component(tmp_dir "$${tmp_dir}" DIRECTORY)
+  set(SWIFT_LIBRARY_PATH "$${tmp_dir}/lib/swift")
+endif()
+
+# If the CMAKE_C_COMPILER is already clang, don't find it again,
+# thus allowing the --host-cc build-script argument to work here.
+get_filename_component(c_compiler $${CMAKE_C_COMPILER} NAME)
+
+if($${c_compiler} STREQUAL "clang")
+  set(CLANG_EXEC $${CMAKE_C_COMPILER})
+else()
+  runcmd(COMMAND "xcrun" "-toolchain" "$${SWIFT_DARWIN_XCRUN_TOOLCHAIN}" "-f" "clang"
+         VARIABLE CLANG_EXEC
+         ERROR "Unable to find Clang driver")
+endif()
+
+
+# You have to delete CMakeCache.txt in the swift build to force a
+# reconfiguration.
+set(SWIFT_EXTRA_BENCH_CONFIGS CACHE STRING
+    "A semicolon separated list of benchmark configurations. \
+Available configurations: <Optlevel>_SINGLEFILE, <Optlevel>_MULTITHREADED")
+
+# Syntax for an optset:  <optimization-level>_<configuration>
+#    where "_<configuration>" is optional.
+if(NOT SWIFT_OPTIMIZATION_LEVELS)
+  set(SWIFT_OPTIMIZATION_LEVELS "Onone" "O" "Ounchecked"
+                                $${SWIFT_EXTRA_BENCH_CONFIGS})
+endif()
+
+set(SWIFT_BENCHMARK_NUM_O_ITERATIONS "" CACHE STRING
+    "Number of iterations to perform when running -O benchmarks via cmake")
+set(SWIFT_BENCHMARK_NUM_ONONE_ITERATIONS "" CACHE STRING
+    "Number of iterations to perform when running -Onone benchmarks via cmake")
+
+# Options for the default (= empty) configuration
+set(BENCHOPTS "-whole-module-optimization")
+
+# Options for other configurations
+set(BENCHOPTS_MULTITHREADED
+    "-whole-module-optimization" "-num-threads" "4")
+set(BENCHOPTS_SINGLEFILE "")
+
+set(macosx_arch "x86_64")
+set(iphoneos_arch "arm64" "armv7")
+set(appletvos_arch "arm64")
+set(watchos_arch "armv7k")
+
+set(macosx_ver "10.9")
+set(iphoneos_ver "8.0")
+set(appletvos_ver "9.1")
+set(watchos_ver "2.0")
+
+set(macosx_triple_platform "macosx")
+set(iphoneos_triple_platform "ios")
+set(appletvos_triple_platform "tvos")
+set(watchos_triple_platform "watchos")
+
+set(sdks)
+set(platforms)
+foreach(platform $${ONLY_PLATFORMS})
+  execute_process(
+      COMMAND "xcrun" "--sdk" "$${platform}" "--show-sdk-path"
+      OUTPUT_VARIABLE $${platform}_sdk
+      RESULT_VARIABLE result
+      ERROR_QUIET OUTPUT_STRIP_TRAILING_WHITESPACE)
+  if("$${result}" MATCHES "0")
+    list(APPEND sdks "$${$${platform}_sdk}")
+    list(APPEND platforms $${platform})
+  endif()
+endforeach()
+
+message("--")
+message("-- Swift Benchmark Suite:")
+message("--   SWIFT_EXEC = $${SWIFT_EXEC}")
+message("--   SWIFT_LIBRARY_PATH = $${SWIFT_LIBRARY_PATH}")
+message("--   CLANG_EXEC = $${CLANG_EXEC}")
+message("--   SWIFT_OPTIMIZATION_LEVELS = $${SWIFT_OPTIMIZATION_LEVELS}")
+message("--   ONLY_PLATFORMS = $${ONLY_PLATFORMS}")
+
+message("--   found platforms: $${platforms}")
+message("--   found sdks:")
+foreach(sdk $${sdks})
+  message("--     $${sdk}")
+endforeach()
+
+set(executable_targets)
+
+if(SWIFT_SDKS)
+  set(IS_SWIFT_BUILD true)
+endif()
+
+set(srcdir "$${CMAKE_CURRENT_SOURCE_DIR}")
+
+if(IS_SWIFT_BUILD)
+  get_filename_component(swift-bin-dir "$${SWIFT_EXEC}" DIRECTORY)
+else()
+  set(swift-bin-dir "$${CMAKE_BINARY_DIR}/bin")
+endif()
+
+set(benchmark-bin-dir "$${CMAKE_CURRENT_BINARY_DIR}/bin")
+set(benchmark-lib-dir "$${CMAKE_CURRENT_BINARY_DIR}/lib")
+set(benchmark-lib-swift-dir "$${CMAKE_CURRENT_BINARY_DIR}/lib/swift")
+
+file(MAKE_DIRECTORY "$${swift-bin-dir}")
+file(MAKE_DIRECTORY "$${benchmark-bin-dir}")
+file(MAKE_DIRECTORY "$${benchmark-lib-dir}")
+file(MAKE_DIRECTORY "$${benchmark-lib-swift-dir}")
+
+# Compile the perf test suite for each platform
+foreach(platform $${platforms})
+  swift_benchmark_compile(PLATFORM $${platform})
+endforeach()
+
+add_subdirectory(scripts)
diff --git a/benchmark/scripts/generate_harness/CMakeLists.txt_template b/benchmark/scripts/generate_harness/CMakeLists.txt_template
deleted file mode 100644
index d4f0abb..0000000
--- a/benchmark/scripts/generate_harness/CMakeLists.txt_template
+++ /dev/null
@@ -1,181 +0,0 @@
-# -*- mode: cmake -*-
-################################################################################
-# WARNING: This file is automatically generated from templates and should not
-# be directly modified. Instead, make changes to
-# scripts/generate_harness/CMakeLists.txt_template and run
-# scripts/generate_harness/generate_harness.py to regenerate this file.
-################################################################################
-
-cmake_minimum_required(VERSION 2.8.12)
-
-# Add path for custom CMake modules.
-list(APPEND CMAKE_MODULE_PATH
-    "${CMAKE_CURRENT_SOURCE_DIR}/cmake/modules")
-
-include(AddSwiftBenchmarkSuite)
-
-set(SWIFT_BENCH_MODULES
-{% for test in tests %}
-    single-source/{{ test }}
-{% endfor %}
-)
-
-set(SWIFT_MULTISOURCE_BENCHES
-{% for multisource_bench in multisource_benches %}
-    multi-source/{{ multisource_bench.name }}
-{% endfor %}
-)
-
-{% for multisource_bench in multisource_benches %}
-set({{ multisource_bench.name }}_sources
-    {% for file in multisource_bench.files %}
-    multi-source/{{ multisource_bench.name }}/{{ file }}
-    {% endfor %}
-)
-
-{% endfor %}
-
-set(BENCH_DRIVER_LIBRARY_MODULES
-    utils/DriverUtils
-    utils/TestsUtils
-)
-
-set(BENCH_DRIVER_LIBRARY_FLAGS)
-if (SWIFT_RUNTIME_ENABLE_LEAK_CHECKER)
-  set(BENCH_DRIVER_LIBRARY_FLAGS -DSWIFT_RUNTIME_ENABLE_LEAK_CHECKER)
-endif()
-
-set(BENCH_LIBRARY_MODULES
-)
-
-add_definitions(-DSWIFT_EXEC -DSWIFT_LIBRARY_PATH -DONLY_PLATFORMS
-                -DSWIFT_OPTIMIZATION_LEVELS -DSWIFT_BENCHMARK_EMIT_SIB)
-
-if(NOT ONLY_PLATFORMS)
-  set(ONLY_PLATFORMS "macosx" "iphoneos" "appletvos" "watchos")
-endif()
-
-if(NOT SWIFT_EXEC)
-  runcmd(COMMAND "xcrun" "-f" "swiftc"
-         VARIABLE SWIFT_EXEC
-         ERROR "Unable to find Swift driver")
-endif()
-
-if(NOT SWIFT_LIBRARY_PATH)
-  get_filename_component(tmp_dir "${SWIFT_EXEC}" DIRECTORY)
-  get_filename_component(tmp_dir "${tmp_dir}" DIRECTORY)
-  set(SWIFT_LIBRARY_PATH "${tmp_dir}/lib/swift")
-endif()
-
-# If the CMAKE_C_COMPILER is already clang, don't find it again,
-# thus allowing the --host-cc build-script argument to work here.
-get_filename_component(c_compiler ${CMAKE_C_COMPILER} NAME)
-
-if(${c_compiler} STREQUAL "clang")
-  set(CLANG_EXEC ${CMAKE_C_COMPILER})
-else()
-  runcmd(COMMAND "xcrun" "-toolchain" "${SWIFT_DARWIN_XCRUN_TOOLCHAIN}" "-f" "clang"
-         VARIABLE CLANG_EXEC
-         ERROR "Unable to find Clang driver")
-endif()
-
-
-# You have to delete CMakeCache.txt in the swift build to force a
-# reconfiguration.
-set(SWIFT_EXTRA_BENCH_CONFIGS CACHE STRING
-    "A semicolon separated list of benchmark configurations. \
-Available configurations: <Optlevel>_SINGLEFILE, <Optlevel>_MULTITHREADED")
-
-# Syntax for an optset:  <optimization-level>_<configuration>
-#    where "_<configuration>" is optional.
-if(NOT SWIFT_OPTIMIZATION_LEVELS)
-  set(SWIFT_OPTIMIZATION_LEVELS "Onone" "O" "Ounchecked"
-                                ${SWIFT_EXTRA_BENCH_CONFIGS})
-endif()
-
-set(SWIFT_BENCHMARK_NUM_O_ITERATIONS "" CACHE STRING
-    "Number of iterations to perform when running -O benchmarks via cmake")
-set(SWIFT_BENCHMARK_NUM_ONONE_ITERATIONS "" CACHE STRING
-    "Number of iterations to perform when running -Onone benchmarks via cmake")
-
-# Options for the default (= empty) configuration
-set(BENCHOPTS "-whole-module-optimization")
-
-# Options for other configurations
-set(BENCHOPTS_MULTITHREADED
-    "-whole-module-optimization" "-num-threads" "4")
-set(BENCHOPTS_SINGLEFILE "")
-
-set(macosx_arch "x86_64")
-set(iphoneos_arch "arm64" "armv7")
-set(appletvos_arch "arm64")
-set(watchos_arch "armv7k")
-
-set(macosx_ver "10.9")
-set(iphoneos_ver "8.0")
-set(appletvos_ver "9.1")
-set(watchos_ver "2.0")
-
-set(macosx_triple_platform "macosx")
-set(iphoneos_triple_platform "ios")
-set(appletvos_triple_platform "tvos")
-set(watchos_triple_platform "watchos")
-
-set(sdks)
-set(platforms)
-foreach(platform ${ONLY_PLATFORMS})
-  execute_process(
-      COMMAND "xcrun" "--sdk" "${platform}" "--show-sdk-path"
-      OUTPUT_VARIABLE ${platform}_sdk
-      RESULT_VARIABLE result
-      ERROR_QUIET OUTPUT_STRIP_TRAILING_WHITESPACE)
-  if("${result}" MATCHES "0")
-    list(APPEND sdks "${${platform}_sdk}")
-    list(APPEND platforms ${platform})
-  endif()
-endforeach()
-
-message("--")
-message("-- Swift Benchmark Suite:")
-message("--   SWIFT_EXEC = ${SWIFT_EXEC}")
-message("--   SWIFT_LIBRARY_PATH = ${SWIFT_LIBRARY_PATH}")
-message("--   CLANG_EXEC = ${CLANG_EXEC}")
-message("--   SWIFT_OPTIMIZATION_LEVELS = ${SWIFT_OPTIMIZATION_LEVELS}")
-message("--   ONLY_PLATFORMS = ${ONLY_PLATFORMS}")
-
-message("--   found platforms: ${platforms}")
-message("--   found sdks:")
-foreach(sdk ${sdks})
-  message("--     ${sdk}")
-endforeach()
-
-set(executable_targets)
-
-if(SWIFT_SDKS)
-  set(IS_SWIFT_BUILD true)
-endif()
-
-set(srcdir "${CMAKE_CURRENT_SOURCE_DIR}")
-
-if(IS_SWIFT_BUILD)
-  get_filename_component(swift-bin-dir "${SWIFT_EXEC}" DIRECTORY)
-else()
-  set(swift-bin-dir "${CMAKE_BINARY_DIR}/bin")
-endif()
-
-set(benchmark-bin-dir "${CMAKE_CURRENT_BINARY_DIR}/bin")
-set(benchmark-lib-dir "${CMAKE_CURRENT_BINARY_DIR}/lib")
-set(benchmark-lib-swift-dir "${CMAKE_CURRENT_BINARY_DIR}/lib/swift")
-
-file(MAKE_DIRECTORY "${swift-bin-dir}")
-file(MAKE_DIRECTORY "${benchmark-bin-dir}")
-file(MAKE_DIRECTORY "${benchmark-lib-dir}")
-file(MAKE_DIRECTORY "${benchmark-lib-swift-dir}")
-
-# Compile the perf test suite for each platform
-foreach(platform ${platforms})
-  swift_benchmark_compile(PLATFORM ${platform})
-endforeach()
-
-add_subdirectory(scripts)
-
diff --git a/benchmark/scripts/generate_harness/generate_harness.py b/benchmark/scripts/generate_harness/generate_harness.py
index 3809325..6e4bc0f 100755
--- a/benchmark/scripts/generate_harness/generate_harness.py
+++ b/benchmark/scripts/generate_harness/generate_harness.py
@@ -18,16 +18,11 @@
 
 import argparse
 import os
-import re
 import subprocess
 
-import jinja2
-
 script_dir = os.path.dirname(os.path.realpath(__file__))
 perf_dir = os.path.realpath(os.path.join(script_dir, '../..'))
 gyb = os.path.realpath(os.path.join(perf_dir, '../utils/gyb'))
-single_source_dir = os.path.join(perf_dir, 'single-source')
-multi_source_dir = os.path.join(perf_dir, 'multi-source')
 parser = argparse.ArgumentParser()
 parser.add_argument("--output-dir",
                     help="Output directory (for validation test)",
@@ -35,137 +30,6 @@
 args = parser.parse_args()
 output_dir = args.output_dir
 
-template_map = {
-    'CMakeLists.txt_template': os.path.join(output_dir, 'CMakeLists.txt'),
-    'main.swift_template': os.path.join(output_dir, 'utils/main.swift')
-}
-
-# The test suites. Currently, "other" and "string"
-other_tests = [
-    "Ackermann",
-    "Fibonacci",
-    "ExistentialTestArrayConditionalShift_ClassValueBuffer1",
-    "ExistentialTestArrayConditionalShift_ClassValueBuffer2",
-    "ExistentialTestArrayConditionalShift_ClassValueBuffer3",
-    "ExistentialTestArrayConditionalShift_ClassValueBuffer4",
-    "ExistentialTestArrayConditionalShift_IntValueBuffer0",
-    "ExistentialTestArrayConditionalShift_IntValueBuffer1",
-    "ExistentialTestArrayConditionalShift_IntValueBuffer2",
-    "ExistentialTestArrayConditionalShift_IntValueBuffer3",
-    "ExistentialTestArrayConditionalShift_IntValueBuffer4",
-    "ExistentialTestArrayMutating_ClassValueBuffer1",
-    "ExistentialTestArrayMutating_ClassValueBuffer2",
-    "ExistentialTestArrayMutating_ClassValueBuffer3",
-    "ExistentialTestArrayMutating_ClassValueBuffer4",
-    "ExistentialTestArrayMutating_IntValueBuffer0",
-    "ExistentialTestArrayMutating_IntValueBuffer1",
-    "ExistentialTestArrayMutating_IntValueBuffer2",
-    "ExistentialTestArrayMutating_IntValueBuffer3",
-    "ExistentialTestArrayMutating_IntValueBuffer4",
-    "ExistentialTestArrayOneMethodCall_ClassValueBuffer1",
-    "ExistentialTestArrayOneMethodCall_ClassValueBuffer2",
-    "ExistentialTestArrayOneMethodCall_ClassValueBuffer3",
-    "ExistentialTestArrayOneMethodCall_ClassValueBuffer4",
-    "ExistentialTestArrayOneMethodCall_IntValueBuffer0",
-    "ExistentialTestArrayOneMethodCall_IntValueBuffer1",
-    "ExistentialTestArrayOneMethodCall_IntValueBuffer2",
-    "ExistentialTestArrayOneMethodCall_IntValueBuffer3",
-    "ExistentialTestArrayOneMethodCall_IntValueBuffer4",
-    "ExistentialTestArrayShift_ClassValueBuffer1",
-    "ExistentialTestArrayShift_ClassValueBuffer2",
-    "ExistentialTestArrayShift_ClassValueBuffer3",
-    "ExistentialTestArrayShift_ClassValueBuffer4",
-    "ExistentialTestArrayShift_IntValueBuffer0",
-    "ExistentialTestArrayShift_IntValueBuffer1",
-    "ExistentialTestArrayShift_IntValueBuffer2",
-    "ExistentialTestArrayShift_IntValueBuffer3",
-    "ExistentialTestArrayShift_IntValueBuffer4",
-    "ExistentialTestArrayTwoMethodCalls_ClassValueBuffer1",
-    "ExistentialTestArrayTwoMethodCalls_ClassValueBuffer2",
-    "ExistentialTestArrayTwoMethodCalls_ClassValueBuffer3",
-    "ExistentialTestArrayTwoMethodCalls_ClassValueBuffer4",
-    "ExistentialTestArrayTwoMethodCalls_IntValueBuffer0",
-    "ExistentialTestArrayTwoMethodCalls_IntValueBuffer1",
-    "ExistentialTestArrayTwoMethodCalls_IntValueBuffer2",
-    "ExistentialTestArrayTwoMethodCalls_IntValueBuffer3",
-    "ExistentialTestArrayTwoMethodCalls_IntValueBuffer4",
-    "ExistentialTestMutatingAndNonMutating_ClassValueBuffer1",
-    "ExistentialTestMutatingAndNonMutating_ClassValueBuffer2",
-    "ExistentialTestMutatingAndNonMutating_ClassValueBuffer3",
-    "ExistentialTestMutatingAndNonMutating_ClassValueBuffer4",
-    "ExistentialTestMutatingAndNonMutating_IntValueBuffer0",
-    "ExistentialTestMutatingAndNonMutating_IntValueBuffer1",
-    "ExistentialTestMutatingAndNonMutating_IntValueBuffer2",
-    "ExistentialTestMutatingAndNonMutating_IntValueBuffer3",
-    "ExistentialTestMutatingAndNonMutating_IntValueBuffer4",
-    "ExistentialTestMutating_ClassValueBuffer1",
-    "ExistentialTestMutating_ClassValueBuffer2",
-    "ExistentialTestMutating_ClassValueBuffer3",
-    "ExistentialTestMutating_ClassValueBuffer4",
-    "ExistentialTestMutating_IntValueBuffer0",
-    "ExistentialTestMutating_IntValueBuffer1",
-    "ExistentialTestMutating_IntValueBuffer2",
-    "ExistentialTestMutating_IntValueBuffer3",
-    "ExistentialTestMutating_IntValueBuffer4",
-    "ExistentialTestOneMethodCall_ClassValueBuffer1",
-    "ExistentialTestOneMethodCall_ClassValueBuffer2",
-    "ExistentialTestOneMethodCall_ClassValueBuffer3",
-    "ExistentialTestOneMethodCall_ClassValueBuffer4",
-    "ExistentialTestOneMethodCall_IntValueBuffer0",
-    "ExistentialTestOneMethodCall_IntValueBuffer1",
-    "ExistentialTestOneMethodCall_IntValueBuffer2",
-    "ExistentialTestOneMethodCall_IntValueBuffer3",
-    "ExistentialTestOneMethodCall_IntValueBuffer4",
-    "ExistentialTestPassExistentialOneMethodCall_ClassValueBuffer1",
-    "ExistentialTestPassExistentialOneMethodCall_ClassValueBuffer2",
-    "ExistentialTestPassExistentialOneMethodCall_ClassValueBuffer3",
-    "ExistentialTestPassExistentialOneMethodCall_ClassValueBuffer4",
-    "ExistentialTestPassExistentialOneMethodCall_IntValueBuffer0",
-    "ExistentialTestPassExistentialOneMethodCall_IntValueBuffer1",
-    "ExistentialTestPassExistentialOneMethodCall_IntValueBuffer2",
-    "ExistentialTestPassExistentialOneMethodCall_IntValueBuffer3",
-    "ExistentialTestPassExistentialOneMethodCall_IntValueBuffer4",
-    "ExistentialTestPassExistentialTwoMethodCalls_ClassValueBuffer1",
-    "ExistentialTestPassExistentialTwoMethodCalls_ClassValueBuffer2",
-    "ExistentialTestPassExistentialTwoMethodCalls_ClassValueBuffer3",
-    "ExistentialTestPassExistentialTwoMethodCalls_ClassValueBuffer4",
-    "ExistentialTestPassExistentialTwoMethodCalls_IntValueBuffer0",
-    "ExistentialTestPassExistentialTwoMethodCalls_IntValueBuffer1",
-    "ExistentialTestPassExistentialTwoMethodCalls_IntValueBuffer2",
-    "ExistentialTestPassExistentialTwoMethodCalls_IntValueBuffer3",
-    "ExistentialTestPassExistentialTwoMethodCalls_IntValueBuffer4",
-    "ExistentialTestTwoMethodCalls_ClassValueBuffer1",
-    "ExistentialTestTwoMethodCalls_ClassValueBuffer2",
-    "ExistentialTestTwoMethodCalls_ClassValueBuffer3",
-    "ExistentialTestTwoMethodCalls_ClassValueBuffer4",
-    "ExistentialTestTwoMethodCalls_IntValueBuffer0",
-    "ExistentialTestTwoMethodCalls_IntValueBuffer1",
-    "ExistentialTestTwoMethodCalls_IntValueBuffer2",
-    "ExistentialTestTwoMethodCalls_IntValueBuffer3",
-    "ExistentialTestTwoMethodCalls_IntValueBuffer4",
-]
-
-string_tests = [
-    "StringWalkASCIIScalars",
-    "StringWalkASCIICharacters",
-    "StringWalkUnicodeScalars",
-    "StringWalkUnicodeCharacters",
-    "StringWalkMixedScalars",
-    "StringWalkMixedCharacters",
-    "StringWalkASCIIScalarsBackwards",
-    "StringWalkASCIICharactersBackwards",
-    "StringWalkUnicodeScalarsBackwards",
-    "StringWalkUnicodeCharactersBackwards",
-    "StringWalkMixedScalarsBackwards",
-    "StringWalkMixedCharactersBackwards",
-]
-
-ignored_run_funcs = other_tests + string_tests
-
-template_loader = jinja2.FileSystemLoader(searchpath="/")
-template_env = jinja2.Environment(loader=template_loader, trim_blocks=True,
-                                  lstrip_blocks=True)
-
 
 def all_files(directory, extension):  # matching: [directory]/**/*[extension]
     return [
@@ -184,59 +48,11 @@
 
 if __name__ == '__main__':
     # Generate Your Boilerplate
-    gyb_files = all_files(perf_dir, '.gyb')
+    # Make sure longer paths are done first as CMakeLists.txt and main.swift
+    # depend on the other gybs being generated first.
+    gyb_files = sorted(all_files(perf_dir, '.gyb'), key=len, reverse=True)
     for f in gyb_files:
         relative_path = os.path.relpath(f[:-4], perf_dir)
         out_file = os.path.join(output_dir, relative_path)
         will_write(out_file)
         subprocess.call([gyb, '--line-directive', '', '-o', out_file, f])
-
-    # 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')]
-
-    if os.path.isdir(multi_source_dir):
-        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))
-        ]
-    else:
-        multisource_benches = []
-
-    # main.swift imports
-    imports = sorted(tests + [msb.name for msb in multisource_benches])
-
-    # main.swift run functions
-    def get_run_funcs(filepath):
-        content = open(filepath).read()
-        matches = re.findall(r'func run_(.*?)\(', content)
-        return filter(lambda x: x not in ignored_run_funcs, matches)
-
-    def find_run_funcs():
-        swift_files = all_files(perf_dir, '.swift')
-        return [func for f in swift_files for func in get_run_funcs(f)]
-
-    run_funcs = [(f, f) for f in sorted(find_run_funcs())]
-
-    # Replace originals with files generated from templates
-    for template_file in template_map:
-        template_path = os.path.join(script_dir, template_file)
-        template = template_env.get_template(template_path)
-        out_file = template_map[template_file]
-        will_write(out_file)
-        open(out_file, 'w').write(
-            template.render(tests=tests,
-                            multisource_benches=multisource_benches,
-                            imports=imports,
-                            run_funcs=run_funcs,
-                            string_tests=string_tests,
-                            other_tests=other_tests)
-        )
diff --git a/benchmark/scripts/generate_harness/main.swift_template b/benchmark/scripts/generate_harness/main.swift_template
deleted file mode 100644
index 889e630..0000000
--- a/benchmark/scripts/generate_harness/main.swift_template
+++ /dev/null
@@ -1,63 +0,0 @@
-//===--- main.swift -------------------------------------------------------===//
-//
-// 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
-//
-//===----------------------------------------------------------------------===//
-
-////////////////////////////////////////////////////////////////////////////////
-// WARNING: This file is automatically generated from templates and should not
-// be directly modified. Instead, make changes to
-// scripts/generate_harness/main.swift_template and run
-// scripts/generate_harness/generate_harness.py to regenerate this file.
-////////////////////////////////////////////////////////////////////////////////
-
-// This is just a driver for performance overview tests.
-import TestsUtils
-import DriverUtils
-{% for import in imports %}
-import {{ import }}
-{% endfor %}
-
-@inline(__always)
-private func addPrecommitTest(
-  _ name: String, _ function: @escaping (Int) -> ()
-) {
-  precommitTests[name] = function
-}
-@inline(__always)
-private func addStringTest(
-  _ name: String, _ function: @escaping (Int) -> ()
-) {
-  stringTests[name] = function
-}
-@inline(__always)
-private func addOtherTest(
-  _ name: String, _ function: @escaping (Int) -> ()
-) {
-  otherTests[name] = function
-}
-
-// The main test suite: precommit tests
-{% for run_func in run_funcs %}
-addPrecommitTest("{{ run_func[0] }}", run_{{ run_func[1] }})
-{% endfor %}
-
-// Other tests
-{% for test_name in other_tests %}
-addOtherTest("{{ test_name }}", run_{{ test_name }})
-{% endfor %}
-
-// String tests, an extended benchmark suite exercising finer-granularity
-// behavior of our Strings.
-{% for test_name in string_tests %}
-addStringTest("{{ test_name }}", run_{{ test_name }})
-{% endfor %}
-
-main()
-
diff --git a/benchmark/utils/main.swift b/benchmark/utils/main.swift
index 9859c8f..b85d2a3 100644
--- a/benchmark/utils/main.swift
+++ b/benchmark/utils/main.swift
@@ -1,4 +1,4 @@
-//===--- main.swift -------------------------------------------------------===//
+//===--- main.swift -------------------------------------------*- swift -*-===//
 //
 // This source file is part of the Swift.org open source project
 //
@@ -11,9 +11,8 @@
 //===----------------------------------------------------------------------===//
 
 ////////////////////////////////////////////////////////////////////////////////
-// WARNING: This file is automatically generated from templates and should not
-// be directly modified. Instead, make changes to
-// scripts/generate_harness/main.swift_template and run
+// WARNING: This file is manually generated from .gyb template and should not
+// be directly modified. Instead, make changes to main.swift.gyb and run
 // scripts/generate_harness/generate_harness.py to regenerate this file.
 ////////////////////////////////////////////////////////////////////////////////
 
@@ -121,411 +120,401 @@
 import XorLoop
 
 @inline(__always)
-private func addPrecommitTest(
-  _ name: String, _ function: @escaping (Int) -> ()
+private func addTo(
+  _ testSuite: inout [String : (Int) -> ()],
+  _ name: String,
+  _ function: @escaping (Int) -> ()
 ) {
-  precommitTests[name] = function
-}
-@inline(__always)
-private func addStringTest(
-  _ name: String, _ function: @escaping (Int) -> ()
-) {
-  stringTests[name] = function
-}
-@inline(__always)
-private func addOtherTest(
-  _ name: String, _ function: @escaping (Int) -> ()
-) {
-  otherTests[name] = function
+  testSuite[name] = function
 }
 
 // The main test suite: precommit tests
-addPrecommitTest("AngryPhonebook", run_AngryPhonebook)
-addPrecommitTest("AnyHashableWithAClass", run_AnyHashableWithAClass)
-addPrecommitTest("Array2D", run_Array2D)
-addPrecommitTest("ArrayAppend", run_ArrayAppend)
-addPrecommitTest("ArrayAppendArrayOfInt", run_ArrayAppendArrayOfInt)
-addPrecommitTest("ArrayAppendAscii", run_ArrayAppendAscii)
-addPrecommitTest("ArrayAppendFromGeneric", run_ArrayAppendFromGeneric)
-addPrecommitTest("ArrayAppendGenericStructs", run_ArrayAppendGenericStructs)
-addPrecommitTest("ArrayAppendLatin1", run_ArrayAppendLatin1)
-addPrecommitTest("ArrayAppendLazyMap", run_ArrayAppendLazyMap)
-addPrecommitTest("ArrayAppendOptionals", run_ArrayAppendOptionals)
-addPrecommitTest("ArrayAppendRepeatCol", run_ArrayAppendRepeatCol)
-addPrecommitTest("ArrayAppendReserved", run_ArrayAppendReserved)
-addPrecommitTest("ArrayAppendSequence", run_ArrayAppendSequence)
-addPrecommitTest("ArrayAppendStrings", run_ArrayAppendStrings)
-addPrecommitTest("ArrayAppendToFromGeneric", run_ArrayAppendToFromGeneric)
-addPrecommitTest("ArrayAppendToGeneric", run_ArrayAppendToGeneric)
-addPrecommitTest("ArrayAppendUTF16", run_ArrayAppendUTF16)
-addPrecommitTest("ArrayInClass", run_ArrayInClass)
-addPrecommitTest("ArrayLiteral", run_ArrayLiteral)
-addPrecommitTest("ArrayOfGenericPOD", run_ArrayOfGenericPOD)
-addPrecommitTest("ArrayOfGenericRef", run_ArrayOfGenericRef)
-addPrecommitTest("ArrayOfPOD", run_ArrayOfPOD)
-addPrecommitTest("ArrayOfRef", run_ArrayOfRef)
-addPrecommitTest("ArrayPlusEqualArrayOfInt", run_ArrayPlusEqualArrayOfInt)
-addPrecommitTest("ArrayPlusEqualFiveElementCollection", run_ArrayPlusEqualFiveElementCollection)
-addPrecommitTest("ArrayPlusEqualSingleElementCollection", run_ArrayPlusEqualSingleElementCollection)
-addPrecommitTest("ArrayPlusEqualThreeElements", run_ArrayPlusEqualThreeElements)
-addPrecommitTest("ArraySubscript", run_ArraySubscript)
-addPrecommitTest("ArrayValueProp", run_ArrayValueProp)
-addPrecommitTest("ArrayValueProp2", run_ArrayValueProp2)
-addPrecommitTest("ArrayValueProp3", run_ArrayValueProp3)
-addPrecommitTest("ArrayValueProp4", run_ArrayValueProp4)
-addPrecommitTest("BitCount", run_BitCount)
-addPrecommitTest("ByteSwap", run_ByteSwap)
-addPrecommitTest("CStringLongAscii", run_CStringLongAscii)
-addPrecommitTest("CStringLongNonAscii", run_CStringLongNonAscii)
-addPrecommitTest("CStringShortAscii", run_CStringShortAscii)
-addPrecommitTest("Calculator", run_Calculator)
-addPrecommitTest("CaptureProp", run_CaptureProp)
-addPrecommitTest("CharacterLiteralsLarge", run_CharacterLiteralsLarge)
-addPrecommitTest("CharacterLiteralsSmall", run_CharacterLiteralsSmall)
-addPrecommitTest("Chars", run_Chars)
-addPrecommitTest("ClassArrayGetter", run_ClassArrayGetter)
-addPrecommitTest("DeadArray", run_DeadArray)
-addPrecommitTest("Dictionary", run_Dictionary)
-addPrecommitTest("Dictionary2", run_Dictionary2)
-addPrecommitTest("Dictionary2OfObjects", run_Dictionary2OfObjects)
-addPrecommitTest("Dictionary3", run_Dictionary3)
-addPrecommitTest("Dictionary3OfObjects", run_Dictionary3OfObjects)
-addPrecommitTest("DictionaryBridge", run_DictionaryBridge)
-addPrecommitTest("DictionaryLiteral", run_DictionaryLiteral)
-addPrecommitTest("DictionaryOfObjects", run_DictionaryOfObjects)
-addPrecommitTest("DictionaryRemove", run_DictionaryRemove)
-addPrecommitTest("DictionaryRemoveOfObjects", run_DictionaryRemoveOfObjects)
-addPrecommitTest("DictionarySwap", run_DictionarySwap)
-addPrecommitTest("DictionarySwapOfObjects", run_DictionarySwapOfObjects)
-addPrecommitTest("DropFirstAnyCollection", run_DropFirstAnyCollection)
-addPrecommitTest("DropFirstAnyCollectionLazy", run_DropFirstAnyCollectionLazy)
-addPrecommitTest("DropFirstAnySeqCRangeIter", run_DropFirstAnySeqCRangeIter)
-addPrecommitTest("DropFirstAnySeqCRangeIterLazy", run_DropFirstAnySeqCRangeIterLazy)
-addPrecommitTest("DropFirstAnySeqCntRange", run_DropFirstAnySeqCntRange)
-addPrecommitTest("DropFirstAnySeqCntRangeLazy", run_DropFirstAnySeqCntRangeLazy)
-addPrecommitTest("DropFirstAnySequence", run_DropFirstAnySequence)
-addPrecommitTest("DropFirstAnySequenceLazy", run_DropFirstAnySequenceLazy)
-addPrecommitTest("DropFirstArray", run_DropFirstArray)
-addPrecommitTest("DropFirstArrayLazy", run_DropFirstArrayLazy)
-addPrecommitTest("DropFirstCountableRange", run_DropFirstCountableRange)
-addPrecommitTest("DropFirstCountableRangeLazy", run_DropFirstCountableRangeLazy)
-addPrecommitTest("DropFirstSequence", run_DropFirstSequence)
-addPrecommitTest("DropFirstSequenceLazy", run_DropFirstSequenceLazy)
-addPrecommitTest("DropLastAnyCollection", run_DropLastAnyCollection)
-addPrecommitTest("DropLastAnyCollectionLazy", run_DropLastAnyCollectionLazy)
-addPrecommitTest("DropLastAnySeqCRangeIter", run_DropLastAnySeqCRangeIter)
-addPrecommitTest("DropLastAnySeqCRangeIterLazy", run_DropLastAnySeqCRangeIterLazy)
-addPrecommitTest("DropLastAnySeqCntRange", run_DropLastAnySeqCntRange)
-addPrecommitTest("DropLastAnySeqCntRangeLazy", run_DropLastAnySeqCntRangeLazy)
-addPrecommitTest("DropLastAnySequence", run_DropLastAnySequence)
-addPrecommitTest("DropLastAnySequenceLazy", run_DropLastAnySequenceLazy)
-addPrecommitTest("DropLastArray", run_DropLastArray)
-addPrecommitTest("DropLastArrayLazy", run_DropLastArrayLazy)
-addPrecommitTest("DropLastCountableRange", run_DropLastCountableRange)
-addPrecommitTest("DropLastCountableRangeLazy", run_DropLastCountableRangeLazy)
-addPrecommitTest("DropLastSequence", run_DropLastSequence)
-addPrecommitTest("DropLastSequenceLazy", run_DropLastSequenceLazy)
-addPrecommitTest("DropWhileAnyCollection", run_DropWhileAnyCollection)
-addPrecommitTest("DropWhileAnyCollectionLazy", run_DropWhileAnyCollectionLazy)
-addPrecommitTest("DropWhileAnySeqCRangeIter", run_DropWhileAnySeqCRangeIter)
-addPrecommitTest("DropWhileAnySeqCRangeIterLazy", run_DropWhileAnySeqCRangeIterLazy)
-addPrecommitTest("DropWhileAnySeqCntRange", run_DropWhileAnySeqCntRange)
-addPrecommitTest("DropWhileAnySeqCntRangeLazy", run_DropWhileAnySeqCntRangeLazy)
-addPrecommitTest("DropWhileAnySequence", run_DropWhileAnySequence)
-addPrecommitTest("DropWhileAnySequenceLazy", run_DropWhileAnySequenceLazy)
-addPrecommitTest("DropWhileArray", run_DropWhileArray)
-addPrecommitTest("DropWhileArrayLazy", run_DropWhileArrayLazy)
-addPrecommitTest("DropWhileCountableRange", run_DropWhileCountableRange)
-addPrecommitTest("DropWhileCountableRangeLazy", run_DropWhileCountableRangeLazy)
-addPrecommitTest("DropWhileSequence", run_DropWhileSequence)
-addPrecommitTest("DropWhileSequenceLazy", run_DropWhileSequenceLazy)
-addPrecommitTest("ErrorHandling", run_ErrorHandling)
-addPrecommitTest("GlobalClass", run_GlobalClass)
-addPrecommitTest("Hanoi", run_Hanoi)
-addPrecommitTest("HashQuadratic", run_HashQuadratic)
-addPrecommitTest("HashTest", run_HashTest)
-addPrecommitTest("Histogram", run_Histogram)
-addPrecommitTest("Integrate", run_Integrate)
-addPrecommitTest("IterateData", run_IterateData)
-addPrecommitTest("Join", run_Join)
-addPrecommitTest("LazilyFilteredArrays", run_LazilyFilteredArrays)
-addPrecommitTest("LazilyFilteredRange", run_LazilyFilteredRange)
-addPrecommitTest("LinkedList", run_LinkedList)
-addPrecommitTest("MapReduce", run_MapReduce)
-addPrecommitTest("MapReduceAnyCollection", run_MapReduceAnyCollection)
-addPrecommitTest("MapReduceAnyCollectionShort", run_MapReduceAnyCollectionShort)
-addPrecommitTest("MapReduceClass", run_MapReduceClass)
-addPrecommitTest("MapReduceClassShort", run_MapReduceClassShort)
-addPrecommitTest("MapReduceLazyCollection", run_MapReduceLazyCollection)
-addPrecommitTest("MapReduceLazyCollectionShort", run_MapReduceLazyCollectionShort)
-addPrecommitTest("MapReduceLazySequence", run_MapReduceLazySequence)
-addPrecommitTest("MapReduceSequence", run_MapReduceSequence)
-addPrecommitTest("MapReduceShort", run_MapReduceShort)
-addPrecommitTest("MapReduceShortString", run_MapReduceShortString)
-addPrecommitTest("MapReduceString", run_MapReduceString)
-addPrecommitTest("Memset", run_Memset)
-addPrecommitTest("MonteCarloE", run_MonteCarloE)
-addPrecommitTest("MonteCarloPi", run_MonteCarloPi)
-addPrecommitTest("NSDictionaryCastToSwift", run_NSDictionaryCastToSwift)
-addPrecommitTest("NSError", run_NSError)
-addPrecommitTest("NSStringConversion", run_NSStringConversion)
-addPrecommitTest("NopDeinit", run_NopDeinit)
-addPrecommitTest("ObjectAllocation", run_ObjectAllocation)
-addPrecommitTest("ObjectiveCBridgeFromNSArrayAnyObject", run_ObjectiveCBridgeFromNSArrayAnyObject)
-addPrecommitTest("ObjectiveCBridgeFromNSArrayAnyObjectForced", run_ObjectiveCBridgeFromNSArrayAnyObjectForced)
-addPrecommitTest("ObjectiveCBridgeFromNSArrayAnyObjectToString", run_ObjectiveCBridgeFromNSArrayAnyObjectToString)
-addPrecommitTest("ObjectiveCBridgeFromNSArrayAnyObjectToStringForced", run_ObjectiveCBridgeFromNSArrayAnyObjectToStringForced)
-addPrecommitTest("ObjectiveCBridgeFromNSDictionaryAnyObject", run_ObjectiveCBridgeFromNSDictionaryAnyObject)
-addPrecommitTest("ObjectiveCBridgeFromNSDictionaryAnyObjectForced", run_ObjectiveCBridgeFromNSDictionaryAnyObjectForced)
-addPrecommitTest("ObjectiveCBridgeFromNSDictionaryAnyObjectToString", run_ObjectiveCBridgeFromNSDictionaryAnyObjectToString)
-addPrecommitTest("ObjectiveCBridgeFromNSDictionaryAnyObjectToStringForced", run_ObjectiveCBridgeFromNSDictionaryAnyObjectToStringForced)
-addPrecommitTest("ObjectiveCBridgeFromNSSetAnyObject", run_ObjectiveCBridgeFromNSSetAnyObject)
-addPrecommitTest("ObjectiveCBridgeFromNSSetAnyObjectForced", run_ObjectiveCBridgeFromNSSetAnyObjectForced)
-addPrecommitTest("ObjectiveCBridgeFromNSSetAnyObjectToString", run_ObjectiveCBridgeFromNSSetAnyObjectToString)
-addPrecommitTest("ObjectiveCBridgeFromNSSetAnyObjectToStringForced", run_ObjectiveCBridgeFromNSSetAnyObjectToStringForced)
-addPrecommitTest("ObjectiveCBridgeFromNSString", run_ObjectiveCBridgeFromNSString)
-addPrecommitTest("ObjectiveCBridgeFromNSStringForced", run_ObjectiveCBridgeFromNSStringForced)
-addPrecommitTest("ObjectiveCBridgeStubDataAppend", run_ObjectiveCBridgeStubDataAppend)
-addPrecommitTest("ObjectiveCBridgeStubDateAccess", run_ObjectiveCBridgeStubDateAccess)
-addPrecommitTest("ObjectiveCBridgeStubDateMutation", run_ObjectiveCBridgeStubDateMutation)
-addPrecommitTest("ObjectiveCBridgeStubFromArrayOfNSString", run_ObjectiveCBridgeStubFromArrayOfNSString)
-addPrecommitTest("ObjectiveCBridgeStubFromNSDate", run_ObjectiveCBridgeStubFromNSDate)
-addPrecommitTest("ObjectiveCBridgeStubFromNSDateRef", run_ObjectiveCBridgeStubFromNSDateRef)
-addPrecommitTest("ObjectiveCBridgeStubFromNSString", run_ObjectiveCBridgeStubFromNSString)
-addPrecommitTest("ObjectiveCBridgeStubFromNSStringRef", run_ObjectiveCBridgeStubFromNSStringRef)
-addPrecommitTest("ObjectiveCBridgeStubNSDataAppend", run_ObjectiveCBridgeStubNSDataAppend)
-addPrecommitTest("ObjectiveCBridgeStubNSDateMutationRef", run_ObjectiveCBridgeStubNSDateMutationRef)
-addPrecommitTest("ObjectiveCBridgeStubNSDateRefAccess", run_ObjectiveCBridgeStubNSDateRefAccess)
-addPrecommitTest("ObjectiveCBridgeStubToArrayOfNSString", run_ObjectiveCBridgeStubToArrayOfNSString)
-addPrecommitTest("ObjectiveCBridgeStubToNSDate", run_ObjectiveCBridgeStubToNSDate)
-addPrecommitTest("ObjectiveCBridgeStubToNSDateRef", run_ObjectiveCBridgeStubToNSDateRef)
-addPrecommitTest("ObjectiveCBridgeStubToNSString", run_ObjectiveCBridgeStubToNSString)
-addPrecommitTest("ObjectiveCBridgeStubToNSStringRef", run_ObjectiveCBridgeStubToNSStringRef)
-addPrecommitTest("ObjectiveCBridgeStubURLAppendPath", run_ObjectiveCBridgeStubURLAppendPath)
-addPrecommitTest("ObjectiveCBridgeStubURLAppendPathRef", run_ObjectiveCBridgeStubURLAppendPathRef)
-addPrecommitTest("ObjectiveCBridgeToNSArray", run_ObjectiveCBridgeToNSArray)
-addPrecommitTest("ObjectiveCBridgeToNSDictionary", run_ObjectiveCBridgeToNSDictionary)
-addPrecommitTest("ObjectiveCBridgeToNSSet", run_ObjectiveCBridgeToNSSet)
-addPrecommitTest("ObjectiveCBridgeToNSString", run_ObjectiveCBridgeToNSString)
-addPrecommitTest("ObserverClosure", run_ObserverClosure)
-addPrecommitTest("ObserverForwarderStruct", run_ObserverForwarderStruct)
-addPrecommitTest("ObserverPartiallyAppliedMethod", run_ObserverPartiallyAppliedMethod)
-addPrecommitTest("ObserverUnappliedMethod", run_ObserverUnappliedMethod)
-addPrecommitTest("OpenClose", run_OpenClose)
-addPrecommitTest("Phonebook", run_Phonebook)
-addPrecommitTest("PolymorphicCalls", run_PolymorphicCalls)
-addPrecommitTest("PopFrontArray", run_PopFrontArray)
-addPrecommitTest("PopFrontArrayGeneric", run_PopFrontArrayGeneric)
-addPrecommitTest("PopFrontUnsafePointer", run_PopFrontUnsafePointer)
-addPrecommitTest("PrefixAnyCollection", run_PrefixAnyCollection)
-addPrecommitTest("PrefixAnyCollectionLazy", run_PrefixAnyCollectionLazy)
-addPrecommitTest("PrefixAnySeqCRangeIter", run_PrefixAnySeqCRangeIter)
-addPrecommitTest("PrefixAnySeqCRangeIterLazy", run_PrefixAnySeqCRangeIterLazy)
-addPrecommitTest("PrefixAnySeqCntRange", run_PrefixAnySeqCntRange)
-addPrecommitTest("PrefixAnySeqCntRangeLazy", run_PrefixAnySeqCntRangeLazy)
-addPrecommitTest("PrefixAnySequence", run_PrefixAnySequence)
-addPrecommitTest("PrefixAnySequenceLazy", run_PrefixAnySequenceLazy)
-addPrecommitTest("PrefixArray", run_PrefixArray)
-addPrecommitTest("PrefixArrayLazy", run_PrefixArrayLazy)
-addPrecommitTest("PrefixCountableRange", run_PrefixCountableRange)
-addPrecommitTest("PrefixCountableRangeLazy", run_PrefixCountableRangeLazy)
-addPrecommitTest("PrefixSequence", run_PrefixSequence)
-addPrecommitTest("PrefixSequenceLazy", run_PrefixSequenceLazy)
-addPrecommitTest("PrefixWhileAnyCollection", run_PrefixWhileAnyCollection)
-addPrecommitTest("PrefixWhileAnyCollectionLazy", run_PrefixWhileAnyCollectionLazy)
-addPrecommitTest("PrefixWhileAnySeqCRangeIter", run_PrefixWhileAnySeqCRangeIter)
-addPrecommitTest("PrefixWhileAnySeqCRangeIterLazy", run_PrefixWhileAnySeqCRangeIterLazy)
-addPrecommitTest("PrefixWhileAnySeqCntRange", run_PrefixWhileAnySeqCntRange)
-addPrecommitTest("PrefixWhileAnySeqCntRangeLazy", run_PrefixWhileAnySeqCntRangeLazy)
-addPrecommitTest("PrefixWhileAnySequence", run_PrefixWhileAnySequence)
-addPrecommitTest("PrefixWhileAnySequenceLazy", run_PrefixWhileAnySequenceLazy)
-addPrecommitTest("PrefixWhileArray", run_PrefixWhileArray)
-addPrecommitTest("PrefixWhileArrayLazy", run_PrefixWhileArrayLazy)
-addPrecommitTest("PrefixWhileCountableRange", run_PrefixWhileCountableRange)
-addPrecommitTest("PrefixWhileCountableRangeLazy", run_PrefixWhileCountableRangeLazy)
-addPrecommitTest("PrefixWhileSequence", run_PrefixWhileSequence)
-addPrecommitTest("PrefixWhileSequenceLazy", run_PrefixWhileSequenceLazy)
-addPrecommitTest("Prims", run_Prims)
-addPrecommitTest("ProtocolDispatch", run_ProtocolDispatch)
-addPrecommitTest("ProtocolDispatch2", run_ProtocolDispatch2)
-addPrecommitTest("RC4", run_RC4)
-addPrecommitTest("RGBHistogram", run_RGBHistogram)
-addPrecommitTest("RGBHistogramOfObjects", run_RGBHistogramOfObjects)
-addPrecommitTest("RangeAssignment", run_RangeAssignment)
-addPrecommitTest("RecursiveOwnedParameter", run_RecursiveOwnedParameter)
-addPrecommitTest("ReversedArray", run_ReversedArray)
-addPrecommitTest("ReversedBidirectional", run_ReversedBidirectional)
-addPrecommitTest("ReversedDictionary", run_ReversedDictionary)
-addPrecommitTest("SetExclusiveOr", run_SetExclusiveOr)
-addPrecommitTest("SetExclusiveOr_OfObjects", run_SetExclusiveOr_OfObjects)
-addPrecommitTest("SetIntersect", run_SetIntersect)
-addPrecommitTest("SetIntersect_OfObjects", run_SetIntersect_OfObjects)
-addPrecommitTest("SetIsSubsetOf", run_SetIsSubsetOf)
-addPrecommitTest("SetIsSubsetOf_OfObjects", run_SetIsSubsetOf_OfObjects)
-addPrecommitTest("SetUnion", run_SetUnion)
-addPrecommitTest("SetUnion_OfObjects", run_SetUnion_OfObjects)
-addPrecommitTest("SevenBoom", run_SevenBoom)
-addPrecommitTest("Sim2DArray", run_Sim2DArray)
-addPrecommitTest("SortLargeExistentials", run_SortLargeExistentials)
-addPrecommitTest("SortLettersInPlace", run_SortLettersInPlace)
-addPrecommitTest("SortSortedStrings", run_SortSortedStrings)
-addPrecommitTest("SortStrings", run_SortStrings)
-addPrecommitTest("SortStringsUnicode", run_SortStringsUnicode)
-addPrecommitTest("StackPromo", run_StackPromo)
-addPrecommitTest("StaticArray", run_StaticArray)
-addPrecommitTest("StrComplexWalk", run_StrComplexWalk)
-addPrecommitTest("StrToInt", run_StrToInt)
-addPrecommitTest("StringAdder", run_StringAdder)
-addPrecommitTest("StringBuilder", run_StringBuilder)
-addPrecommitTest("StringBuilderLong", run_StringBuilderLong)
-addPrecommitTest("StringEdits", run_StringEdits)
-addPrecommitTest("StringEqualPointerComparison", run_StringEqualPointerComparison)
-addPrecommitTest("StringHasPrefix", run_StringHasPrefix)
-addPrecommitTest("StringHasPrefixUnicode", run_StringHasPrefixUnicode)
-addPrecommitTest("StringHasSuffix", run_StringHasSuffix)
-addPrecommitTest("StringHasSuffixUnicode", run_StringHasSuffixUnicode)
-addPrecommitTest("StringInterpolation", run_StringInterpolation)
-addPrecommitTest("StringMatch", run_StringMatch)
-addPrecommitTest("StringUTF16Builder", run_StringUTF16Builder)
-addPrecommitTest("StringWalk", run_StringWalk)
-addPrecommitTest("StringWithCString", run_StringWithCString)
-addPrecommitTest("SuffixAnyCollection", run_SuffixAnyCollection)
-addPrecommitTest("SuffixAnyCollectionLazy", run_SuffixAnyCollectionLazy)
-addPrecommitTest("SuffixAnySeqCRangeIter", run_SuffixAnySeqCRangeIter)
-addPrecommitTest("SuffixAnySeqCRangeIterLazy", run_SuffixAnySeqCRangeIterLazy)
-addPrecommitTest("SuffixAnySeqCntRange", run_SuffixAnySeqCntRange)
-addPrecommitTest("SuffixAnySeqCntRangeLazy", run_SuffixAnySeqCntRangeLazy)
-addPrecommitTest("SuffixAnySequence", run_SuffixAnySequence)
-addPrecommitTest("SuffixAnySequenceLazy", run_SuffixAnySequenceLazy)
-addPrecommitTest("SuffixArray", run_SuffixArray)
-addPrecommitTest("SuffixArrayLazy", run_SuffixArrayLazy)
-addPrecommitTest("SuffixCountableRange", run_SuffixCountableRange)
-addPrecommitTest("SuffixCountableRangeLazy", run_SuffixCountableRangeLazy)
-addPrecommitTest("SuffixSequence", run_SuffixSequence)
-addPrecommitTest("SuffixSequenceLazy", run_SuffixSequenceLazy)
-addPrecommitTest("SuperChars", run_SuperChars)
-addPrecommitTest("TwoSum", run_TwoSum)
-addPrecommitTest("TypeFlood", run_TypeFlood)
-addPrecommitTest("UTF8Decode", run_UTF8Decode)
-addPrecommitTest("Walsh", run_Walsh)
-addPrecommitTest("XorLoop", run_XorLoop)
+addTo(&precommitTests, "AngryPhonebook", run_AngryPhonebook)
+addTo(&precommitTests, "AnyHashableWithAClass", run_AnyHashableWithAClass)
+addTo(&precommitTests, "Array2D", run_Array2D)
+addTo(&precommitTests, "ArrayAppend", run_ArrayAppend)
+addTo(&precommitTests, "ArrayAppendArrayOfInt", run_ArrayAppendArrayOfInt)
+addTo(&precommitTests, "ArrayAppendAscii", run_ArrayAppendAscii)
+addTo(&precommitTests, "ArrayAppendFromGeneric", run_ArrayAppendFromGeneric)
+addTo(&precommitTests, "ArrayAppendGenericStructs", run_ArrayAppendGenericStructs)
+addTo(&precommitTests, "ArrayAppendLatin1", run_ArrayAppendLatin1)
+addTo(&precommitTests, "ArrayAppendLazyMap", run_ArrayAppendLazyMap)
+addTo(&precommitTests, "ArrayAppendOptionals", run_ArrayAppendOptionals)
+addTo(&precommitTests, "ArrayAppendRepeatCol", run_ArrayAppendRepeatCol)
+addTo(&precommitTests, "ArrayAppendReserved", run_ArrayAppendReserved)
+addTo(&precommitTests, "ArrayAppendSequence", run_ArrayAppendSequence)
+addTo(&precommitTests, "ArrayAppendStrings", run_ArrayAppendStrings)
+addTo(&precommitTests, "ArrayAppendToFromGeneric", run_ArrayAppendToFromGeneric)
+addTo(&precommitTests, "ArrayAppendToGeneric", run_ArrayAppendToGeneric)
+addTo(&precommitTests, "ArrayAppendUTF16", run_ArrayAppendUTF16)
+addTo(&precommitTests, "ArrayInClass", run_ArrayInClass)
+addTo(&precommitTests, "ArrayLiteral", run_ArrayLiteral)
+addTo(&precommitTests, "ArrayOfGenericPOD", run_ArrayOfGenericPOD)
+addTo(&precommitTests, "ArrayOfGenericRef", run_ArrayOfGenericRef)
+addTo(&precommitTests, "ArrayOfPOD", run_ArrayOfPOD)
+addTo(&precommitTests, "ArrayOfRef", run_ArrayOfRef)
+addTo(&precommitTests, "ArrayPlusEqualArrayOfInt", run_ArrayPlusEqualArrayOfInt)
+addTo(&precommitTests, "ArrayPlusEqualFiveElementCollection", run_ArrayPlusEqualFiveElementCollection)
+addTo(&precommitTests, "ArrayPlusEqualSingleElementCollection", run_ArrayPlusEqualSingleElementCollection)
+addTo(&precommitTests, "ArrayPlusEqualThreeElements", run_ArrayPlusEqualThreeElements)
+addTo(&precommitTests, "ArraySubscript", run_ArraySubscript)
+addTo(&precommitTests, "ArrayValueProp", run_ArrayValueProp)
+addTo(&precommitTests, "ArrayValueProp2", run_ArrayValueProp2)
+addTo(&precommitTests, "ArrayValueProp3", run_ArrayValueProp3)
+addTo(&precommitTests, "ArrayValueProp4", run_ArrayValueProp4)
+addTo(&precommitTests, "BitCount", run_BitCount)
+addTo(&precommitTests, "ByteSwap", run_ByteSwap)
+addTo(&precommitTests, "CStringLongAscii", run_CStringLongAscii)
+addTo(&precommitTests, "CStringLongNonAscii", run_CStringLongNonAscii)
+addTo(&precommitTests, "CStringShortAscii", run_CStringShortAscii)
+addTo(&precommitTests, "Calculator", run_Calculator)
+addTo(&precommitTests, "CaptureProp", run_CaptureProp)
+addTo(&precommitTests, "CharacterLiteralsLarge", run_CharacterLiteralsLarge)
+addTo(&precommitTests, "CharacterLiteralsSmall", run_CharacterLiteralsSmall)
+addTo(&precommitTests, "Chars", run_Chars)
+addTo(&precommitTests, "ClassArrayGetter", run_ClassArrayGetter)
+addTo(&precommitTests, "DeadArray", run_DeadArray)
+addTo(&precommitTests, "Dictionary", run_Dictionary)
+addTo(&precommitTests, "Dictionary2", run_Dictionary2)
+addTo(&precommitTests, "Dictionary2OfObjects", run_Dictionary2OfObjects)
+addTo(&precommitTests, "Dictionary3", run_Dictionary3)
+addTo(&precommitTests, "Dictionary3OfObjects", run_Dictionary3OfObjects)
+addTo(&precommitTests, "DictionaryBridge", run_DictionaryBridge)
+addTo(&precommitTests, "DictionaryLiteral", run_DictionaryLiteral)
+addTo(&precommitTests, "DictionaryOfObjects", run_DictionaryOfObjects)
+addTo(&precommitTests, "DictionaryRemove", run_DictionaryRemove)
+addTo(&precommitTests, "DictionaryRemoveOfObjects", run_DictionaryRemoveOfObjects)
+addTo(&precommitTests, "DictionarySwap", run_DictionarySwap)
+addTo(&precommitTests, "DictionarySwapOfObjects", run_DictionarySwapOfObjects)
+addTo(&precommitTests, "DropFirstAnyCollection", run_DropFirstAnyCollection)
+addTo(&precommitTests, "DropFirstAnyCollectionLazy", run_DropFirstAnyCollectionLazy)
+addTo(&precommitTests, "DropFirstAnySeqCRangeIter", run_DropFirstAnySeqCRangeIter)
+addTo(&precommitTests, "DropFirstAnySeqCRangeIterLazy", run_DropFirstAnySeqCRangeIterLazy)
+addTo(&precommitTests, "DropFirstAnySeqCntRange", run_DropFirstAnySeqCntRange)
+addTo(&precommitTests, "DropFirstAnySeqCntRangeLazy", run_DropFirstAnySeqCntRangeLazy)
+addTo(&precommitTests, "DropFirstAnySequence", run_DropFirstAnySequence)
+addTo(&precommitTests, "DropFirstAnySequenceLazy", run_DropFirstAnySequenceLazy)
+addTo(&precommitTests, "DropFirstArray", run_DropFirstArray)
+addTo(&precommitTests, "DropFirstArrayLazy", run_DropFirstArrayLazy)
+addTo(&precommitTests, "DropFirstCountableRange", run_DropFirstCountableRange)
+addTo(&precommitTests, "DropFirstCountableRangeLazy", run_DropFirstCountableRangeLazy)
+addTo(&precommitTests, "DropFirstSequence", run_DropFirstSequence)
+addTo(&precommitTests, "DropFirstSequenceLazy", run_DropFirstSequenceLazy)
+addTo(&precommitTests, "DropLastAnyCollection", run_DropLastAnyCollection)
+addTo(&precommitTests, "DropLastAnyCollectionLazy", run_DropLastAnyCollectionLazy)
+addTo(&precommitTests, "DropLastAnySeqCRangeIter", run_DropLastAnySeqCRangeIter)
+addTo(&precommitTests, "DropLastAnySeqCRangeIterLazy", run_DropLastAnySeqCRangeIterLazy)
+addTo(&precommitTests, "DropLastAnySeqCntRange", run_DropLastAnySeqCntRange)
+addTo(&precommitTests, "DropLastAnySeqCntRangeLazy", run_DropLastAnySeqCntRangeLazy)
+addTo(&precommitTests, "DropLastAnySequence", run_DropLastAnySequence)
+addTo(&precommitTests, "DropLastAnySequenceLazy", run_DropLastAnySequenceLazy)
+addTo(&precommitTests, "DropLastArray", run_DropLastArray)
+addTo(&precommitTests, "DropLastArrayLazy", run_DropLastArrayLazy)
+addTo(&precommitTests, "DropLastCountableRange", run_DropLastCountableRange)
+addTo(&precommitTests, "DropLastCountableRangeLazy", run_DropLastCountableRangeLazy)
+addTo(&precommitTests, "DropLastSequence", run_DropLastSequence)
+addTo(&precommitTests, "DropLastSequenceLazy", run_DropLastSequenceLazy)
+addTo(&precommitTests, "DropWhileAnyCollection", run_DropWhileAnyCollection)
+addTo(&precommitTests, "DropWhileAnyCollectionLazy", run_DropWhileAnyCollectionLazy)
+addTo(&precommitTests, "DropWhileAnySeqCRangeIter", run_DropWhileAnySeqCRangeIter)
+addTo(&precommitTests, "DropWhileAnySeqCRangeIterLazy", run_DropWhileAnySeqCRangeIterLazy)
+addTo(&precommitTests, "DropWhileAnySeqCntRange", run_DropWhileAnySeqCntRange)
+addTo(&precommitTests, "DropWhileAnySeqCntRangeLazy", run_DropWhileAnySeqCntRangeLazy)
+addTo(&precommitTests, "DropWhileAnySequence", run_DropWhileAnySequence)
+addTo(&precommitTests, "DropWhileAnySequenceLazy", run_DropWhileAnySequenceLazy)
+addTo(&precommitTests, "DropWhileArray", run_DropWhileArray)
+addTo(&precommitTests, "DropWhileArrayLazy", run_DropWhileArrayLazy)
+addTo(&precommitTests, "DropWhileCountableRange", run_DropWhileCountableRange)
+addTo(&precommitTests, "DropWhileCountableRangeLazy", run_DropWhileCountableRangeLazy)
+addTo(&precommitTests, "DropWhileSequence", run_DropWhileSequence)
+addTo(&precommitTests, "DropWhileSequenceLazy", run_DropWhileSequenceLazy)
+addTo(&precommitTests, "ErrorHandling", run_ErrorHandling)
+addTo(&precommitTests, "GlobalClass", run_GlobalClass)
+addTo(&precommitTests, "Hanoi", run_Hanoi)
+addTo(&precommitTests, "HashQuadratic", run_HashQuadratic)
+addTo(&precommitTests, "HashTest", run_HashTest)
+addTo(&precommitTests, "Histogram", run_Histogram)
+addTo(&precommitTests, "Integrate", run_Integrate)
+addTo(&precommitTests, "IterateData", run_IterateData)
+addTo(&precommitTests, "Join", run_Join)
+addTo(&precommitTests, "LazilyFilteredArrays", run_LazilyFilteredArrays)
+addTo(&precommitTests, "LazilyFilteredRange", run_LazilyFilteredRange)
+addTo(&precommitTests, "LinkedList", run_LinkedList)
+addTo(&precommitTests, "MapReduce", run_MapReduce)
+addTo(&precommitTests, "MapReduceAnyCollection", run_MapReduceAnyCollection)
+addTo(&precommitTests, "MapReduceAnyCollectionShort", run_MapReduceAnyCollectionShort)
+addTo(&precommitTests, "MapReduceClass", run_MapReduceClass)
+addTo(&precommitTests, "MapReduceClassShort", run_MapReduceClassShort)
+addTo(&precommitTests, "MapReduceLazyCollection", run_MapReduceLazyCollection)
+addTo(&precommitTests, "MapReduceLazyCollectionShort", run_MapReduceLazyCollectionShort)
+addTo(&precommitTests, "MapReduceLazySequence", run_MapReduceLazySequence)
+addTo(&precommitTests, "MapReduceSequence", run_MapReduceSequence)
+addTo(&precommitTests, "MapReduceShort", run_MapReduceShort)
+addTo(&precommitTests, "MapReduceShortString", run_MapReduceShortString)
+addTo(&precommitTests, "MapReduceString", run_MapReduceString)
+addTo(&precommitTests, "Memset", run_Memset)
+addTo(&precommitTests, "MonteCarloE", run_MonteCarloE)
+addTo(&precommitTests, "MonteCarloPi", run_MonteCarloPi)
+addTo(&precommitTests, "NSDictionaryCastToSwift", run_NSDictionaryCastToSwift)
+addTo(&precommitTests, "NSError", run_NSError)
+addTo(&precommitTests, "NSStringConversion", run_NSStringConversion)
+addTo(&precommitTests, "NopDeinit", run_NopDeinit)
+addTo(&precommitTests, "ObjectAllocation", run_ObjectAllocation)
+addTo(&precommitTests, "ObjectiveCBridgeFromNSArrayAnyObject", run_ObjectiveCBridgeFromNSArrayAnyObject)
+addTo(&precommitTests, "ObjectiveCBridgeFromNSArrayAnyObjectForced", run_ObjectiveCBridgeFromNSArrayAnyObjectForced)
+addTo(&precommitTests, "ObjectiveCBridgeFromNSArrayAnyObjectToString", run_ObjectiveCBridgeFromNSArrayAnyObjectToString)
+addTo(&precommitTests, "ObjectiveCBridgeFromNSArrayAnyObjectToStringForced", run_ObjectiveCBridgeFromNSArrayAnyObjectToStringForced)
+addTo(&precommitTests, "ObjectiveCBridgeFromNSDictionaryAnyObject", run_ObjectiveCBridgeFromNSDictionaryAnyObject)
+addTo(&precommitTests, "ObjectiveCBridgeFromNSDictionaryAnyObjectForced", run_ObjectiveCBridgeFromNSDictionaryAnyObjectForced)
+addTo(&precommitTests, "ObjectiveCBridgeFromNSDictionaryAnyObjectToString", run_ObjectiveCBridgeFromNSDictionaryAnyObjectToString)
+addTo(&precommitTests, "ObjectiveCBridgeFromNSDictionaryAnyObjectToStringForced", run_ObjectiveCBridgeFromNSDictionaryAnyObjectToStringForced)
+addTo(&precommitTests, "ObjectiveCBridgeFromNSSetAnyObject", run_ObjectiveCBridgeFromNSSetAnyObject)
+addTo(&precommitTests, "ObjectiveCBridgeFromNSSetAnyObjectForced", run_ObjectiveCBridgeFromNSSetAnyObjectForced)
+addTo(&precommitTests, "ObjectiveCBridgeFromNSSetAnyObjectToString", run_ObjectiveCBridgeFromNSSetAnyObjectToString)
+addTo(&precommitTests, "ObjectiveCBridgeFromNSSetAnyObjectToStringForced", run_ObjectiveCBridgeFromNSSetAnyObjectToStringForced)
+addTo(&precommitTests, "ObjectiveCBridgeFromNSString", run_ObjectiveCBridgeFromNSString)
+addTo(&precommitTests, "ObjectiveCBridgeFromNSStringForced", run_ObjectiveCBridgeFromNSStringForced)
+addTo(&precommitTests, "ObjectiveCBridgeStubDataAppend", run_ObjectiveCBridgeStubDataAppend)
+addTo(&precommitTests, "ObjectiveCBridgeStubDateAccess", run_ObjectiveCBridgeStubDateAccess)
+addTo(&precommitTests, "ObjectiveCBridgeStubDateMutation", run_ObjectiveCBridgeStubDateMutation)
+addTo(&precommitTests, "ObjectiveCBridgeStubFromArrayOfNSString", run_ObjectiveCBridgeStubFromArrayOfNSString)
+addTo(&precommitTests, "ObjectiveCBridgeStubFromNSDate", run_ObjectiveCBridgeStubFromNSDate)
+addTo(&precommitTests, "ObjectiveCBridgeStubFromNSDateRef", run_ObjectiveCBridgeStubFromNSDateRef)
+addTo(&precommitTests, "ObjectiveCBridgeStubFromNSString", run_ObjectiveCBridgeStubFromNSString)
+addTo(&precommitTests, "ObjectiveCBridgeStubFromNSStringRef", run_ObjectiveCBridgeStubFromNSStringRef)
+addTo(&precommitTests, "ObjectiveCBridgeStubNSDataAppend", run_ObjectiveCBridgeStubNSDataAppend)
+addTo(&precommitTests, "ObjectiveCBridgeStubNSDateMutationRef", run_ObjectiveCBridgeStubNSDateMutationRef)
+addTo(&precommitTests, "ObjectiveCBridgeStubNSDateRefAccess", run_ObjectiveCBridgeStubNSDateRefAccess)
+addTo(&precommitTests, "ObjectiveCBridgeStubToArrayOfNSString", run_ObjectiveCBridgeStubToArrayOfNSString)
+addTo(&precommitTests, "ObjectiveCBridgeStubToNSDate", run_ObjectiveCBridgeStubToNSDate)
+addTo(&precommitTests, "ObjectiveCBridgeStubToNSDateRef", run_ObjectiveCBridgeStubToNSDateRef)
+addTo(&precommitTests, "ObjectiveCBridgeStubToNSString", run_ObjectiveCBridgeStubToNSString)
+addTo(&precommitTests, "ObjectiveCBridgeStubToNSStringRef", run_ObjectiveCBridgeStubToNSStringRef)
+addTo(&precommitTests, "ObjectiveCBridgeStubURLAppendPath", run_ObjectiveCBridgeStubURLAppendPath)
+addTo(&precommitTests, "ObjectiveCBridgeStubURLAppendPathRef", run_ObjectiveCBridgeStubURLAppendPathRef)
+addTo(&precommitTests, "ObjectiveCBridgeToNSArray", run_ObjectiveCBridgeToNSArray)
+addTo(&precommitTests, "ObjectiveCBridgeToNSDictionary", run_ObjectiveCBridgeToNSDictionary)
+addTo(&precommitTests, "ObjectiveCBridgeToNSSet", run_ObjectiveCBridgeToNSSet)
+addTo(&precommitTests, "ObjectiveCBridgeToNSString", run_ObjectiveCBridgeToNSString)
+addTo(&precommitTests, "ObserverClosure", run_ObserverClosure)
+addTo(&precommitTests, "ObserverForwarderStruct", run_ObserverForwarderStruct)
+addTo(&precommitTests, "ObserverPartiallyAppliedMethod", run_ObserverPartiallyAppliedMethod)
+addTo(&precommitTests, "ObserverUnappliedMethod", run_ObserverUnappliedMethod)
+addTo(&precommitTests, "OpenClose", run_OpenClose)
+addTo(&precommitTests, "Phonebook", run_Phonebook)
+addTo(&precommitTests, "PolymorphicCalls", run_PolymorphicCalls)
+addTo(&precommitTests, "PopFrontArray", run_PopFrontArray)
+addTo(&precommitTests, "PopFrontArrayGeneric", run_PopFrontArrayGeneric)
+addTo(&precommitTests, "PopFrontUnsafePointer", run_PopFrontUnsafePointer)
+addTo(&precommitTests, "PrefixAnyCollection", run_PrefixAnyCollection)
+addTo(&precommitTests, "PrefixAnyCollectionLazy", run_PrefixAnyCollectionLazy)
+addTo(&precommitTests, "PrefixAnySeqCRangeIter", run_PrefixAnySeqCRangeIter)
+addTo(&precommitTests, "PrefixAnySeqCRangeIterLazy", run_PrefixAnySeqCRangeIterLazy)
+addTo(&precommitTests, "PrefixAnySeqCntRange", run_PrefixAnySeqCntRange)
+addTo(&precommitTests, "PrefixAnySeqCntRangeLazy", run_PrefixAnySeqCntRangeLazy)
+addTo(&precommitTests, "PrefixAnySequence", run_PrefixAnySequence)
+addTo(&precommitTests, "PrefixAnySequenceLazy", run_PrefixAnySequenceLazy)
+addTo(&precommitTests, "PrefixArray", run_PrefixArray)
+addTo(&precommitTests, "PrefixArrayLazy", run_PrefixArrayLazy)
+addTo(&precommitTests, "PrefixCountableRange", run_PrefixCountableRange)
+addTo(&precommitTests, "PrefixCountableRangeLazy", run_PrefixCountableRangeLazy)
+addTo(&precommitTests, "PrefixSequence", run_PrefixSequence)
+addTo(&precommitTests, "PrefixSequenceLazy", run_PrefixSequenceLazy)
+addTo(&precommitTests, "PrefixWhileAnyCollection", run_PrefixWhileAnyCollection)
+addTo(&precommitTests, "PrefixWhileAnyCollectionLazy", run_PrefixWhileAnyCollectionLazy)
+addTo(&precommitTests, "PrefixWhileAnySeqCRangeIter", run_PrefixWhileAnySeqCRangeIter)
+addTo(&precommitTests, "PrefixWhileAnySeqCRangeIterLazy", run_PrefixWhileAnySeqCRangeIterLazy)
+addTo(&precommitTests, "PrefixWhileAnySeqCntRange", run_PrefixWhileAnySeqCntRange)
+addTo(&precommitTests, "PrefixWhileAnySeqCntRangeLazy", run_PrefixWhileAnySeqCntRangeLazy)
+addTo(&precommitTests, "PrefixWhileAnySequence", run_PrefixWhileAnySequence)
+addTo(&precommitTests, "PrefixWhileAnySequenceLazy", run_PrefixWhileAnySequenceLazy)
+addTo(&precommitTests, "PrefixWhileArray", run_PrefixWhileArray)
+addTo(&precommitTests, "PrefixWhileArrayLazy", run_PrefixWhileArrayLazy)
+addTo(&precommitTests, "PrefixWhileCountableRange", run_PrefixWhileCountableRange)
+addTo(&precommitTests, "PrefixWhileCountableRangeLazy", run_PrefixWhileCountableRangeLazy)
+addTo(&precommitTests, "PrefixWhileSequence", run_PrefixWhileSequence)
+addTo(&precommitTests, "PrefixWhileSequenceLazy", run_PrefixWhileSequenceLazy)
+addTo(&precommitTests, "Prims", run_Prims)
+addTo(&precommitTests, "ProtocolDispatch", run_ProtocolDispatch)
+addTo(&precommitTests, "ProtocolDispatch2", run_ProtocolDispatch2)
+addTo(&precommitTests, "RC4", run_RC4)
+addTo(&precommitTests, "RGBHistogram", run_RGBHistogram)
+addTo(&precommitTests, "RGBHistogramOfObjects", run_RGBHistogramOfObjects)
+addTo(&precommitTests, "RangeAssignment", run_RangeAssignment)
+addTo(&precommitTests, "RecursiveOwnedParameter", run_RecursiveOwnedParameter)
+addTo(&precommitTests, "ReversedArray", run_ReversedArray)
+addTo(&precommitTests, "ReversedBidirectional", run_ReversedBidirectional)
+addTo(&precommitTests, "ReversedDictionary", run_ReversedDictionary)
+addTo(&precommitTests, "SetExclusiveOr", run_SetExclusiveOr)
+addTo(&precommitTests, "SetExclusiveOr_OfObjects", run_SetExclusiveOr_OfObjects)
+addTo(&precommitTests, "SetIntersect", run_SetIntersect)
+addTo(&precommitTests, "SetIntersect_OfObjects", run_SetIntersect_OfObjects)
+addTo(&precommitTests, "SetIsSubsetOf", run_SetIsSubsetOf)
+addTo(&precommitTests, "SetIsSubsetOf_OfObjects", run_SetIsSubsetOf_OfObjects)
+addTo(&precommitTests, "SetUnion", run_SetUnion)
+addTo(&precommitTests, "SetUnion_OfObjects", run_SetUnion_OfObjects)
+addTo(&precommitTests, "SevenBoom", run_SevenBoom)
+addTo(&precommitTests, "Sim2DArray", run_Sim2DArray)
+addTo(&precommitTests, "SortLargeExistentials", run_SortLargeExistentials)
+addTo(&precommitTests, "SortLettersInPlace", run_SortLettersInPlace)
+addTo(&precommitTests, "SortSortedStrings", run_SortSortedStrings)
+addTo(&precommitTests, "SortStrings", run_SortStrings)
+addTo(&precommitTests, "SortStringsUnicode", run_SortStringsUnicode)
+addTo(&precommitTests, "StackPromo", run_StackPromo)
+addTo(&precommitTests, "StaticArray", run_StaticArray)
+addTo(&precommitTests, "StrComplexWalk", run_StrComplexWalk)
+addTo(&precommitTests, "StrToInt", run_StrToInt)
+addTo(&precommitTests, "StringAdder", run_StringAdder)
+addTo(&precommitTests, "StringBuilder", run_StringBuilder)
+addTo(&precommitTests, "StringBuilderLong", run_StringBuilderLong)
+addTo(&precommitTests, "StringEdits", run_StringEdits)
+addTo(&precommitTests, "StringEqualPointerComparison", run_StringEqualPointerComparison)
+addTo(&precommitTests, "StringHasPrefix", run_StringHasPrefix)
+addTo(&precommitTests, "StringHasPrefixUnicode", run_StringHasPrefixUnicode)
+addTo(&precommitTests, "StringHasSuffix", run_StringHasSuffix)
+addTo(&precommitTests, "StringHasSuffixUnicode", run_StringHasSuffixUnicode)
+addTo(&precommitTests, "StringInterpolation", run_StringInterpolation)
+addTo(&precommitTests, "StringMatch", run_StringMatch)
+addTo(&precommitTests, "StringUTF16Builder", run_StringUTF16Builder)
+addTo(&precommitTests, "StringWalk", run_StringWalk)
+addTo(&precommitTests, "StringWithCString", run_StringWithCString)
+addTo(&precommitTests, "SuffixAnyCollection", run_SuffixAnyCollection)
+addTo(&precommitTests, "SuffixAnyCollectionLazy", run_SuffixAnyCollectionLazy)
+addTo(&precommitTests, "SuffixAnySeqCRangeIter", run_SuffixAnySeqCRangeIter)
+addTo(&precommitTests, "SuffixAnySeqCRangeIterLazy", run_SuffixAnySeqCRangeIterLazy)
+addTo(&precommitTests, "SuffixAnySeqCntRange", run_SuffixAnySeqCntRange)
+addTo(&precommitTests, "SuffixAnySeqCntRangeLazy", run_SuffixAnySeqCntRangeLazy)
+addTo(&precommitTests, "SuffixAnySequence", run_SuffixAnySequence)
+addTo(&precommitTests, "SuffixAnySequenceLazy", run_SuffixAnySequenceLazy)
+addTo(&precommitTests, "SuffixArray", run_SuffixArray)
+addTo(&precommitTests, "SuffixArrayLazy", run_SuffixArrayLazy)
+addTo(&precommitTests, "SuffixCountableRange", run_SuffixCountableRange)
+addTo(&precommitTests, "SuffixCountableRangeLazy", run_SuffixCountableRangeLazy)
+addTo(&precommitTests, "SuffixSequence", run_SuffixSequence)
+addTo(&precommitTests, "SuffixSequenceLazy", run_SuffixSequenceLazy)
+addTo(&precommitTests, "SuperChars", run_SuperChars)
+addTo(&precommitTests, "TwoSum", run_TwoSum)
+addTo(&precommitTests, "TypeFlood", run_TypeFlood)
+addTo(&precommitTests, "UTF8Decode", run_UTF8Decode)
+addTo(&precommitTests, "Walsh", run_Walsh)
+addTo(&precommitTests, "XorLoop", run_XorLoop)
 
 // Other tests
-addOtherTest("Ackermann", run_Ackermann)
-addOtherTest("Fibonacci", run_Fibonacci)
-addOtherTest("ExistentialTestArrayConditionalShift_ClassValueBuffer1", run_ExistentialTestArrayConditionalShift_ClassValueBuffer1)
-addOtherTest("ExistentialTestArrayConditionalShift_ClassValueBuffer2", run_ExistentialTestArrayConditionalShift_ClassValueBuffer2)
-addOtherTest("ExistentialTestArrayConditionalShift_ClassValueBuffer3", run_ExistentialTestArrayConditionalShift_ClassValueBuffer3)
-addOtherTest("ExistentialTestArrayConditionalShift_ClassValueBuffer4", run_ExistentialTestArrayConditionalShift_ClassValueBuffer4)
-addOtherTest("ExistentialTestArrayConditionalShift_IntValueBuffer0", run_ExistentialTestArrayConditionalShift_IntValueBuffer0)
-addOtherTest("ExistentialTestArrayConditionalShift_IntValueBuffer1", run_ExistentialTestArrayConditionalShift_IntValueBuffer1)
-addOtherTest("ExistentialTestArrayConditionalShift_IntValueBuffer2", run_ExistentialTestArrayConditionalShift_IntValueBuffer2)
-addOtherTest("ExistentialTestArrayConditionalShift_IntValueBuffer3", run_ExistentialTestArrayConditionalShift_IntValueBuffer3)
-addOtherTest("ExistentialTestArrayConditionalShift_IntValueBuffer4", run_ExistentialTestArrayConditionalShift_IntValueBuffer4)
-addOtherTest("ExistentialTestArrayMutating_ClassValueBuffer1", run_ExistentialTestArrayMutating_ClassValueBuffer1)
-addOtherTest("ExistentialTestArrayMutating_ClassValueBuffer2", run_ExistentialTestArrayMutating_ClassValueBuffer2)
-addOtherTest("ExistentialTestArrayMutating_ClassValueBuffer3", run_ExistentialTestArrayMutating_ClassValueBuffer3)
-addOtherTest("ExistentialTestArrayMutating_ClassValueBuffer4", run_ExistentialTestArrayMutating_ClassValueBuffer4)
-addOtherTest("ExistentialTestArrayMutating_IntValueBuffer0", run_ExistentialTestArrayMutating_IntValueBuffer0)
-addOtherTest("ExistentialTestArrayMutating_IntValueBuffer1", run_ExistentialTestArrayMutating_IntValueBuffer1)
-addOtherTest("ExistentialTestArrayMutating_IntValueBuffer2", run_ExistentialTestArrayMutating_IntValueBuffer2)
-addOtherTest("ExistentialTestArrayMutating_IntValueBuffer3", run_ExistentialTestArrayMutating_IntValueBuffer3)
-addOtherTest("ExistentialTestArrayMutating_IntValueBuffer4", run_ExistentialTestArrayMutating_IntValueBuffer4)
-addOtherTest("ExistentialTestArrayOneMethodCall_ClassValueBuffer1", run_ExistentialTestArrayOneMethodCall_ClassValueBuffer1)
-addOtherTest("ExistentialTestArrayOneMethodCall_ClassValueBuffer2", run_ExistentialTestArrayOneMethodCall_ClassValueBuffer2)
-addOtherTest("ExistentialTestArrayOneMethodCall_ClassValueBuffer3", run_ExistentialTestArrayOneMethodCall_ClassValueBuffer3)
-addOtherTest("ExistentialTestArrayOneMethodCall_ClassValueBuffer4", run_ExistentialTestArrayOneMethodCall_ClassValueBuffer4)
-addOtherTest("ExistentialTestArrayOneMethodCall_IntValueBuffer0", run_ExistentialTestArrayOneMethodCall_IntValueBuffer0)
-addOtherTest("ExistentialTestArrayOneMethodCall_IntValueBuffer1", run_ExistentialTestArrayOneMethodCall_IntValueBuffer1)
-addOtherTest("ExistentialTestArrayOneMethodCall_IntValueBuffer2", run_ExistentialTestArrayOneMethodCall_IntValueBuffer2)
-addOtherTest("ExistentialTestArrayOneMethodCall_IntValueBuffer3", run_ExistentialTestArrayOneMethodCall_IntValueBuffer3)
-addOtherTest("ExistentialTestArrayOneMethodCall_IntValueBuffer4", run_ExistentialTestArrayOneMethodCall_IntValueBuffer4)
-addOtherTest("ExistentialTestArrayShift_ClassValueBuffer1", run_ExistentialTestArrayShift_ClassValueBuffer1)
-addOtherTest("ExistentialTestArrayShift_ClassValueBuffer2", run_ExistentialTestArrayShift_ClassValueBuffer2)
-addOtherTest("ExistentialTestArrayShift_ClassValueBuffer3", run_ExistentialTestArrayShift_ClassValueBuffer3)
-addOtherTest("ExistentialTestArrayShift_ClassValueBuffer4", run_ExistentialTestArrayShift_ClassValueBuffer4)
-addOtherTest("ExistentialTestArrayShift_IntValueBuffer0", run_ExistentialTestArrayShift_IntValueBuffer0)
-addOtherTest("ExistentialTestArrayShift_IntValueBuffer1", run_ExistentialTestArrayShift_IntValueBuffer1)
-addOtherTest("ExistentialTestArrayShift_IntValueBuffer2", run_ExistentialTestArrayShift_IntValueBuffer2)
-addOtherTest("ExistentialTestArrayShift_IntValueBuffer3", run_ExistentialTestArrayShift_IntValueBuffer3)
-addOtherTest("ExistentialTestArrayShift_IntValueBuffer4", run_ExistentialTestArrayShift_IntValueBuffer4)
-addOtherTest("ExistentialTestArrayTwoMethodCalls_ClassValueBuffer1", run_ExistentialTestArrayTwoMethodCalls_ClassValueBuffer1)
-addOtherTest("ExistentialTestArrayTwoMethodCalls_ClassValueBuffer2", run_ExistentialTestArrayTwoMethodCalls_ClassValueBuffer2)
-addOtherTest("ExistentialTestArrayTwoMethodCalls_ClassValueBuffer3", run_ExistentialTestArrayTwoMethodCalls_ClassValueBuffer3)
-addOtherTest("ExistentialTestArrayTwoMethodCalls_ClassValueBuffer4", run_ExistentialTestArrayTwoMethodCalls_ClassValueBuffer4)
-addOtherTest("ExistentialTestArrayTwoMethodCalls_IntValueBuffer0", run_ExistentialTestArrayTwoMethodCalls_IntValueBuffer0)
-addOtherTest("ExistentialTestArrayTwoMethodCalls_IntValueBuffer1", run_ExistentialTestArrayTwoMethodCalls_IntValueBuffer1)
-addOtherTest("ExistentialTestArrayTwoMethodCalls_IntValueBuffer2", run_ExistentialTestArrayTwoMethodCalls_IntValueBuffer2)
-addOtherTest("ExistentialTestArrayTwoMethodCalls_IntValueBuffer3", run_ExistentialTestArrayTwoMethodCalls_IntValueBuffer3)
-addOtherTest("ExistentialTestArrayTwoMethodCalls_IntValueBuffer4", run_ExistentialTestArrayTwoMethodCalls_IntValueBuffer4)
-addOtherTest("ExistentialTestMutatingAndNonMutating_ClassValueBuffer1", run_ExistentialTestMutatingAndNonMutating_ClassValueBuffer1)
-addOtherTest("ExistentialTestMutatingAndNonMutating_ClassValueBuffer2", run_ExistentialTestMutatingAndNonMutating_ClassValueBuffer2)
-addOtherTest("ExistentialTestMutatingAndNonMutating_ClassValueBuffer3", run_ExistentialTestMutatingAndNonMutating_ClassValueBuffer3)
-addOtherTest("ExistentialTestMutatingAndNonMutating_ClassValueBuffer4", run_ExistentialTestMutatingAndNonMutating_ClassValueBuffer4)
-addOtherTest("ExistentialTestMutatingAndNonMutating_IntValueBuffer0", run_ExistentialTestMutatingAndNonMutating_IntValueBuffer0)
-addOtherTest("ExistentialTestMutatingAndNonMutating_IntValueBuffer1", run_ExistentialTestMutatingAndNonMutating_IntValueBuffer1)
-addOtherTest("ExistentialTestMutatingAndNonMutating_IntValueBuffer2", run_ExistentialTestMutatingAndNonMutating_IntValueBuffer2)
-addOtherTest("ExistentialTestMutatingAndNonMutating_IntValueBuffer3", run_ExistentialTestMutatingAndNonMutating_IntValueBuffer3)
-addOtherTest("ExistentialTestMutatingAndNonMutating_IntValueBuffer4", run_ExistentialTestMutatingAndNonMutating_IntValueBuffer4)
-addOtherTest("ExistentialTestMutating_ClassValueBuffer1", run_ExistentialTestMutating_ClassValueBuffer1)
-addOtherTest("ExistentialTestMutating_ClassValueBuffer2", run_ExistentialTestMutating_ClassValueBuffer2)
-addOtherTest("ExistentialTestMutating_ClassValueBuffer3", run_ExistentialTestMutating_ClassValueBuffer3)
-addOtherTest("ExistentialTestMutating_ClassValueBuffer4", run_ExistentialTestMutating_ClassValueBuffer4)
-addOtherTest("ExistentialTestMutating_IntValueBuffer0", run_ExistentialTestMutating_IntValueBuffer0)
-addOtherTest("ExistentialTestMutating_IntValueBuffer1", run_ExistentialTestMutating_IntValueBuffer1)
-addOtherTest("ExistentialTestMutating_IntValueBuffer2", run_ExistentialTestMutating_IntValueBuffer2)
-addOtherTest("ExistentialTestMutating_IntValueBuffer3", run_ExistentialTestMutating_IntValueBuffer3)
-addOtherTest("ExistentialTestMutating_IntValueBuffer4", run_ExistentialTestMutating_IntValueBuffer4)
-addOtherTest("ExistentialTestOneMethodCall_ClassValueBuffer1", run_ExistentialTestOneMethodCall_ClassValueBuffer1)
-addOtherTest("ExistentialTestOneMethodCall_ClassValueBuffer2", run_ExistentialTestOneMethodCall_ClassValueBuffer2)
-addOtherTest("ExistentialTestOneMethodCall_ClassValueBuffer3", run_ExistentialTestOneMethodCall_ClassValueBuffer3)
-addOtherTest("ExistentialTestOneMethodCall_ClassValueBuffer4", run_ExistentialTestOneMethodCall_ClassValueBuffer4)
-addOtherTest("ExistentialTestOneMethodCall_IntValueBuffer0", run_ExistentialTestOneMethodCall_IntValueBuffer0)
-addOtherTest("ExistentialTestOneMethodCall_IntValueBuffer1", run_ExistentialTestOneMethodCall_IntValueBuffer1)
-addOtherTest("ExistentialTestOneMethodCall_IntValueBuffer2", run_ExistentialTestOneMethodCall_IntValueBuffer2)
-addOtherTest("ExistentialTestOneMethodCall_IntValueBuffer3", run_ExistentialTestOneMethodCall_IntValueBuffer3)
-addOtherTest("ExistentialTestOneMethodCall_IntValueBuffer4", run_ExistentialTestOneMethodCall_IntValueBuffer4)
-addOtherTest("ExistentialTestPassExistentialOneMethodCall_ClassValueBuffer1", run_ExistentialTestPassExistentialOneMethodCall_ClassValueBuffer1)
-addOtherTest("ExistentialTestPassExistentialOneMethodCall_ClassValueBuffer2", run_ExistentialTestPassExistentialOneMethodCall_ClassValueBuffer2)
-addOtherTest("ExistentialTestPassExistentialOneMethodCall_ClassValueBuffer3", run_ExistentialTestPassExistentialOneMethodCall_ClassValueBuffer3)
-addOtherTest("ExistentialTestPassExistentialOneMethodCall_ClassValueBuffer4", run_ExistentialTestPassExistentialOneMethodCall_ClassValueBuffer4)
-addOtherTest("ExistentialTestPassExistentialOneMethodCall_IntValueBuffer0", run_ExistentialTestPassExistentialOneMethodCall_IntValueBuffer0)
-addOtherTest("ExistentialTestPassExistentialOneMethodCall_IntValueBuffer1", run_ExistentialTestPassExistentialOneMethodCall_IntValueBuffer1)
-addOtherTest("ExistentialTestPassExistentialOneMethodCall_IntValueBuffer2", run_ExistentialTestPassExistentialOneMethodCall_IntValueBuffer2)
-addOtherTest("ExistentialTestPassExistentialOneMethodCall_IntValueBuffer3", run_ExistentialTestPassExistentialOneMethodCall_IntValueBuffer3)
-addOtherTest("ExistentialTestPassExistentialOneMethodCall_IntValueBuffer4", run_ExistentialTestPassExistentialOneMethodCall_IntValueBuffer4)
-addOtherTest("ExistentialTestPassExistentialTwoMethodCalls_ClassValueBuffer1", run_ExistentialTestPassExistentialTwoMethodCalls_ClassValueBuffer1)
-addOtherTest("ExistentialTestPassExistentialTwoMethodCalls_ClassValueBuffer2", run_ExistentialTestPassExistentialTwoMethodCalls_ClassValueBuffer2)
-addOtherTest("ExistentialTestPassExistentialTwoMethodCalls_ClassValueBuffer3", run_ExistentialTestPassExistentialTwoMethodCalls_ClassValueBuffer3)
-addOtherTest("ExistentialTestPassExistentialTwoMethodCalls_ClassValueBuffer4", run_ExistentialTestPassExistentialTwoMethodCalls_ClassValueBuffer4)
-addOtherTest("ExistentialTestPassExistentialTwoMethodCalls_IntValueBuffer0", run_ExistentialTestPassExistentialTwoMethodCalls_IntValueBuffer0)
-addOtherTest("ExistentialTestPassExistentialTwoMethodCalls_IntValueBuffer1", run_ExistentialTestPassExistentialTwoMethodCalls_IntValueBuffer1)
-addOtherTest("ExistentialTestPassExistentialTwoMethodCalls_IntValueBuffer2", run_ExistentialTestPassExistentialTwoMethodCalls_IntValueBuffer2)
-addOtherTest("ExistentialTestPassExistentialTwoMethodCalls_IntValueBuffer3", run_ExistentialTestPassExistentialTwoMethodCalls_IntValueBuffer3)
-addOtherTest("ExistentialTestPassExistentialTwoMethodCalls_IntValueBuffer4", run_ExistentialTestPassExistentialTwoMethodCalls_IntValueBuffer4)
-addOtherTest("ExistentialTestTwoMethodCalls_ClassValueBuffer1", run_ExistentialTestTwoMethodCalls_ClassValueBuffer1)
-addOtherTest("ExistentialTestTwoMethodCalls_ClassValueBuffer2", run_ExistentialTestTwoMethodCalls_ClassValueBuffer2)
-addOtherTest("ExistentialTestTwoMethodCalls_ClassValueBuffer3", run_ExistentialTestTwoMethodCalls_ClassValueBuffer3)
-addOtherTest("ExistentialTestTwoMethodCalls_ClassValueBuffer4", run_ExistentialTestTwoMethodCalls_ClassValueBuffer4)
-addOtherTest("ExistentialTestTwoMethodCalls_IntValueBuffer0", run_ExistentialTestTwoMethodCalls_IntValueBuffer0)
-addOtherTest("ExistentialTestTwoMethodCalls_IntValueBuffer1", run_ExistentialTestTwoMethodCalls_IntValueBuffer1)
-addOtherTest("ExistentialTestTwoMethodCalls_IntValueBuffer2", run_ExistentialTestTwoMethodCalls_IntValueBuffer2)
-addOtherTest("ExistentialTestTwoMethodCalls_IntValueBuffer3", run_ExistentialTestTwoMethodCalls_IntValueBuffer3)
-addOtherTest("ExistentialTestTwoMethodCalls_IntValueBuffer4", run_ExistentialTestTwoMethodCalls_IntValueBuffer4)
+addTo(&otherTests, "Ackermann", run_Ackermann)
+addTo(&otherTests, "ExistentialTestArrayConditionalShift_ClassValueBuffer1", run_ExistentialTestArrayConditionalShift_ClassValueBuffer1)
+addTo(&otherTests, "ExistentialTestArrayConditionalShift_ClassValueBuffer2", run_ExistentialTestArrayConditionalShift_ClassValueBuffer2)
+addTo(&otherTests, "ExistentialTestArrayConditionalShift_ClassValueBuffer3", run_ExistentialTestArrayConditionalShift_ClassValueBuffer3)
+addTo(&otherTests, "ExistentialTestArrayConditionalShift_ClassValueBuffer4", run_ExistentialTestArrayConditionalShift_ClassValueBuffer4)
+addTo(&otherTests, "ExistentialTestArrayConditionalShift_IntValueBuffer0", run_ExistentialTestArrayConditionalShift_IntValueBuffer0)
+addTo(&otherTests, "ExistentialTestArrayConditionalShift_IntValueBuffer1", run_ExistentialTestArrayConditionalShift_IntValueBuffer1)
+addTo(&otherTests, "ExistentialTestArrayConditionalShift_IntValueBuffer2", run_ExistentialTestArrayConditionalShift_IntValueBuffer2)
+addTo(&otherTests, "ExistentialTestArrayConditionalShift_IntValueBuffer3", run_ExistentialTestArrayConditionalShift_IntValueBuffer3)
+addTo(&otherTests, "ExistentialTestArrayConditionalShift_IntValueBuffer4", run_ExistentialTestArrayConditionalShift_IntValueBuffer4)
+addTo(&otherTests, "ExistentialTestArrayMutating_ClassValueBuffer1", run_ExistentialTestArrayMutating_ClassValueBuffer1)
+addTo(&otherTests, "ExistentialTestArrayMutating_ClassValueBuffer2", run_ExistentialTestArrayMutating_ClassValueBuffer2)
+addTo(&otherTests, "ExistentialTestArrayMutating_ClassValueBuffer3", run_ExistentialTestArrayMutating_ClassValueBuffer3)
+addTo(&otherTests, "ExistentialTestArrayMutating_ClassValueBuffer4", run_ExistentialTestArrayMutating_ClassValueBuffer4)
+addTo(&otherTests, "ExistentialTestArrayMutating_IntValueBuffer0", run_ExistentialTestArrayMutating_IntValueBuffer0)
+addTo(&otherTests, "ExistentialTestArrayMutating_IntValueBuffer1", run_ExistentialTestArrayMutating_IntValueBuffer1)
+addTo(&otherTests, "ExistentialTestArrayMutating_IntValueBuffer2", run_ExistentialTestArrayMutating_IntValueBuffer2)
+addTo(&otherTests, "ExistentialTestArrayMutating_IntValueBuffer3", run_ExistentialTestArrayMutating_IntValueBuffer3)
+addTo(&otherTests, "ExistentialTestArrayMutating_IntValueBuffer4", run_ExistentialTestArrayMutating_IntValueBuffer4)
+addTo(&otherTests, "ExistentialTestArrayOneMethodCall_ClassValueBuffer1", run_ExistentialTestArrayOneMethodCall_ClassValueBuffer1)
+addTo(&otherTests, "ExistentialTestArrayOneMethodCall_ClassValueBuffer2", run_ExistentialTestArrayOneMethodCall_ClassValueBuffer2)
+addTo(&otherTests, "ExistentialTestArrayOneMethodCall_ClassValueBuffer3", run_ExistentialTestArrayOneMethodCall_ClassValueBuffer3)
+addTo(&otherTests, "ExistentialTestArrayOneMethodCall_ClassValueBuffer4", run_ExistentialTestArrayOneMethodCall_ClassValueBuffer4)
+addTo(&otherTests, "ExistentialTestArrayOneMethodCall_IntValueBuffer0", run_ExistentialTestArrayOneMethodCall_IntValueBuffer0)
+addTo(&otherTests, "ExistentialTestArrayOneMethodCall_IntValueBuffer1", run_ExistentialTestArrayOneMethodCall_IntValueBuffer1)
+addTo(&otherTests, "ExistentialTestArrayOneMethodCall_IntValueBuffer2", run_ExistentialTestArrayOneMethodCall_IntValueBuffer2)
+addTo(&otherTests, "ExistentialTestArrayOneMethodCall_IntValueBuffer3", run_ExistentialTestArrayOneMethodCall_IntValueBuffer3)
+addTo(&otherTests, "ExistentialTestArrayOneMethodCall_IntValueBuffer4", run_ExistentialTestArrayOneMethodCall_IntValueBuffer4)
+addTo(&otherTests, "ExistentialTestArrayShift_ClassValueBuffer1", run_ExistentialTestArrayShift_ClassValueBuffer1)
+addTo(&otherTests, "ExistentialTestArrayShift_ClassValueBuffer2", run_ExistentialTestArrayShift_ClassValueBuffer2)
+addTo(&otherTests, "ExistentialTestArrayShift_ClassValueBuffer3", run_ExistentialTestArrayShift_ClassValueBuffer3)
+addTo(&otherTests, "ExistentialTestArrayShift_ClassValueBuffer4", run_ExistentialTestArrayShift_ClassValueBuffer4)
+addTo(&otherTests, "ExistentialTestArrayShift_IntValueBuffer0", run_ExistentialTestArrayShift_IntValueBuffer0)
+addTo(&otherTests, "ExistentialTestArrayShift_IntValueBuffer1", run_ExistentialTestArrayShift_IntValueBuffer1)
+addTo(&otherTests, "ExistentialTestArrayShift_IntValueBuffer2", run_ExistentialTestArrayShift_IntValueBuffer2)
+addTo(&otherTests, "ExistentialTestArrayShift_IntValueBuffer3", run_ExistentialTestArrayShift_IntValueBuffer3)
+addTo(&otherTests, "ExistentialTestArrayShift_IntValueBuffer4", run_ExistentialTestArrayShift_IntValueBuffer4)
+addTo(&otherTests, "ExistentialTestArrayTwoMethodCalls_ClassValueBuffer1", run_ExistentialTestArrayTwoMethodCalls_ClassValueBuffer1)
+addTo(&otherTests, "ExistentialTestArrayTwoMethodCalls_ClassValueBuffer2", run_ExistentialTestArrayTwoMethodCalls_ClassValueBuffer2)
+addTo(&otherTests, "ExistentialTestArrayTwoMethodCalls_ClassValueBuffer3", run_ExistentialTestArrayTwoMethodCalls_ClassValueBuffer3)
+addTo(&otherTests, "ExistentialTestArrayTwoMethodCalls_ClassValueBuffer4", run_ExistentialTestArrayTwoMethodCalls_ClassValueBuffer4)
+addTo(&otherTests, "ExistentialTestArrayTwoMethodCalls_IntValueBuffer0", run_ExistentialTestArrayTwoMethodCalls_IntValueBuffer0)
+addTo(&otherTests, "ExistentialTestArrayTwoMethodCalls_IntValueBuffer1", run_ExistentialTestArrayTwoMethodCalls_IntValueBuffer1)
+addTo(&otherTests, "ExistentialTestArrayTwoMethodCalls_IntValueBuffer2", run_ExistentialTestArrayTwoMethodCalls_IntValueBuffer2)
+addTo(&otherTests, "ExistentialTestArrayTwoMethodCalls_IntValueBuffer3", run_ExistentialTestArrayTwoMethodCalls_IntValueBuffer3)
+addTo(&otherTests, "ExistentialTestArrayTwoMethodCalls_IntValueBuffer4", run_ExistentialTestArrayTwoMethodCalls_IntValueBuffer4)
+addTo(&otherTests, "ExistentialTestMutatingAndNonMutating_ClassValueBuffer1", run_ExistentialTestMutatingAndNonMutating_ClassValueBuffer1)
+addTo(&otherTests, "ExistentialTestMutatingAndNonMutating_ClassValueBuffer2", run_ExistentialTestMutatingAndNonMutating_ClassValueBuffer2)
+addTo(&otherTests, "ExistentialTestMutatingAndNonMutating_ClassValueBuffer3", run_ExistentialTestMutatingAndNonMutating_ClassValueBuffer3)
+addTo(&otherTests, "ExistentialTestMutatingAndNonMutating_ClassValueBuffer4", run_ExistentialTestMutatingAndNonMutating_ClassValueBuffer4)
+addTo(&otherTests, "ExistentialTestMutatingAndNonMutating_IntValueBuffer0", run_ExistentialTestMutatingAndNonMutating_IntValueBuffer0)
+addTo(&otherTests, "ExistentialTestMutatingAndNonMutating_IntValueBuffer1", run_ExistentialTestMutatingAndNonMutating_IntValueBuffer1)
+addTo(&otherTests, "ExistentialTestMutatingAndNonMutating_IntValueBuffer2", run_ExistentialTestMutatingAndNonMutating_IntValueBuffer2)
+addTo(&otherTests, "ExistentialTestMutatingAndNonMutating_IntValueBuffer3", run_ExistentialTestMutatingAndNonMutating_IntValueBuffer3)
+addTo(&otherTests, "ExistentialTestMutatingAndNonMutating_IntValueBuffer4", run_ExistentialTestMutatingAndNonMutating_IntValueBuffer4)
+addTo(&otherTests, "ExistentialTestMutating_ClassValueBuffer1", run_ExistentialTestMutating_ClassValueBuffer1)
+addTo(&otherTests, "ExistentialTestMutating_ClassValueBuffer2", run_ExistentialTestMutating_ClassValueBuffer2)
+addTo(&otherTests, "ExistentialTestMutating_ClassValueBuffer3", run_ExistentialTestMutating_ClassValueBuffer3)
+addTo(&otherTests, "ExistentialTestMutating_ClassValueBuffer4", run_ExistentialTestMutating_ClassValueBuffer4)
+addTo(&otherTests, "ExistentialTestMutating_IntValueBuffer0", run_ExistentialTestMutating_IntValueBuffer0)
+addTo(&otherTests, "ExistentialTestMutating_IntValueBuffer1", run_ExistentialTestMutating_IntValueBuffer1)
+addTo(&otherTests, "ExistentialTestMutating_IntValueBuffer2", run_ExistentialTestMutating_IntValueBuffer2)
+addTo(&otherTests, "ExistentialTestMutating_IntValueBuffer3", run_ExistentialTestMutating_IntValueBuffer3)
+addTo(&otherTests, "ExistentialTestMutating_IntValueBuffer4", run_ExistentialTestMutating_IntValueBuffer4)
+addTo(&otherTests, "ExistentialTestOneMethodCall_ClassValueBuffer1", run_ExistentialTestOneMethodCall_ClassValueBuffer1)
+addTo(&otherTests, "ExistentialTestOneMethodCall_ClassValueBuffer2", run_ExistentialTestOneMethodCall_ClassValueBuffer2)
+addTo(&otherTests, "ExistentialTestOneMethodCall_ClassValueBuffer3", run_ExistentialTestOneMethodCall_ClassValueBuffer3)
+addTo(&otherTests, "ExistentialTestOneMethodCall_ClassValueBuffer4", run_ExistentialTestOneMethodCall_ClassValueBuffer4)
+addTo(&otherTests, "ExistentialTestOneMethodCall_IntValueBuffer0", run_ExistentialTestOneMethodCall_IntValueBuffer0)
+addTo(&otherTests, "ExistentialTestOneMethodCall_IntValueBuffer1", run_ExistentialTestOneMethodCall_IntValueBuffer1)
+addTo(&otherTests, "ExistentialTestOneMethodCall_IntValueBuffer2", run_ExistentialTestOneMethodCall_IntValueBuffer2)
+addTo(&otherTests, "ExistentialTestOneMethodCall_IntValueBuffer3", run_ExistentialTestOneMethodCall_IntValueBuffer3)
+addTo(&otherTests, "ExistentialTestOneMethodCall_IntValueBuffer4", run_ExistentialTestOneMethodCall_IntValueBuffer4)
+addTo(&otherTests, "ExistentialTestPassExistentialOneMethodCall_ClassValueBuffer1", run_ExistentialTestPassExistentialOneMethodCall_ClassValueBuffer1)
+addTo(&otherTests, "ExistentialTestPassExistentialOneMethodCall_ClassValueBuffer2", run_ExistentialTestPassExistentialOneMethodCall_ClassValueBuffer2)
+addTo(&otherTests, "ExistentialTestPassExistentialOneMethodCall_ClassValueBuffer3", run_ExistentialTestPassExistentialOneMethodCall_ClassValueBuffer3)
+addTo(&otherTests, "ExistentialTestPassExistentialOneMethodCall_ClassValueBuffer4", run_ExistentialTestPassExistentialOneMethodCall_ClassValueBuffer4)
+addTo(&otherTests, "ExistentialTestPassExistentialOneMethodCall_IntValueBuffer0", run_ExistentialTestPassExistentialOneMethodCall_IntValueBuffer0)
+addTo(&otherTests, "ExistentialTestPassExistentialOneMethodCall_IntValueBuffer1", run_ExistentialTestPassExistentialOneMethodCall_IntValueBuffer1)
+addTo(&otherTests, "ExistentialTestPassExistentialOneMethodCall_IntValueBuffer2", run_ExistentialTestPassExistentialOneMethodCall_IntValueBuffer2)
+addTo(&otherTests, "ExistentialTestPassExistentialOneMethodCall_IntValueBuffer3", run_ExistentialTestPassExistentialOneMethodCall_IntValueBuffer3)
+addTo(&otherTests, "ExistentialTestPassExistentialOneMethodCall_IntValueBuffer4", run_ExistentialTestPassExistentialOneMethodCall_IntValueBuffer4)
+addTo(&otherTests, "ExistentialTestPassExistentialTwoMethodCalls_ClassValueBuffer1", run_ExistentialTestPassExistentialTwoMethodCalls_ClassValueBuffer1)
+addTo(&otherTests, "ExistentialTestPassExistentialTwoMethodCalls_ClassValueBuffer2", run_ExistentialTestPassExistentialTwoMethodCalls_ClassValueBuffer2)
+addTo(&otherTests, "ExistentialTestPassExistentialTwoMethodCalls_ClassValueBuffer3", run_ExistentialTestPassExistentialTwoMethodCalls_ClassValueBuffer3)
+addTo(&otherTests, "ExistentialTestPassExistentialTwoMethodCalls_ClassValueBuffer4", run_ExistentialTestPassExistentialTwoMethodCalls_ClassValueBuffer4)
+addTo(&otherTests, "ExistentialTestPassExistentialTwoMethodCalls_IntValueBuffer0", run_ExistentialTestPassExistentialTwoMethodCalls_IntValueBuffer0)
+addTo(&otherTests, "ExistentialTestPassExistentialTwoMethodCalls_IntValueBuffer1", run_ExistentialTestPassExistentialTwoMethodCalls_IntValueBuffer1)
+addTo(&otherTests, "ExistentialTestPassExistentialTwoMethodCalls_IntValueBuffer2", run_ExistentialTestPassExistentialTwoMethodCalls_IntValueBuffer2)
+addTo(&otherTests, "ExistentialTestPassExistentialTwoMethodCalls_IntValueBuffer3", run_ExistentialTestPassExistentialTwoMethodCalls_IntValueBuffer3)
+addTo(&otherTests, "ExistentialTestPassExistentialTwoMethodCalls_IntValueBuffer4", run_ExistentialTestPassExistentialTwoMethodCalls_IntValueBuffer4)
+addTo(&otherTests, "ExistentialTestTwoMethodCalls_ClassValueBuffer1", run_ExistentialTestTwoMethodCalls_ClassValueBuffer1)
+addTo(&otherTests, "ExistentialTestTwoMethodCalls_ClassValueBuffer2", run_ExistentialTestTwoMethodCalls_ClassValueBuffer2)
+addTo(&otherTests, "ExistentialTestTwoMethodCalls_ClassValueBuffer3", run_ExistentialTestTwoMethodCalls_ClassValueBuffer3)
+addTo(&otherTests, "ExistentialTestTwoMethodCalls_ClassValueBuffer4", run_ExistentialTestTwoMethodCalls_ClassValueBuffer4)
+addTo(&otherTests, "ExistentialTestTwoMethodCalls_IntValueBuffer0", run_ExistentialTestTwoMethodCalls_IntValueBuffer0)
+addTo(&otherTests, "ExistentialTestTwoMethodCalls_IntValueBuffer1", run_ExistentialTestTwoMethodCalls_IntValueBuffer1)
+addTo(&otherTests, "ExistentialTestTwoMethodCalls_IntValueBuffer2", run_ExistentialTestTwoMethodCalls_IntValueBuffer2)
+addTo(&otherTests, "ExistentialTestTwoMethodCalls_IntValueBuffer3", run_ExistentialTestTwoMethodCalls_IntValueBuffer3)
+addTo(&otherTests, "ExistentialTestTwoMethodCalls_IntValueBuffer4", run_ExistentialTestTwoMethodCalls_IntValueBuffer4)
+addTo(&otherTests, "Fibonacci", run_Fibonacci)
 
 // String tests, an extended benchmark suite exercising finer-granularity
 // behavior of our Strings.
-addStringTest("StringWalkASCIIScalars", run_StringWalkASCIIScalars)
-addStringTest("StringWalkASCIICharacters", run_StringWalkASCIICharacters)
-addStringTest("StringWalkUnicodeScalars", run_StringWalkUnicodeScalars)
-addStringTest("StringWalkUnicodeCharacters", run_StringWalkUnicodeCharacters)
-addStringTest("StringWalkMixedScalars", run_StringWalkMixedScalars)
-addStringTest("StringWalkMixedCharacters", run_StringWalkMixedCharacters)
-addStringTest("StringWalkASCIIScalarsBackwards", run_StringWalkASCIIScalarsBackwards)
-addStringTest("StringWalkASCIICharactersBackwards", run_StringWalkASCIICharactersBackwards)
-addStringTest("StringWalkUnicodeScalarsBackwards", run_StringWalkUnicodeScalarsBackwards)
-addStringTest("StringWalkUnicodeCharactersBackwards", run_StringWalkUnicodeCharactersBackwards)
-addStringTest("StringWalkMixedScalarsBackwards", run_StringWalkMixedScalarsBackwards)
-addStringTest("StringWalkMixedCharactersBackwards", run_StringWalkMixedCharactersBackwards)
+addTo(&stringTests, "StringWalkASCIICharacters", run_StringWalkASCIICharacters)
+addTo(&stringTests, "StringWalkASCIICharactersBackwards", run_StringWalkASCIICharactersBackwards)
+addTo(&stringTests, "StringWalkASCIIScalars", run_StringWalkASCIIScalars)
+addTo(&stringTests, "StringWalkASCIIScalarsBackwards", run_StringWalkASCIIScalarsBackwards)
+addTo(&stringTests, "StringWalkMixedCharacters", run_StringWalkMixedCharacters)
+addTo(&stringTests, "StringWalkMixedCharactersBackwards", run_StringWalkMixedCharactersBackwards)
+addTo(&stringTests, "StringWalkMixedScalars", run_StringWalkMixedScalars)
+addTo(&stringTests, "StringWalkMixedScalarsBackwards", run_StringWalkMixedScalarsBackwards)
+addTo(&stringTests, "StringWalkUnicodeCharacters", run_StringWalkUnicodeCharacters)
+addTo(&stringTests, "StringWalkUnicodeCharactersBackwards", run_StringWalkUnicodeCharactersBackwards)
+addTo(&stringTests, "StringWalkUnicodeScalars", run_StringWalkUnicodeScalars)
+addTo(&stringTests, "StringWalkUnicodeScalarsBackwards", run_StringWalkUnicodeScalarsBackwards)
 
 main()
diff --git a/benchmark/utils/main.swift.gyb b/benchmark/utils/main.swift.gyb
new file mode 100644
index 0000000..9dfdf2c
--- /dev/null
+++ b/benchmark/utils/main.swift.gyb
@@ -0,0 +1,89 @@
+//===--- main.swift -------------------------------------------*- swift -*-===//
+//
+// 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
+//
+//===----------------------------------------------------------------------===//
+
+% # Ignore the following warning. This _is_ the correct file to edit.
+////////////////////////////////////////////////////////////////////////////////
+// WARNING: This file is manually generated from .gyb template and should not
+// be directly modified. Instead, make changes to main.swift.gyb and run
+// scripts/generate_harness/generate_harness.py to regenerate this file.
+////////////////////////////////////////////////////////////////////////////////
+%{
+from gyb_benchmark_support import (
+    tests,
+    multisource_benches,
+    all_run_funcs
+)
+
+import re
+
+imports = sorted(tests + [msb.name for msb in multisource_benches])
+
+# The list of all "run_" functions is split into 3 test suites.
+# By default all tests belong to the "precommit" test suite.
+# Functions that match the following regular expressions will be in the "other"
+# and "string" test suites.
+
+other_re = [
+    "Ackermann",
+    "Fibonacci",
+    "ExistentialTest.+"
+]
+
+string_re = [
+    "StringWalk.+",
+]
+
+def matches(included_regexes, run_func):
+  for regexp in included_regexes:
+    if re.match(regexp, run_func):
+      return True
+  return False
+
+other_tests = filter(lambda x: matches(other_re, x), all_run_funcs)
+string_tests = filter(lambda x: matches(string_re, x), all_run_funcs)
+ignored_run_funcs = other_tests + string_tests
+run_funcs = filter(lambda x: x not in ignored_run_funcs, all_run_funcs)
+}%
+
+// This is just a driver for performance overview tests.
+import TestsUtils
+import DriverUtils
+% for IMPORT in imports:
+import ${IMPORT}
+% end
+
+@inline(__always)
+private func addTo(
+  _ testSuite: inout [String : (Int) -> ()],
+  _ name: String,
+  _ function: @escaping (Int) -> ()
+) {
+  testSuite[name] = function
+}
+
+// The main test suite: precommit tests
+% for run_func in run_funcs:
+addTo(&precommitTests, "${run_func}", run_${run_func})
+% end
+
+// Other tests
+% for test_name in other_tests:
+addTo(&otherTests, "${test_name }", run_${test_name})
+% end
+
+// String tests, an extended benchmark suite exercising finer-granularity
+// behavior of our Strings.
+% for test_name in string_tests:
+addTo(&stringTests, "${test_name}", run_${test_name})
+% end
+
+main()
diff --git a/utils/gyb_benchmark_support.py b/utils/gyb_benchmark_support.py
new file mode 100644
index 0000000..f9cfa88
--- /dev/null
+++ b/utils/gyb_benchmark_support.py
@@ -0,0 +1,59 @@
+# ===--- 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(perf_dir, '.swift')
+    return sorted([func for f in swift_files for func in get_run_funcs(f)])
+
+
+all_run_funcs = find_run_funcs()