public Result run(ExecutorService executorService) {
        List<SmithyDiffTestCase.Result> failedResults = Collections.synchronizedList(new ArrayList<>());
        List<Callable<SmithyDiffTestCase.Result>> callables = testCaseCallables().collect(Collectors.toList());

        try {
            for (Future<SmithyDiffTestCase.Result> future : executorService.invokeAll(callables)) {
                SmithyDiffTestCase.Result testCaseResult = waitOnFuture(future);
                if (testCaseResult.isInvalid()) {
                    failedResults.add(testCaseResult);
                }
            }

            Result result = new Result(callables.size() - failedResults.size(), failedResults);
            if (failedResults.isEmpty()) {
                return result;
            }

            throw new Error(result);
        } catch (InterruptedException e) {
            executorService.shutdownNow();
            throw new Error("Error executing test suite: " + e.getMessage(), e);
        } finally {
            executorService.shutdown();
        }
    }
Executes the test runner with a specific {@code ExecutorService}.

<p>Tests ideally should use JUnit 5's ParameterizedTest as described
in {@link #parameterizedTestSource()}. However, this method can be
used to run tests in parallel in other scenarios (like if you aren't
using JUnit, or not running tests cases during unit tests).

@param executorService Executor service to execute tests with.
@return Returns the test case result object on success.
@throws Error if the validation events do not match expectations.
smithy-diff/src/main/java/software/amazon/smithy/diff/testrunner/SmithyDiffTestSuite.java