Просмотр файла libarea-0.9/vendor/utopia-php/framework/tests/RouterBench.php

Размер файла: 3.31Kb
<?php

namespace Utopia;

use PhpBench\Attributes\AfterMethods;
use PhpBench\Attributes\Assert;
use PhpBench\Attributes\BeforeMethods;
use PhpBench\Attributes\Iterations;
use PhpBench\Attributes\ParamProviders;

final class RouterBench
{
    public function tearDown(): void
    {
        Router::reset();
    }

    public function setUpRouter(): void
    {
        $routeBlog = new Route(App::REQUEST_METHOD_GET, '/blog');
        $routeBlogAuthors = new Route(App::REQUEST_METHOD_GET, '/blog/authors');
        $routeBlogPost = new Route(App::REQUEST_METHOD_GET, '/blog/:post');
        $routeBlogPostComments = new Route(App::REQUEST_METHOD_GET, '/blog/:post/comments');
        $routeBlogPostCommentsSingle = new Route(App::REQUEST_METHOD_GET, '/blog/:post/comments/:comment');
        $routeBlogLongUrl = new Route(App::REQUEST_METHOD_GET, '/blog/lorem/ipsum/dolor/sit/amet/consectetur/adipiscing/elit/Quisque/dolor/nisi/gravida/non/malesuada/eget/tincidunt/vitae/eros/Donec/hendrerit/mollis/purus/non/efficitur/augue/efficitur/sed/Praesent/a/tempus/felis/et/elementum/lorem/Vestibulum/ante/ipsum/primis/in/faucibus/orci/luctus/et/ultrices/posuere/cubilia/curae/Ut/luctus/ultrices/ligula/vulputate/malesuada/magna/pellentesque/eget/Mauris/at/sodales/orci/Mauris/efficitur/volutpat/est/in/faucibus/Donec/non/eleifend/nibh/Nunc/cursus/ornare/sollicitudin/Nullam/pellentesque/placerat/justo/ac/eleifend/tortor/imperdiet/quis/Nullam/tincidunt/non/justo/ut/pulvinar/Suspendisse/laoreet/tempus/nulla/eu/aliquet/Proin/metus/erat/facilisis/in/euismod/sit/amet/mollis/ac/nisi/Nulla/facilisi');

        Router::addRoute($routeBlog);
        Router::addRoute($routeBlogAuthors);
        Router::addRoute($routeBlogPost);
        Router::addRoute($routeBlogPostComments);
        Router::addRoute($routeBlogPostCommentsSingle);
        Router::addRoute($routeBlogLongUrl);
    }

    public function provideRoutesToMatch(): iterable
    {
        foreach ([
            'single' => '/blog',
            'nested' => '/blog/authors',
            'single param' => '/blog/lorem-ipsum',
            'single param with nested' => '/blog/lorem-ipsum/comments',
            'multiple params' => '/blog/lorem-ipsum/comments/1337',
            'long' => '/blog/lorem/ipsum/dolor/sit/amet/consectetur/adipiscing/elit/Quisque/dolor/nisi/gravida/non/malesuada/eget/tincidunt/vitae/eros/Donec/hendrerit/mollis/purus/non/efficitur/augue/efficitur/sed/Praesent/a/tempus/felis/et/elementum/lorem/Vestibulum/ante/ipsum/primis/in/faucibus/orci/luctus/et/ultrices/posuere/cubilia/curae/Ut/luctus/ultrices/ligula/vulputate/malesuada/magna/pellentesque/eget/Mauris/at/sodales/orci/Mauris/efficitur/volutpat/est/in/faucibus/Donec/non/eleifend/nibh/Nunc/cursus/ornare/sollicitudin/Nullam/pellentesque/placerat/justo/ac/eleifend/tortor/imperdiet/quis/Nullam/tincidunt/non/justo/ut/pulvinar/Suspendisse/laoreet/tempus/nulla/eu/aliquet/Proin/metus/erat/facilisis/in/euismod/sit/amet/mollis/ac/nisi/Nulla/facilisi'
        ] as $name => $route) {
            yield $name => ['route' => $route];
        }
    }

    #[BeforeMethods('setUpRouter')]
    #[AfterMethods('tearDown')]
    #[Iterations(50)]
    #[Assert('mode(variant.time.avg) < 0.1 ms')]
    #[ParamProviders('provideRoutesToMatch')]
    public function benchRouter(array $data): void
    {
        Router::match(App::REQUEST_METHOD_GET, $data['route']);
    }
}