/**
 * Sets up the Worst-case matching benchmark.
 *
 * This benchmark generates a randomly prefixed and suffixed route, in an attempt to thwart
 * any optimization.
 *
 * @param $numIterations
 * @param $numRoutes
 * @param $numArgs
 *
 * @return Benchmark
 */
function setupBenchmark($numIterations, $numRoutes, $numArgs)
{
    $benchmark = new Benchmark($numIterations, 'Worst-case matching', new MarkdownPrinter());
    $benchmark->setDescription(sprintf('This benchmark matches the last route and unknown route. It generates a randomly prefixed and suffixed route in an attempt to thwart any optimization. %s routes each with %s arguments.', number_format($numRoutes), $numArgs));
    setupAura2($benchmark, $numRoutes, $numArgs);
    setupFastRoute($benchmark, $numRoutes, $numArgs);
    if (extension_loaded('r3')) {
        setupR3($benchmark, $numRoutes, $numArgs);
    } else {
        echo "R3 extension is not loaded. Skipping initialization for \"Worst-case matching\" test using R3.\n";
    }
    setupSymfony2($benchmark, $numRoutes, $numArgs);
    setupSymfony2Optimized($benchmark, $numRoutes, $numArgs);
    setupPux($benchmark, $numRoutes, $numArgs);
    return $benchmark;
}
/**
 * Sets up the First-route matching benchmark.
 *
 * This benchmark tests how quickly each router can match the first route
 *
 * @param $numIterations
 * @param $numRoutes
 * @param $numArgs
 *
 * @return Benchmark
 */
function setupBenchmark($numIterations, $numRoutes, $numArgs)
{
    $benchmark = new Benchmark($numIterations, 'First route matching', new MarkdownPrinter());
    $benchmark->setDescription(sprintf('This benchmark tests how quickly each router can match the first route. %s routes each with %s arguments.', number_format($numRoutes), $numArgs));
    setupAura2($benchmark, $numRoutes, $numArgs);
    setupFastRoute($benchmark, $numRoutes, $numArgs);
    if (extension_loaded('r3')) {
        setupR3($benchmark, $numRoutes, $numArgs);
    } else {
        echo "R3 extension is not loaded. Skipping initialization for \"First route matching\" test using R3.\n";
    }
    setupSymfony2($benchmark, $numRoutes, $numArgs);
    setupSymfony2Optimized($benchmark, $numRoutes, $numArgs);
    setupPux($benchmark, $numRoutes, $numArgs);
    return $benchmark;
}